use of org.apache.catalina.core.ApplicationContextFacade 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;
}
use of org.apache.catalina.core.ApplicationContextFacade 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
}
}
Aggregations