Can someone tell me which documentation i should read or use (about play framework) to :
Not allowed a user (A) to open an HTML (view page ex index.scala.html) if it is already opened from another user (B) This means that my configured page will be showed only for one user in same time, if this is user close the HTML page then someone else can open it …
cookie-based http sessions are unique per user/user-agent so it won’t work to use as a lock.
in order to do page-level locking you’ll need some shared lock that multiple users/requests can access…
that could be
a singleton object in your application (like managed by Guice or stored in the application context)
a row-level record in a database
an entry in a shared cache
that’s up to you.
to have a mutually exclusive html page, you could write a PageLockAction on your page handler method.
controller method
@With(PageLockAction.class)
public Result page(Request request) {
return ok(view.html.YourPage.render());
}
action
public class PageLockAction extends Simple.Action {
private final PageLock lock;
public PageLockAction(PageLock lock) {
this.lock = lock;
}
@Override
public CompletionStage<Result> call(Request request) {
// double-checked lock read
// if available, acquire lock
// return delegate.apply(request);
// else
// return not available page
}
}
you’d then need to have an endpoint to release the lock… so your page would probably need to make an api call to that endpoint when the user A is done to release the lock… otherwise user B would never be able to access the page again.