Search in sources :

Example 1 with ApplicationContext

use of org.apache.catalina.core.ApplicationContext in project tomee by apache.

the class TomEEMyFacesContainerInitializer method isFacesServletPresent.

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;
}
Also used : ApplicationContext(org.apache.catalina.core.ApplicationContext) Context(org.apache.catalina.Context) ServletContext(javax.servlet.ServletContext) StandardContext(org.apache.catalina.core.StandardContext) Wrapper(org.apache.catalina.Wrapper) ApplicationContext(org.apache.catalina.core.ApplicationContext) Container(org.apache.catalina.Container) ApplicationContextFacade(org.apache.catalina.core.ApplicationContextFacade) StandardContext(org.apache.catalina.core.StandardContext) ServletException(javax.servlet.ServletException)

Example 2 with ApplicationContext

use of org.apache.catalina.core.ApplicationContext in project tomee by apache.

the class TomEEMyFacesContainerInitializer method onStartup.

@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
    }
}
Also used : ApplicationContext(org.apache.catalina.core.ApplicationContext) Context(org.apache.catalina.Context) ServletContext(javax.servlet.ServletContext) StandardContext(org.apache.catalina.core.StandardContext) AbstractFacesInitializer(org.apache.myfaces.webapp.AbstractFacesInitializer) ApplicationContextFacade(org.apache.catalina.core.ApplicationContextFacade) Logger(java.util.logging.Logger) ServletException(javax.servlet.ServletException) ApplicationContext(org.apache.catalina.core.ApplicationContext) RemoveLogMessage(org.apache.openejb.log.RemoveLogMessage)

Aggregations

ServletContext (javax.servlet.ServletContext)2 ServletException (javax.servlet.ServletException)2 Context (org.apache.catalina.Context)2 ApplicationContext (org.apache.catalina.core.ApplicationContext)2 ApplicationContextFacade (org.apache.catalina.core.ApplicationContextFacade)2 StandardContext (org.apache.catalina.core.StandardContext)2 Logger (java.util.logging.Logger)1 Container (org.apache.catalina.Container)1 Wrapper (org.apache.catalina.Wrapper)1 AbstractFacesInitializer (org.apache.myfaces.webapp.AbstractFacesInitializer)1 RemoveLogMessage (org.apache.openejb.log.RemoveLogMessage)1