|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object javax.servlet.GenericServlet org.apache.avalon.excalibur.component.servlet.ExcaliburComponentManagerServlet
Makes it possible for servlets to work with Avalon components without having to do any coding to setup and manage the lifecycle of the ServiceManager (ComponentManager).
To make use of the ExcaliburComponentManagerServet. You will need to define the servlet in your web.xml file as follows:
<!-- ExcaliburComponentManagerServlet (for initializing ComponentManager). --> <servlet> <servlet-name>ExcaliburComponentManagerServlet</servlet-name> <display-name>ExcaliburComponentManagerServlet</display-name> <description>Creates component manager, does not service requests.</description> <servlet-class> org.apache.avalon.excalibur.component.servlet.ExcaliburComponentManagerServlet </servlet-class> <!-- This parameter points to the logkit configuration file. --> <!-- Note that the path is specified in absolute notation but it will be --> <!-- resolved relative to the servlets webapp context path --> <init-param> <param-name>logkit</param-name> <param-value>/WEB-INF/logkit.xml</param-value> </init-param> <!-- This parameter points to the components configuration file. --> <init-param> <param-name>components</param-name> <param-value>/WEB-INF/components.xml</param-value> </init-param> <!-- Roles file supplements configuration file to make the latter --> <!-- more readable. Most likely you don't want to change the roles --> <!-- file --> <init-param> <param-name>roles</param-name> <param-value>/WEB-INF/roles.xml</param-value> </init-param> <!-- This parameter points to the instrument manager configuration file. --> <init-param> <param-name>instrument</param-name> <param-value>/WEB-INF/instrument.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>Please pay particular attention to the load-on-startup element. It is used to control the order in which servlets are started by the servlet engine. It must have a value which is less than any other servlets making use of the ServiceManager. This is to ensure that the ServiceManager is initialized before any other servlets attempt to start using it.
All of the configuration files are located in the WEB-INF directory by
default. The instrument configuration file is optional. Please see the
ExcaliburComponentManagerCreator
class for details on what goes into these configuration files. Note that
the lifecycle of the ExcaliburComponentManagerCreator is managed automatically
by this servlet, so there is no need to access the class directly.
Once the servlet has been configured, other servlets may gain access to the ServiceManager (ComponentManager), InstrumentManager and LoggerManager via the ServletContext using the following code within a servlet:
// Get a reference to the ServletContext ServletContext servletContext = getServletContext(); // Acquire the LoggerManager LoggerManager loggerManager = (LoggerManager)m_servletContext.getAttribute( LoggerManager.class.getName() ); // Acquire the InstrumentManager InstrumentManager instrumentManager = (InstrumentManager)m_servletContext.getAttribute( InstrumentManager.class.getName() ); // Acquire the ServiceManager ServiceManager serviceManager = (ServiceManager)m_servletContext.getAttribute( ServiceManager.class.getName() ); // Acquire the ComponentManager ( Deprecated ) ComponentManager componentManager = (ComponentManager)m_servletContext.getAttribute( ComponentManager.class.getName() );The ExcaliburComponentManagerServlet makes use of a proxy system to manage reference to the above managers, so it is not necessary to release them when a servlet is done using them.
It may be necessary to add the following code to the end of the dispose method of any
servlets referencing any of the above proxies. This is because on some containers,
like Tomcat, the classloader is immediately invalidated after the last servlet is
disposed. If this happens before the managers have all been disposed, then you may
see errors in the console like: WebappClassLoader: Lifecycle error : CL stopped
System.gc(); try { Thread.sleep(250); } catch ( InterruptedException e ) {}Note that servlets which extend the AbstractComponentManagerServlet will behave correctly.
Constructor Summary | |
ExcaliburComponentManagerServlet()
Deprecated. |
Method Summary | |
void |
destroy()
Deprecated. Called by the servlet container to destroy the servlet. |
void |
init(javax.servlet.ServletConfig servletConfig)
Deprecated. Builds the component manager and stores references to the ComponentManager, LoggerManager, and InstrumentManager into the ServletContext. |
void |
service(javax.servlet.ServletRequest servletRequest,
javax.servlet.ServletResponse servletResponse)
Deprecated. This servlet does not accept requests. |
Methods inherited from class javax.servlet.GenericServlet |
getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public ExcaliburComponentManagerServlet()
Method Detail |
public void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException
servletConfig
- Servlet configuration
javax.servlet.ServletException
- If there are any problems initializing the
servlet.public void destroy()
public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.UnavailableException
javax.servlet.UnavailableException
- always
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |