Class ServletModule
- java.lang.Object
-
- pl.morgwai.base.servlet.guice.scopes.ServletModule
-
- All Implemented Interfaces:
Module
public class ServletModule extends Object implements Module
Contains servlet and websocket GuiceScope
s,ContextTracker
s and some helper methods. A single app-wide instance is created at app startup:GuiceServletContextListener.servletModule
.
-
-
Field Summary
Fields Modifier and Type Field Description List<ContextTracker<?>>
allTrackers
Contains all trackers.ContextTracker<ContainerCallContext>
containerCallContextTracker
Allows tracking ofServletRequestContext
s andWebsocketEventContext
s.Scope
containerCallScope
Scopes bindings to either aServletRequestContext
or aWebsocketEventContext
.Scope
httpSessionScope
Scopes bindings to the context of a givenHttpSession
.Scope
websocketConnectionScope
Scopes bindings to thecontext of a websocket connection (jakarta.websocket.Session)
.
-
Constructor Summary
Constructors Constructor Description ServletModule()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
awaitTerminationOfAllExecutors()
Awaits for termination
of all executors obtained from this module.List<ServletContextTrackingExecutor>
awaitTerminationOfAllExecutors(long timeout, TimeUnit unit)
Awaits for termination
of all executors obtained from this module.void
configure(Binder binder)
Creates infrastructure bindings.List<ServletContextTrackingExecutor>
enforceTerminationOfAllExecutors(long timeout, TimeUnit unit)
Enforces termination
of all executors obtained from this module.List<ServletContextTrackingExecutor>
getExecutors()
List of all executors created by this module.ServletContextTrackingExecutor
newContextTrackingExecutor(String name, int poolSize)
Constructs a fixed size, context tracking executor that uses an unboundLinkedBlockingQueue
and a newNamingThreadFactory
named after this executor.ServletContextTrackingExecutor
newContextTrackingExecutor(String name, int poolSize, int queueSize)
Constructs a fixed size, context tracking executor that uses aLinkedBlockingQueue
of sizequeueSize
, the defaultRejectedExecutionHandler
and a newNamingThreadFactory
named after this executor.ServletContextTrackingExecutor
newContextTrackingExecutor(String name, int corePoolSize, int maxPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
Constructs a context tracking executor.ServletContextTrackingExecutor
newContextTrackingExecutor(String name, int poolSize, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler rejectionHandler)
Constructs a fixed size, context tracking executor that usesworkQueue
,rejectionHandler
and a newNamingThreadFactory
named after this executor.void
shutdownAllExecutors()
Shutdowns all executors obtained from this module.Awaitable.WithUnit
toAwaitableOfEnforcedTerminationOfAllExecutors()
Awaitable.WithUnit
toAwaitableOfTerminationOfAllExecutors()
-
-
-
Field Detail
-
containerCallContextTracker
public final ContextTracker<ContainerCallContext> containerCallContextTracker
Allows tracking ofServletRequestContext
s andWebsocketEventContext
s.
-
containerCallScope
public final Scope containerCallScope
Scopes bindings to either aServletRequestContext
or aWebsocketEventContext
. Objects bound in this scope can be obtained both in servlets and endpoints.- See Also:
ContainerCallContext
-
httpSessionScope
public final Scope httpSessionScope
Scopes bindings to the context of a givenHttpSession
. Available both to servlets and websocket endpoints.NOTE: there's no way to create an
HttpSession
from the websocket endpoint layer if it does not exist yet. To safely use this scope in websocket endpoints, other layers must ensure that a session exists (for example aFilter
targeting URL patterns of websockets can be used).NOTE: similarly as with
session attributes
, it is recommended for session-scoped objects to beSerializable
.
-
websocketConnectionScope
public final Scope websocketConnectionScope
Scopes bindings to thecontext of a websocket connection (jakarta.websocket.Session)
.
-
allTrackers
public final List<ContextTracker<?>> allTrackers
Contains all trackers.configure(Binder)
bindsList<ContextTracker<?>>
to it for use withContextTracker.getActiveContexts(List)
.
-
-
Method Detail
-
configure
public void configure(Binder binder)
Creates infrastructure bindings. Binds the following:- Their respective types to
containerCallContextTracker
and all 3 contexts List<ContextTracker<?>>
toallTrackers
ContextBinder
tonew ContextBinder(allTrackers)
- Their respective types to
-
getExecutors
public List<ServletContextTrackingExecutor> getExecutors()
List of all executors created by this module.
-
newContextTrackingExecutor
public ServletContextTrackingExecutor newContextTrackingExecutor(String name, int poolSize)
Constructs a fixed size, context tracking executor that uses an unboundLinkedBlockingQueue
and a newNamingThreadFactory
named after this executor.To avoid
OutOfMemoryError
s, an external mechanism that limits maximum number of tasks (such as a load balancer or a frontend proxy) should be used.
-
newContextTrackingExecutor
public ServletContextTrackingExecutor newContextTrackingExecutor(String name, int poolSize, int queueSize)
Constructs a fixed size, context tracking executor that uses aLinkedBlockingQueue
of sizequeueSize
, the defaultRejectedExecutionHandler
and a newNamingThreadFactory
named after this executor.The default
RejectedExecutionHandler
throws aRejectedExecutionException
if the queue is full or the executor is shutting down. It should usually be handled by sendingHttpServletResponse.SC_SERVICE_UNAVAILABLE
/CloseReason.CloseCodes.TRY_AGAIN_LATER
to the client.
-
newContextTrackingExecutor
public ServletContextTrackingExecutor newContextTrackingExecutor(String name, int poolSize, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler rejectionHandler)
Constructs a fixed size, context tracking executor that usesworkQueue
,rejectionHandler
and a newNamingThreadFactory
named after this executor.rejectionHandler
will receive a task wrapped with aContextBoundRunnable
.In order for
ServletContextTrackingExecutor.execute( jakarta.servlet.http.HttpServletResponse, Runnable)
andServletContextTrackingExecutor.execute(jakarta.websocket.Session, Runnable)
to work properly, therejectionHandler
must throw aRejectedExecutionException
.
-
newContextTrackingExecutor
public ServletContextTrackingExecutor newContextTrackingExecutor(String name, int corePoolSize, int maxPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
Constructs a context tracking executor.
-
shutdownAllExecutors
public void shutdownAllExecutors()
Shutdowns all executors obtained from this module.
-
enforceTerminationOfAllExecutors
public List<ServletContextTrackingExecutor> enforceTerminationOfAllExecutors(long timeout, TimeUnit unit) throws InterruptedException
Enforces termination
of all executors obtained from this module.- Returns:
- an empty list if all executors were terminated, list of unterminated otherwise.
- Throws:
InterruptedException
-
awaitTerminationOfAllExecutors
public List<ServletContextTrackingExecutor> awaitTerminationOfAllExecutors(long timeout, TimeUnit unit) throws InterruptedException
Awaits for termination
of all executors obtained from this module.- Returns:
- an empty list if all executors were terminated, list of unterminated otherwise.
- Throws:
InterruptedException
-
awaitTerminationOfAllExecutors
public void awaitTerminationOfAllExecutors() throws InterruptedException
Awaits for termination
of all executors obtained from this module.- Throws:
InterruptedException
-
toAwaitableOfEnforcedTerminationOfAllExecutors
public Awaitable.WithUnit toAwaitableOfEnforcedTerminationOfAllExecutors()
-
toAwaitableOfTerminationOfAllExecutors
public Awaitable.WithUnit toAwaitableOfTerminationOfAllExecutors()
-
-