org.apache.catalina.core.ApplicationContextFacade Java Examples

The following examples show how to use org.apache.catalina.core.ApplicationContextFacade. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MetricsServletModule.java    From che with Eclipse Public License 2.0 6 votes vote down vote up
private Manager getManager(ServletContext servletContext) {

    try {

      ApplicationContextFacade acf = (ApplicationContextFacade) servletContext;
      Field applicationContextFacadeField =
          ApplicationContextFacade.class.getDeclaredField("context");
      applicationContextFacadeField.setAccessible(true);
      ApplicationContext appContext = (ApplicationContext) applicationContextFacadeField.get(acf);

      Field applicationContextField = ApplicationContext.class.getDeclaredField("context");
      applicationContextField.setAccessible(true);
      StandardContext stdContext = (StandardContext) applicationContextField.get(appContext);
      return stdContext.getManager();

    } catch (Exception e) {
      // maybe not in Tomcat?
      LOG.error("Unable to get Catalina Manager. Cause: {}", e.getMessage(), e);
      throw new RuntimeException(e.getMessage(), e);
    }
  }
 
Example #2
Source File: TomEEMyFacesContainerInitializer.java    From tomee with Apache License 2.0 6 votes vote down vote up
private boolean isFacesServletPresent(final ServletContext ctx) {
    if (ctx instanceof ApplicationContextFacade) {
        try {
            final ApplicationContext appCtx = (ApplicationContext) get(ApplicationContextFacade.class, ctx);
            final Context tomcatCtx = (Context) get(ApplicationContext.class, appCtx);
            if (tomcatCtx instanceof StandardContext) {
                final Container[] servlets = tomcatCtx.findChildren();
                if (servlets != null) {
                    for (final Container s : servlets) {
                        if (s instanceof Wrapper) {
                            if ("javax.faces.webapp.FacesServlet".equals(((Wrapper) s).getServletClass())
                                    || "Faces Servlet".equals(s.getName())) {
                                return true;
                            }
                        }
                    }
                }
            }
        } catch (final Exception e) {
            // no-op
        }
    }
    return false;
}
 
Example #3
Source File: TomEEMyFacesContainerInitializer.java    From tomee with Apache License 2.0 4 votes vote down vote up
@Override
public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
    // try to skip first
    if ("true".equalsIgnoreCase(ctx.getInitParameter("org.apache.myfaces.INITIALIZE_ALWAYS_STANDALONE"))
            || "true".equals(SystemInstance.get().getProperty(OPENEJB_JSF_SKIP, "false"))) {
        return;
    }

    // if mojarra is present skip myfaces startup
    try {
        ctx.getClassLoader().loadClass("com.sun.faces.context.SessionMap");
        return;
    } catch (final ClassNotFoundException | NoClassDefFoundError cnfe) {
        // no-op
    }

    // some message filtering, not a perf killer since this class don't log a lot
    final Logger abstractInitializerLogger = Logger.getLogger(AbstractFacesInitializer.class.getName());
    abstractInitializerLogger.setFilter(new RemoveLogMessage(
            new RemoveLogMessage(abstractInitializerLogger.getFilter(),
                    Level.WARNING, "No mappings of FacesServlet found. Abort initializing MyFaces."),
            Level.WARNING, "No mappings of FacesServlet found. Abort destroy MyFaces."));

    final boolean facesServletPresent = isFacesServletPresent(ctx);
    if (facesServletPresent || isFacesConfigPresent(ctx)) {
        // we found a faces-config.xml or some classes so let's delegate to myfaces

        // since we don't want to call isFacesConfigPresent again (it scan all jars!!!!)
        // forcing classes to not be empty
        Set<Class<?>> passedClasses = classes;
        if (passedClasses == null) {
            passedClasses = new HashSet<Class<?>>();
        }
        if (passedClasses.isEmpty()) {
            passedClasses.add(TomEEMyFacesContainerInitializer.class);
        }

        if (ctx instanceof ApplicationContextFacade) {
            try {
                final ApplicationContext appCtx = (ApplicationContext) get(ApplicationContextFacade.class, ctx);
                final Context tomcatCtx = (Context) get(ApplicationContext.class, appCtx);
                if (!Arrays.asList(tomcatCtx.findApplicationListeners()).contains(StartupServletContextListener.class.getName())) {
                    addListener(ctx);
                }
            } catch (final Exception e) {
                // add it, not important we'll simply get a warning saying it is already here
                addListener(ctx);
            }
        }

        // finally delegating begin sure we'll not call isFacesConfigPresent
        if (!facesServletPresent) {
            delegate.onStartup(classes, ctx);
        } // else already done since there is the servlet
    }
}