Class ServletModule
- java.lang.Object
-
- pl.morgwai.base.servlet.guice.scopes.ServletModule
-
- All Implemented Interfaces:
Module
public class ServletModule extends Object implements Module
ContainsServlet
and websocket GuiceScope
s,ContextTracker
s and some helper methods. Usually a single app-wide instance is created at the app startup.
-
-
Field Summary
Fields Modifier and Type Field Description List<ContextTracker<?>>
allTrackers
Singleton ofcontainerCallContextTracker
.static Key<List<ContextTracker<?>>>
allTrackersKey
Key
ofallTrackers
.ContextTracker<ContainerCallContext>
containerCallContextTracker
Allows tracking ofServletRequestContext
s andWebsocketEventContext
s.static Key<ContextTracker<ContainerCallContext>>
containerCallContextTrackerKey
Key
ofcontainerCallContextTracker
.Scope
containerCallScope
Scopes objects to theContext
of either anHttpServletRequests
or awebsocket events
, depending within which type a givenThread
runs (as returned bycontainerCallContextTracker
).ContextBinder
contextBinder
ContextBinder
created withallTrackers
.Scope
httpSessionScope
Scopes objects to theContext of an HttpSessions
.Scope
websocketConnectionScope
Scopes objects to theContext of a websocket connections (javax.websocket.Session)
.
-
Constructor Summary
Constructors Constructor Description ServletModule(ServletContext appDeployment)
Creates a new module.
-
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<TrackableContext<?>>
getActiveContexts()
List<ServletContextTrackingExecutor>
getExecutors()
List of allExecutors
created by thisModule
.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)
Constructs a context tracking 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.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 objects to theContext
of either anHttpServletRequests
or awebsocket events
, depending within which type a givenThread
runs (as returned bycontainerCallContextTracker
).
-
httpSessionScope
public final Scope httpSessionScope
Scopes objects to theContext of an HttpSessions
. ThisScope
is induced byContainerCallContext
s obtained fromcontainerCallContextTracker
, so it may be active both withinServletRequestContext
s andWebsocketEventContext
s.NOTE: there's no way to create an
HttpSession
from the websocketEndpoint
layer if it didn't exist before. To safely use thisScope
in websocketEndpoints
, other layers must ensure that aSession
exists (for example aFilter
targeting URL patterns of websockets can be used).NOTE: similarly as with
Session attributes
, session-scoped objects must beSerializable
if they need to be transferred between cluster nodes.
-
websocketConnectionScope
public final Scope websocketConnectionScope
Scopes objects to theContext of a websocket connections (javax.websocket.Session)
. ThisScope
is induced by and active within onlyWebsocketEventContext
s.
-
allTrackers
public final List<ContextTracker<?>> allTrackers
Singleton ofcontainerCallContextTracker
. TypeList<ContextTracker<?>>
is bound to it inconfigure(Binder)
method.
-
contextBinder
public final ContextBinder contextBinder
ContextBinder
created withallTrackers
.
-
containerCallContextTrackerKey
public static final Key<ContextTracker<ContainerCallContext>> containerCallContextTrackerKey
Key
ofcontainerCallContextTracker
.
-
allTrackersKey
public static final Key<List<ContextTracker<?>>> allTrackersKey
Key
ofallTrackers
.
-
-
Constructor Detail
-
ServletModule
public ServletModule(ServletContext appDeployment)
Creates a new module. For use in apps that don't useGuiceServletContextListener
.
-
-
Method Detail
-
getActiveContexts
public List<TrackableContext<?>> getActiveContexts()
-
configure
public void configure(Binder binder)
Creates infrastructure bindings. Specifically binds the following:allTrackersKey
toallTrackers
ContextBinder
tocontextBinder
ServletContext
toappDeployment
containerCallContextTrackerKey
tocontainerCallContextTracker
-
ContainerCallContext
,WebsocketConnectionContext
andHttpSessionContext
toProvider
s returning instances current for the callingThread
-
getExecutors
public List<ServletContextTrackingExecutor> getExecutors()
List of allExecutors
created by thisModule
.
-
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 corePoolSize, int maxPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory)
Constructs a context tracking executor.
-
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.rejectionHandler
will receive a task wrapped with aContextBoundRunnable
.In order for
ServletContextTrackingExecutor.execute( javax.servlet.http.HttpServletResponse, Runnable)
andServletContextTrackingExecutor.execute(javax.websocket.Session, Runnable)
to work properly, therejectionHandler
must throw aRejectedExecutionException
.
-
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()
-
-