Class GuiceServletContextListener
- java.lang.Object
-
- pl.morgwai.base.servlet.guice.scopes.GuiceServletContextListener
-
- All Implemented Interfaces:
EventListener
,ServletContextListener
- Direct Known Subclasses:
PingingServletContextListener
public abstract class GuiceServletContextListener extends Object implements ServletContextListener
Creates and configuresapp-wide Guice Injector
and aServletModule
. A single subclass of this class must be created and either annotated with@WebListener
or enlisted inweb.xml
file inlistener
element.
-
-
Field Summary
Fields Modifier and Type Field Description protected GuiceServerEndpointConfigurator
endpointConfigurator
Stores the result ofcreateEndpointConfigurator()
to be used byaddEndpoint(Class, String)
.protected ServerContainer
endpointContainer
For use inconfigureServletsFiltersEndpoints()
.protected static Logger
log
protected ServletContext
servletContainer
For use inconfigureServletsFiltersEndpoints()
.protected ServletModule
servletModule
For use inconfigureInjections()
.
-
Constructor Summary
Constructors Constructor Description GuiceServletContextListener()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addEndpoint(Class<?> endpointClass, String path)
Adds an endpoint usingendpointConfigurator
.protected void
addEndpoint(Class<?> endpointClass, String path, ServerEndpointConfig.Configurator configurator)
Adds an endpoint using customconfigurator
.protected FilterRegistration.Dynamic
addFilter(String name, Class<? extends Filter> filterClass)
Adds a filter with async support and injects its dependencies.protected FilterRegistration.Dynamic
addFilter(String name, Class<? extends Filter> filterClass, String... urlPatterns)
Adds a filter with async support and injects its dependencies, then adds a mapping at the end of the chain forurlPatterns
andDispatcherType.REQUEST
.protected FilterRegistration.Dynamic
addFilter(String name, Class<? extends Filter> filterClass, EnumSet<DispatcherType> dispatcherTypes, String... urlPatterns)
Adds a filter with async support and injects its dependencies, then adds a mapping at the end of the chain forurlPatterns
anddispatcherTypes
.protected ServletRegistration.Dynamic
addServlet(String name, Class<? extends HttpServlet> servletClass, String... urlPatterns)
Adds a servlet with async support and injects its dependencies.protected abstract LinkedList<Module>
configureInjections()
ReturnsModule
s that configure bindings for user-defined components.protected abstract void
configureServletsFiltersEndpoints()
Programmatically adds servlets, filters and endpoints.void
contextDestroyed(ServletContextEvent destructionEvent)
Shutdowns and awaits termination all executors created byservletModule
.void
contextInitialized(ServletContextEvent initializationEvent)
protected GuiceServerEndpointConfigurator
createEndpointConfigurator()
Creates configurator to be used byaddEndpoint(Class, String)
.protected Injector
createInjector(LinkedList<Module> modules)
Called bycontextInitialized(ServletContextEvent)
to createthe app-wide Injector
.protected int
getExecutorsTerminationTimeoutSeconds()
Returns the timeout for termination of executors obtained fromservletModule
.static Injector
getInjector()
Returns the app-wide GuiceInjector
.protected void
handleUnterminatedExecutors(List<ServletContextTrackingExecutor> unterminatedExecutors)
Handles executors that failed to terminate incontextDestroyed(ServletContextEvent)
.
-
-
-
Field Detail
-
servletModule
protected final ServletModule servletModule
For use inconfigureInjections()
.
-
servletContainer
protected ServletContext servletContainer
For use inconfigureServletsFiltersEndpoints()
.
-
endpointContainer
protected ServerContainer endpointContainer
For use inconfigureServletsFiltersEndpoints()
.
-
endpointConfigurator
protected GuiceServerEndpointConfigurator endpointConfigurator
Stores the result ofcreateEndpointConfigurator()
to be used byaddEndpoint(Class, String)
.
-
log
protected static final Logger log
-
-
Method Detail
-
configureInjections
protected abstract LinkedList<Module> configureInjections() throws ServletException
ReturnsModule
s that configure bindings for user-defined components. The result will be passed when creatingthe app-wide Injector
.Implementations may use
Scope
s,ContextTracker
s and helper methods fromservletModule
.- Throws:
ServletException
-
getInjector
public static Injector getInjector()
Returns the app-wide GuiceInjector
. Exposed aspublic static
for non-programmaticServlets / filters
to manually request dependency injection withInjector.injectMembers(Object)
(usually in theirServlet.init(ServletConfig)
/Filter.init(FilterConfig)
methods).
-
configureServletsFiltersEndpoints
protected abstract void configureServletsFiltersEndpoints() throws ServletException
Programmatically adds servlets, filters and endpoints.If all of these components are configured via annotations or
web.xml
file, then this method may be empty.Convenience helper methods
addServlet(String, Class, String...)
,addFilter(String, Class, String...)
,addEndpoint(Class, String)
andaddEndpoint(Class, String, Configurator)
are provided for the most common cases.This method is called after
configureInjections()
is called andthe Injector
is created.- Throws:
ServletException
-
addServlet
protected ServletRegistration.Dynamic addServlet(String name, Class<? extends HttpServlet> servletClass, String... urlPatterns) throws ServletException
Adds a servlet with async support and injects its dependencies.For use in
configureServletsFiltersEndpoints()
.- Throws:
ServletException
-
addFilter
protected FilterRegistration.Dynamic addFilter(String name, Class<? extends Filter> filterClass) throws ServletException
Adds a filter with async support and injects its dependencies. Filter mappings should be added afterwards withFilterRegistration.addMappingForUrlPatterns(EnumSet, boolean, String...)
orFilterRegistration.addMappingForServletNames(EnumSet, boolean, String...)
.For use in
configureServletsFiltersEndpoints()
.- Throws:
ServletException
-
addFilter
protected FilterRegistration.Dynamic addFilter(String name, Class<? extends Filter> filterClass, EnumSet<DispatcherType> dispatcherTypes, String... urlPatterns) throws ServletException
Adds a filter with async support and injects its dependencies, then adds a mapping at the end of the chain forurlPatterns
anddispatcherTypes
.For use in
configureServletsFiltersEndpoints()
.- Throws:
ServletException
-
addFilter
protected FilterRegistration.Dynamic addFilter(String name, Class<? extends Filter> filterClass, String... urlPatterns) throws ServletException
Adds a filter with async support and injects its dependencies, then adds a mapping at the end of the chain forurlPatterns
andDispatcherType.REQUEST
.For use in
configureServletsFiltersEndpoints()
.- Throws:
ServletException
-
createEndpointConfigurator
protected GuiceServerEndpointConfigurator createEndpointConfigurator()
Creates configurator to be used byaddEndpoint(Class, String)
. By defaultGuiceServerEndpointConfigurator
that injectsEndpoints
' dependencies and sets up contexts around their lifecycle methods.This method is called once in
contextInitialized(ServletContextEvent)
, the result is stored asendpointConfigurator
and shared among allEndpoint
instances created withaddEndpoint(Class, String)
.Note that
Endpoints
annotated withServerEndpoint
will have their separate instances ofServerEndpointConfig.Configurator
each.This method may be overridden by subclasses if a more specialized configurator needs to be used.
-
addEndpoint
protected void addEndpoint(Class<?> endpointClass, String path) throws ServletException
Adds an endpoint usingendpointConfigurator
. For use inconfigureServletsFiltersEndpoints()
.Pre-builds dynamic proxy class for
endpointClass
in advance.Useful mostly for unannotated endpoints extending
Endpoint
.- Throws:
ServletException
-
addEndpoint
protected void addEndpoint(Class<?> endpointClass, String path, ServerEndpointConfig.Configurator configurator) throws ServletException
Adds an endpoint using customconfigurator
.Useful mostly for unannotated endpoints extending
Endpoint
.- Throws:
ServletException
-
contextInitialized
public final void contextInitialized(ServletContextEvent initializationEvent)
CallsconfigureInjections()
,creates the app-wide Injector
and callsconfigureServletsFiltersEndpoints()
. Also creates and installs all other infrastructure elements such asservletContainer
,endpointContainer
,RequestContextFilter
etc.- Specified by:
contextInitialized
in interfaceServletContextListener
-
createInjector
protected Injector createInjector(LinkedList<Module> modules)
Called bycontextInitialized(ServletContextEvent)
to createthe app-wide Injector
. By default basically callsGuice.createInjector(modules)
. May be overridden if some extra customizations are needed.
-
contextDestroyed
public void contextDestroyed(ServletContextEvent destructionEvent)
Shutdowns and awaits termination all executors created byservletModule
. If after the timeout specified bygetExecutorsTerminationTimeoutSeconds()
not all executors are terminated, callshandleUnterminatedExecutors(List)
.- Specified by:
contextDestroyed
in interfaceServletContextListener
-
getExecutorsTerminationTimeoutSeconds
protected int getExecutorsTerminationTimeoutSeconds()
Returns the timeout for termination of executors obtained fromservletModule
. By default5
seconds. Called bycontextDestroyed(ServletContextEvent)
. May be overridden if different value should be used.
-
handleUnterminatedExecutors
protected void handleUnterminatedExecutors(List<ServletContextTrackingExecutor> unterminatedExecutors)
Handles executors that failed to terminate incontextDestroyed(ServletContextEvent)
. By default callsshutdownNow()
for each executor and hopes for the best... Subclasses may override this method to handle unterminated executors in a more specialized way.
-
-