All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unidal.web.AbstractContainerServlet Maven / Gradle / Ivy

package org.unidal.web;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.LoggerManager;
import org.unidal.lookup.ContainerLoader;
import org.unidal.lookup.LookupException;

public abstract class AbstractContainerServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;

   private PlexusContainer m_container;

   private Logger m_logger;

   protected PlexusContainer getContainer() {
      return m_container;
   }

   protected Logger getLogger() {
      return m_logger;
   }

   protected  boolean hasComponent(Class role) {
      return hasComponent(role, null);
   }

   protected  boolean hasComponent(Class role, Object roleHint) {
      return m_container.hasComponent(role.getName(), roleHint == null ? "default" : roleHint.toString());
   }

   @Override
   public void init(ServletConfig config) throws ServletException {
      super.init(config);

      try {
         if (m_container == null) {
            m_container = ContainerLoader.getDefaultContainer();
         }

         LoggerManager loggerManager = m_container.lookup(LoggerManager.class);

         m_logger = loggerManager.getLoggerForComponent(getClass().getName());

         initComponents(config);
      } catch (Exception e) {
         if (m_logger != null) {
            m_logger.error("Servlet initializing failed. " + e, e);
         } else {
            System.out.println("Servlet initializing failed. " + e);
            e.printStackTrace(System.out);
         }

         throw new ServletException("Servlet initializing failed. " + e, e);
      }
   }

   protected abstract void initComponents(ServletConfig config) throws Exception;

   protected  T lookup(Class role) throws LookupException {
      return lookup(role, null);
   }

   protected  T lookup(Class role, String roleHint) throws LookupException {
      try {
         return (T) m_container.lookup(role, roleHint == null ? "default" : roleHint);
      } catch (ComponentLookupException e) {
         throw new LookupException("Component(" + role.getName() + ") lookup failure. details: " + e.getMessage(), e);
      }
   }

   protected void release(Object component) throws LookupException {
      if (component != null) {
         try {
            m_container.release(component);
         } catch (ComponentLifecycleException e) {
            throw new LookupException("Can't release component: " + component, e);
         }
      }
   }

   // For test purpose
   public AbstractContainerServlet setContainer(PlexusContainer container) {
      m_container = container;
      return this;
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy