Search in sources :

Example 1 with WebappAggregatedArchive

use of org.apache.openejb.config.WebappAggregatedArchive in project tomee by apache.

the class Container method deploy.

public Container deploy(final DeploymentRequest request) {
    final ClassLoader loader = Thread.currentThread().getContextClassLoader();
    final SystemInstance systemInstance = SystemInstance.get();
    String contextRoot = request.context == null ? "" : request.context;
    if (!contextRoot.isEmpty() && !contextRoot.startsWith("/")) {
        contextRoot = "/" + request.context;
    }
    File jarLocation = request.docBase == null || !request.docBase.isDirectory() ? fakeRootDir() : request.docBase;
    final WebModule webModule = new WebModule(new WebApp(), contextRoot, loader, jarLocation.getAbsolutePath(), contextRoot.replace("/", ""));
    if (request.docBase == null) {
        webModule.getProperties().put("fakeJarLocation", "true");
    }
    webModule.setUrls(request.jarList);
    webModule.setAddedUrls(Collections.<URL>emptyList());
    webModule.setRarUrls(Collections.<URL>emptyList());
    webModule.setScannableUrls(request.jarList);
    final AnnotationFinder finder;
    try {
        Filter filter = configuration.getClassesFilter();
        if (filter == null && (request.jarList.size() <= 4 || "true".equalsIgnoreCase(SystemInstance.get().getProperty("tomee.embedded.filter-container-classes")))) {
            filter = new ContainerClassesFilter(configuration.getProperties());
        }
        final Archive archive;
        if (request.archive == null) {
            archive = new WebappAggregatedArchive(webModule, request.jarList, // see org.apache.openejb.config.DeploymentsResolver.ClasspathSearcher.cleanUpUrlSet()
            filter);
        } else if (WebappAggregatedArchive.class.isInstance(request.archive)) {
            archive = request.archive;
        } else {
            archive = new WebappAggregatedArchive(request.archive, request.jarList);
        }
        finder = new FinderFactory.OpenEJBAnnotationFinder(archive).link();
        SystemInstance.get().fireEvent(new TomEEEmbeddedScannerCreated(finder));
        webModule.setFinder(finder);
    } catch (final Exception e) {
        throw new IllegalArgumentException(e);
    }
    final File beansXml = new File(request.docBase, "WEB-INF/beans.xml");
    if (beansXml.exists()) {
        // add it since it is not in the scanned path by default
        try {
            webModule.getAltDDs().put("beans.xml", beansXml.toURI().toURL());
        } catch (final MalformedURLException e) {
        // no-op
        }
    }
    // else no classpath finding since we'll likely find it
    DeploymentLoader.addBeansXmls(webModule);
    final AppModule app = new AppModule(loader, null);
    app.setStandloneWebModule();
    app.setStandaloneModule(true);
    app.setModuleId(webModule.getModuleId());
    try {
        final Map<String, URL> webDescriptors = DeploymentLoader.getWebDescriptors(jarLocation);
        if (webDescriptors.isEmpty()) {
            // likely so let's try to find them in the classpath
            final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            final Collection<String> metaDir = asList("META-INF/tomee/", "META-INF/");
            for (final String dd : asList("app-ctx.xml", "module.properties", "application.properties", "env-entries.properties", NewLoaderLogic.EXCLUSION_FILE, "web.xml", "ejb-jar.xml", "openejb-jar.xml", "validation.xml")) {
                if (Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.embedded.descriptors.classpath." + dd + ".skip")) || webDescriptors.containsKey(dd)) {
                    continue;
                }
                for (final String meta : metaDir) {
                    final URL url = classLoader.getResource(meta + dd);
                    if (url != null) {
                        webDescriptors.put(dd, url);
                        break;
                    }
                }
            }
        }
        webDescriptors.remove("beans.xml");
        webModule.getAltDDs().putAll(webDescriptors);
        DeploymentLoader.addWebModule(webModule, app);
        DeploymentLoader.addWebModuleDescriptors(new File(webModule.getJarLocation()).toURI().toURL(), webModule, app);
    } catch (final Exception e) {
        throw new IllegalStateException(e);
    }
    if (!SystemInstance.isInitialized() || Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.embedded.add-callers", "true"))) {
        addCallersAsEjbModule(loader, app, request.additionalCallers);
    }
    systemInstance.addObserver(new StandardContextCustomizer(configuration, webModule, request.keepClassloader));
    if (systemInstance.getComponent(AnnotationDeployer.FolderDDMapper.class) == null) {
        systemInstance.setComponent(AnnotationDeployer.FolderDDMapper.class, new AnnotationDeployer.FolderDDMapper() {

            @Override
            public File getDDFolder(final File dir) {
                try {
                    return isMaven(dir) || isGradle(dir) ? new File(request.docBase, "WEB-INF") : null;
                } catch (final RuntimeException re) {
                    // folder doesn't exist -> test is stopped which is expected
                    return null;
                }
            }

            private boolean isGradle(final File dir) {
                return dir.getName().equals("classes") && dir.getParentFile().getName().equals("target");
            }

            private boolean isMaven(final File dir) {
                return dir.getName().equals("main") && dir.getParentFile().getName().equals("classes") && dir.getParentFile().getParentFile().getName().equals("build");
            }
        });
    }
    try {
        final AppInfo appInfo = configurationFactory.configureApplication(app);
        systemInstance.getComponent(Assembler.class).createApplication(appInfo, loader);
    } catch (final Exception e) {
        throw new IllegalStateException(e);
    }
    return this;
}
Also used : TomEEEmbeddedScannerCreated(org.apache.tomee.embedded.event.TomEEEmbeddedScannerCreated) MalformedURLException(java.net.MalformedURLException) WebappAggregatedArchive(org.apache.openejb.config.WebappAggregatedArchive) Archive(org.apache.xbean.finder.archive.Archive) AppModule(org.apache.openejb.config.AppModule) ContainerClassesFilter(org.apache.openejb.util.ContainerClassesFilter) URL(java.net.URL) TomEERuntimeException(org.apache.tomee.catalina.TomEERuntimeException) SystemInstance(org.apache.openejb.loader.SystemInstance) WebModule(org.apache.openejb.config.WebModule) NamingException(javax.naming.NamingException) UndeployException(org.apache.openejb.UndeployException) LifecycleException(org.apache.catalina.LifecycleException) OpenEJBException(org.apache.openejb.OpenEJBException) NoSuchApplicationException(org.apache.openejb.NoSuchApplicationException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) TomEERuntimeException(org.apache.tomee.catalina.TomEERuntimeException) WebAppInfo(org.apache.openejb.assembler.classic.WebAppInfo) AppInfo(org.apache.openejb.assembler.classic.AppInfo) AnnotationDeployer(org.apache.openejb.config.AnnotationDeployer) StandardContextCustomizer(org.apache.tomee.embedded.internal.StandardContextCustomizer) ContainerClassesFilter(org.apache.openejb.util.ContainerClassesFilter) Filter(org.apache.xbean.finder.filter.Filter) WebappAggregatedArchive(org.apache.openejb.config.WebappAggregatedArchive) Assembler(org.apache.openejb.assembler.classic.Assembler) File(java.io.File) AnnotationFinder(org.apache.xbean.finder.AnnotationFinder) WebApp(org.apache.openejb.jee.WebApp)

Aggregations

File (java.io.File)1 IOException (java.io.IOException)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 NamingException (javax.naming.NamingException)1 LifecycleException (org.apache.catalina.LifecycleException)1 NoSuchApplicationException (org.apache.openejb.NoSuchApplicationException)1 OpenEJBException (org.apache.openejb.OpenEJBException)1 UndeployException (org.apache.openejb.UndeployException)1 AppInfo (org.apache.openejb.assembler.classic.AppInfo)1 Assembler (org.apache.openejb.assembler.classic.Assembler)1 WebAppInfo (org.apache.openejb.assembler.classic.WebAppInfo)1 AnnotationDeployer (org.apache.openejb.config.AnnotationDeployer)1 AppModule (org.apache.openejb.config.AppModule)1 WebModule (org.apache.openejb.config.WebModule)1 WebappAggregatedArchive (org.apache.openejb.config.WebappAggregatedArchive)1 WebApp (org.apache.openejb.jee.WebApp)1 SystemInstance (org.apache.openejb.loader.SystemInstance)1 ContainerClassesFilter (org.apache.openejb.util.ContainerClassesFilter)1 TomEERuntimeException (org.apache.tomee.catalina.TomEERuntimeException)1