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; }
protected RedisSessionManager getRedisSessionManager(Request request) { RedisSessionManager sessionManager = null; ApplicationContextFacade appContextFacadeObj = (ApplicationContextFacade)request.session().raw().getServletContext(); try { Field applicationContextField = appContextFacadeObj.getClass().getDeclaredField("context"); applicationContextField.setAccessible(true); ApplicationContext appContextObj = (ApplicationContext)applicationContextField.get(appContextFacadeObj); Field standardContextField = appContextObj.getClass().getDeclaredField("context"); standardContextField.setAccessible(true); StandardContext standardContextObj = (StandardContext)standardContextField.get(appContextObj); sessionManager = (RedisSessionManager)standardContextObj.getManager(); } catch (Exception e) { } return sessionManager; }
@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 } }
public void setApplicationContext(ApplicationContext context) throws BeansException { // TODO Auto-generated method stub }