@Override public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException { if (System.getProperty("openejb.embedder.source") != null) { ctx.log("TomEE already initialized"); return; } ctx.log("Embedded TomEE starting"); final Properties properties = new Properties(); properties.putAll(System.getProperties()); properties.setProperty("openejb.system.apps", Boolean.toString(Boolean.getBoolean("openejb.system.apps"))); properties.setProperty("tomee.war", new File(ctx.getRealPath("WEB-INF")).getParentFile().getAbsolutePath()); properties.setProperty("openejb.embedder.source", getClass().getSimpleName()); TomcatEmbedder.embed(properties, ServletContainerInitializer.class.getClassLoader()); ctx.log("Embedded TomEE started"); Deployer.deploy(ctx); ctx.log("Application '" + ctx.getContextPath() + "' TomEE-ised"); }
private void start() throws InstantiationException, IllegalAccessException { TomcatApplicationBuilderFactory builderFactory = factoryClass.newInstance(); TomcatApplicationBuilder builder = builderFactory.getBuilder(annotation); for (ServletContainerInitializer initializer : initializers) { builder.addServletContainerInitializer(initializer); } if (annotation != null) { this.timeout = annotation.timeout(); } else { this.timeout = TomcatServerConfig.DEFAULT_TIMEOUT; } Tomcat tomcat = builder.build(); this.runtime = tomcat.start(timeout); }
@Override public TomcatApplicationBuilder getBuilder(TomcatServerConfig annotation) { File baseFile = getBaseDir(annotation); String appName = getAppName(annotation); int port = getPort(annotation); File appDir = new File(baseFile, String.format("webapps/%s", appName)); if (!appDir.exists() && !appDir.mkdirs()) { throw new IllegalStateException("Unable to create app dir at: " + appDir); } TomcatApplicationBuilder builder = new TomcatFactory().create() .newMinimalServer(baseFile, port) .createApplication(appName) .setStartStopThreads(1) .withDefaultConfig(); if (annotation != null) { for (Class<? extends ServletContainerInitializer> initializer : annotation.value()) { builder.addServletContainerInitializer(initializer); } } return builder; }
private Set<ServletContainerInitializer> getSCIsForClass(String className) { for (Map.Entry<Class<?>, Set<ServletContainerInitializer>> entry : typeInitializerMap.entrySet()) { Class<?> clazz = entry.getKey(); if (!clazz.isAnnotation()) { if (clazz.getName().equals(className)) { return entry.getValue(); } } } return EMPTY_SCI_SET; }
@Test public void testWebapp() throws Exception { Tomcat tomcat = getTomcatInstance(); File appDir = new File("test/webapp-3.0-fragments-empty-absolute-ordering"); StandardContext ctxt = (StandardContext) tomcat.addContext(null, "/test", appDir.getAbsolutePath()); ctxt.addLifecycleListener(new ContextConfig()); tomcat.start(); WebappServiceLoader<ServletContainerInitializer> loader = new WebappServiceLoader<ServletContainerInitializer>(ctxt); @SuppressWarnings("unused") Collection<ServletContainerInitializer> initializers = loader.load(ServletContainerInitializer.class); }
@Test public void testBug50015() throws Exception { // Test that configuring servlet security constraints programmatically // does work. // Set up a container Tomcat tomcat = getTomcatInstance(); // No file system docBase required Context ctx = tomcat.addContext("", null); // Setup realm MapRealm realm = new MapRealm(); realm.addUser("tomcat", "tomcat"); realm.addUserRole("tomcat", "tomcat"); ctx.setRealm(realm); // Configure app for BASIC auth LoginConfig lc = new LoginConfig(); lc.setAuthMethod("BASIC"); ctx.setLoginConfig(lc); ctx.getPipeline().addValve(new BasicAuthenticator()); // Add ServletContainerInitializer ServletContainerInitializer sci = new Bug50015SCI(); ctx.addServletContainerInitializer(sci, null); // Start the context tomcat.start(); // Request the first servlet ByteChunk bc = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/bug50015", bc, null); // Check for a 401 assertNotSame("OK", bc.toString()); assertEquals(401, rc); }
private void doTestSecurityAnnotationsAddServlet(boolean useCreateServlet) throws Exception { // Setup Tomcat instance Tomcat tomcat = getTomcatInstance(); // No file system docBase required Context ctx = tomcat.addContext("", null); Servlet s = new DenyAllServlet(); ServletContainerInitializer sci = new SCI(s, useCreateServlet); ctx.addServletContainerInitializer(sci, null); tomcat.start(); ByteChunk bc = new ByteChunk(); int rc; rc = getUrl("http://localhost:" + getPort() + "/", bc, null, null); if (useCreateServlet) { assertTrue(bc.getLength() > 0); assertEquals(403, rc); } else { assertEquals("OK", bc.toString()); assertEquals(200, rc); } }
private void populateSCIsForCacheEntry(JavaClassCacheEntry cacheEntry) { Set<ServletContainerInitializer> result = new HashSet<ServletContainerInitializer>(); // Super class String superClassName = cacheEntry.getSuperclassName(); JavaClassCacheEntry superClassCacheEntry = javaClassCache.get(superClassName); // Avoid an infinite loop with java.lang.Object if (cacheEntry.equals(superClassCacheEntry)) { cacheEntry.setSciSet(EMPTY_SCI_SET); return; } // May be null of the class is not present or could not be loaded. if (superClassCacheEntry != null) { if (superClassCacheEntry.getSciSet() == null) { populateSCIsForCacheEntry(superClassCacheEntry); } result.addAll(superClassCacheEntry.getSciSet()); } result.addAll(getSCIsForClass(superClassName)); // Interfaces for (String interfaceName : cacheEntry.getInterfaceNames()) { JavaClassCacheEntry interfaceEntry = javaClassCache.get(interfaceName); // A null could mean that the class not present in application or // that there is nothing of interest. Either way, nothing to do here // so move along if (interfaceEntry != null) { if (interfaceEntry.getSciSet() == null) { populateSCIsForCacheEntry(interfaceEntry); } result.addAll(interfaceEntry.getSciSet()); } result.addAll(getSCIsForClass(interfaceName)); } cacheEntry.setSciSet(result.isEmpty() ? EMPTY_SCI_SET : result); }
@Override public ServletContainerInitializer getServletContainerInitializer() { if (this.servletContainerInitializer == null) { this.servletContainerInitializer = new FacesInitializer(); } return this.servletContainerInitializer; }
@Override public ServletContainerInitializer getServletContainerInitializer() { if (this.servletContainerInitializer == null) { this.servletContainerInitializer = new MyFacesContainerInitializer(); } return this.servletContainerInitializer; }
@Override public void onStartup(ServletContext sc) throws ServletException { ServletContainerInitializer servletContainerInitializer = getServletContainerInitializer(); JsfClassFactory jsfClassFactory = new JsfClassFactory(this); JoinFacesAnnotationProvider.setAnnotatedClasses(jsfClassFactory.getAnnotatedClassMap()); JoinFacesAnnotationProvider.setUrls(jsfClassFactory.getURLs()); servletContainerInitializer.onStartup(jsfClassFactory.getAllClasses(), sc); }
@Override public ServletContainerInitializer getServletContainerInitializer() { if (this.servletContainerInitializer == null) { this.servletContainerInitializer = new FacesViewsInitializer(); } return this.servletContainerInitializer; }
private void addJasperInitializer(TomcatEmbeddedContext context) { try { ServletContainerInitializer initializer = (ServletContainerInitializer) ClassUtils .forName("org.apache.jasper.servlet.JasperInitializer", null) .newInstance(); context.addServletContainerInitializer(initializer, null); } catch (Exception ex) { // Probably not Tomcat 8 } }
private void registerServletContainerInitializerToDriveServletContextInitializers( DeploymentInfo deployment, ServletContextInitializer... initializers) { ServletContextInitializer[] mergedInitializers = mergeInitializers(initializers); Initializer initializer = new Initializer(mergedInitializers); deployment.addServletContainerInitalizer(new ServletContainerInitializerInfo( Initializer.class, new ImmediateInstanceFactory<ServletContainerInitializer>(initializer), NO_CLASSES)); }
private ServletContainerInitializer newInitializer() { for (String className : INITIALIZER_CLASSES) { try { Class<?> initializerClass = ClassUtils.forName(className, null); return (ServletContainerInitializer) initializerClass.newInstance(); } catch (Exception ex) { // Ignore } } return null; }
private List<ContainerInitializer> jspInitializers() { JettyJasperInitializer sci = new JettyJasperInitializer(); ContainerInitializer initializer = new ContainerInitializer( (ServletContainerInitializer) sci, null); List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>(); initializers.add(initializer); return initializers; }
public void run() throws Exception{ Tomcat tomcat = new Tomcat(); tomcat.setPort(port); final FunsteroidModule funsteroidModule=new FunsteroidModule() .withFilter(filterConfiguration) .withFilter(filter) .withRoutes(route) .withRoutes(routeProvider) .withMacros(macroRegister) .withMacros(macroRegisterInstance); Context webapp = tomcat.addWebapp("/", getWebAppPath()); createGuiceFilter(webapp); webapp.addServletContainerInitializer(new ServletContainerInitializer() { @Override public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException { ctx.addListener(new GuiceConfigListener(funsteroidModule)); } }, null); tomcat.start(); tomcat.getServer().await(); }
/** * Call the initializers accessible from the specific class loader. This may result in additional changes to * the servlet context because the initializers may want to add event listeners or maybe even servlets to * the context. * * @param context The servlet context to initialize * @param loader The class loader */ private static void callInitializers(ServletContext context, ClassLoader loader) { ServiceLoader<ServletContainerInitializer> services = ServiceLoader.load(ServletContainerInitializer.class, loader); services.forEach((l) -> { try { l.onStartup(null, context); } catch (Exception exc) { exc.printStackTrace(); } }); }
private List<ServletContainerInitializerInfo> getServletContainerInitializers() { List<ServletContainerInitializerInfo> infos = new ArrayList<>(); for (ServletContainerInitializer initializer : ServiceLoader.load(ServletContainerInitializer.class)) { HandlesTypes types = initializer.getClass().getAnnotation(HandlesTypes.class); infos.add(new ServletContainerInitializerInfo( initializer.getClass(), new ImmediateInstanceFactory<>(initializer), types == null ? Collections.emptySet() : new LinkedHashSet<>(Arrays.asList(types.value())))); } return infos; }
private Set<ServletContainerInitializer> getSCIsForClass(String className) { for (Map.Entry<Class<?>, Set<ServletContainerInitializer>> entry : typeInitializerMap.entrySet()) { Class<?> clazz = entry.getKey(); if (!clazz.isAnnotation()) { if (clazz.getName().equals(className)) { return entry.getValue(); } } } return Collections.emptySet(); }
@Test public void testWebapp() throws Exception { Tomcat tomcat = getTomcatInstance(); File appDir = new File("test/webapp-3.0-fragments-empty-absolute-ordering"); StandardContext ctxt = (StandardContext) tomcat.addContext(null, "/test", appDir.getAbsolutePath()); ctxt.addLifecycleListener(new ContextConfig()); tomcat.start(); WebappServiceLoader<ServletContainerInitializer> loader = new WebappServiceLoader<ServletContainerInitializer>(ctxt.getServletContext(), null); @SuppressWarnings("unused") Collection<ServletContainerInitializer> initializers = loader.load(ServletContainerInitializer.class); }
@Test public void testBug50015() throws Exception { // Test that configuring servlet security constraints programmatically // does work. // Set up a container Tomcat tomcat = getTomcatInstance(); // Must have a real docBase - just use temp File docBase = new File(System.getProperty("java.io.tmpdir")); Context ctx = tomcat.addContext("", docBase.getAbsolutePath()); // Setup realm MapRealm realm = new MapRealm(); realm.addUser("tomcat", "tomcat"); realm.addUserRole("tomcat", "tomcat"); ctx.setRealm(realm); // Configure app for BASIC auth LoginConfig lc = new LoginConfig(); lc.setAuthMethod("BASIC"); ctx.setLoginConfig(lc); ctx.getPipeline().addValve(new BasicAuthenticator()); // Add ServletContainerInitializer ServletContainerInitializer sci = new Bug50015SCI(); ctx.addServletContainerInitializer(sci, null); // Start the context tomcat.start(); // Request the first servlet ByteChunk bc = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/bug50015", bc, null); // Check for a 401 assertNotSame("OK", bc.toString()); assertEquals(401, rc); }
private void doTestSecurityAnnotationsAddServlet(boolean useCreateServlet) throws Exception { // Setup Tomcat instance Tomcat tomcat = getTomcatInstance(); // Must have a real docBase - just use temp Context ctx = tomcat.addContext("", System.getProperty("java.io.tmpdir")); Servlet s = new DenyAllServlet(); ServletContainerInitializer sci = new SCI(s, useCreateServlet); ctx.addServletContainerInitializer(sci, null); tomcat.start(); ByteChunk bc = new ByteChunk(); int rc; rc = getUrl("http://localhost:" + getPort() + "/", bc, null, null); if (useCreateServlet) { assertTrue(bc.getLength() > 0); assertEquals(403, rc); } else { assertEquals("OK", bc.toString()); assertEquals(200, rc); } }