Search in sources :

Example 91 with OpenEJBException

use of org.apache.openejb.OpenEJBException in project tomee by apache.

the class OpenEJBArchiveProcessor method analyzeLibs.

private static CompositeArchive analyzeLibs(final ClassLoader parent, final List<URL> additionalPaths, final Map<URL, List<String>> earMap, final List<Archive> earLibsArchives, final CompositeBeans earBeans, final Map<ArchivePath, Node> jars, final Map<String, Object> altDD) {
    final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>(jars.size());
    for (final Map.Entry<ArchivePath, Node> node : jars.entrySet()) {
        final Asset asset = node.getValue().getAsset();
        if (ArchiveAsset.class.isInstance(asset)) {
            final Archive<?> libArchive = ArchiveAsset.class.cast(asset).getArchive();
            if (!isExcluded(libArchive.getName())) {
                earLibsArchives.add(libArchive);
                final List<Class<?>> earClasses = new ArrayList<>();
                final List<String> earClassNames = new ArrayList<>();
                final Map<ArchivePath, Node> content = libArchive.getContent(new IncludeRegExpPaths(".*.class"));
                for (final Map.Entry<ArchivePath, Node> classNode : content.entrySet()) {
                    final String classname = name(classNode.getKey().get());
                    try {
                        earClasses.add(parent.loadClass(classname));
                        earClassNames.add(classname);
                    } catch (final ClassNotFoundException e) {
                        LOGGER.fine("Can't load class " + classname);
                    } catch (final NoClassDefFoundError ncdfe) {
                    // no-op
                    }
                }
                try {
                    // ends with !/META-INF/beans.xml to force it to be used as a cdi module *with bda*
                    final Node beansNode = libArchive.get(META_INF + BEANS_XML);
                    final URL arUrl = new URL("jar:file://!/lib/" + libArchive.getName() + (beansNode != null ? "!/META-INF/beans.xml" : ""));
                    if (beansNode != null) {
                        try {
                            DeploymentLoader.doMerge(arUrl, earBeans, ReadDescriptors.readBeans(beansNode.getAsset().openStream()));
                        } catch (final OpenEJBException e) {
                            throw new IllegalArgumentException(e);
                        }
                    }
                    earMap.put(arUrl, earClassNames);
                } catch (final MalformedURLException e) {
                // no-op
                }
                archives.add(new ClassesArchive(earClasses));
            }
            final Node ejbJarXml = libArchive.get(META_INF + EJB_JAR_XML);
            if (ejbJarXml != null) {
                // not super, we should merge them surely but ok for use cases we met until today
                altDD.put("ejb-jar.xml", new AssetSource(ejbJarXml.getAsset(), null));
            }
        }
        if (UrlAsset.class.isInstance(asset) || FileAsset.class.isInstance(asset)) {
            try {
                final URL url = UrlAsset.class.isInstance(asset) ? get(URL.class, "url", asset) : get(File.class, "file", asset).toURI().toURL();
                final List<String> classes = new ArrayList<String>();
                archives.add(new FilteredArchive(new JarArchive(parent, url), new WebappAggregatedArchive.ScanXmlSaverFilter(false, null, classes, null)));
                additionalPaths.add(url);
                final URLClassLoader loader = new URLClassLoader(new URL[] { url }, EMPTY_LOADER);
                for (final String beans : asList("META-INF/beans.xml", "/META-INF/beans.xml")) {
                    final URL u = loader.getResource(beans);
                    if (u != null) {
                        try {
                            DeploymentLoader.doMerge(u, earBeans, ReadDescriptors.readBeans(u.openStream()));
                        } catch (final OpenEJBException e) {
                            throw new IllegalArgumentException(e);
                        } catch (final IOException e) {
                        // no-op
                        }
                        earMap.put(u, classes);
                    }
                }
                try {
                    loader.close();
                } catch (final IOException e) {
                // no-op
                }
            } catch (final MalformedURLException e) {
                throw new IllegalArgumentException(e);
            }
        }
    }
    return new CompositeArchive(archives);
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) MalformedURLException(java.net.MalformedURLException) FilteredArchive(org.apache.xbean.finder.archive.FilteredArchive) ClassesArchive(org.apache.xbean.finder.archive.ClassesArchive) EnterpriseArchive(org.jboss.shrinkwrap.api.spec.EnterpriseArchive) WebappAggregatedArchive(org.apache.openejb.config.WebappAggregatedArchive) WebArchive(org.jboss.shrinkwrap.api.spec.WebArchive) JarArchive(org.apache.xbean.finder.archive.JarArchive) Archive(org.jboss.shrinkwrap.api.Archive) CompositeArchive(org.apache.xbean.finder.archive.CompositeArchive) Node(org.jboss.shrinkwrap.api.Node) ArrayList(java.util.ArrayList) FilteredArchive(org.apache.xbean.finder.archive.FilteredArchive) URL(java.net.URL) ArchivePath(org.jboss.shrinkwrap.api.ArchivePath) JarArchive(org.apache.xbean.finder.archive.JarArchive) Asset(org.jboss.shrinkwrap.api.asset.Asset) FileAsset(org.jboss.shrinkwrap.api.asset.FileAsset) ClassLoaderAsset(org.jboss.shrinkwrap.api.asset.ClassLoaderAsset) ArchiveAsset(org.jboss.shrinkwrap.api.asset.ArchiveAsset) UrlAsset(org.jboss.shrinkwrap.api.asset.UrlAsset) IncludeRegExpPaths(org.jboss.shrinkwrap.impl.base.filter.IncludeRegExpPaths) FileAsset(org.jboss.shrinkwrap.api.asset.FileAsset) ArchiveAsset(org.jboss.shrinkwrap.api.asset.ArchiveAsset) IOException(java.io.IOException) CompositeArchive(org.apache.xbean.finder.archive.CompositeArchive) URLClassLoader(java.net.URLClassLoader) ClassesArchive(org.apache.xbean.finder.archive.ClassesArchive) TestClass(org.jboss.arquillian.test.spi.TestClass) Map(java.util.Map) HashMap(java.util.HashMap) File(java.io.File) UrlAsset(org.jboss.shrinkwrap.api.asset.UrlAsset)

Example 92 with OpenEJBException

use of org.apache.openejb.OpenEJBException in project tomee by apache.

the class OpenEJBArchiveProcessor method createEjbJar.

private static EjbJar createEjbJar(final String prefix, final Archive<?> webArchive) {
    final EjbJar webEjbJar;
    final Node webEjbJarXml = webArchive.get(prefix.concat(EJB_JAR_XML));
    if (webEjbJarXml != null) {
        try {
            webEjbJar = ReadDescriptors.readEjbJar(webEjbJarXml.getAsset().openStream());
        } catch (final OpenEJBException e) {
            throw new OpenEJBRuntimeException(e);
        }
    } else {
        webEjbJar = new EjbJar();
    }
    return webEjbJar;
}
Also used : OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) OpenEJBException(org.apache.openejb.OpenEJBException) Node(org.jboss.shrinkwrap.api.Node) EjbJar(org.apache.openejb.jee.EjbJar)

Example 93 with OpenEJBException

use of org.apache.openejb.OpenEJBException in project tomee by apache.

the class OpenEJBArchiveProcessor method finderArchive.

private static org.apache.xbean.finder.archive.Archive finderArchive(final Node beansXml, final Archive<?> archive, final ClassLoader cl, final CompositeArchive libs, final Map<URL, List<String>> webAppClassesByUrl, final CompositeBeans compositeBeans) {
    final List<Class<?>> classes = new ArrayList<>();
    final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths(".*.class"));
    for (final Map.Entry<ArchivePath, Node> node : content.entrySet()) {
        final String classname = name(node.getKey().get());
        try {
            classes.add(cl.loadClass(classname));
        } catch (final ClassNotFoundException e) {
            LOGGER.fine("Can't load class " + classname);
            if (LOGGER.isLoggable(Level.FINEST)) {
                e.printStackTrace(System.err);
            }
        } catch (final NoClassDefFoundError ncdfe) {
        // no-op
        }
    }
    final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<>();
    archives.add(new ClassesArchive(classes));
    if (beansXml != null) {
        try {
            // no host avoid host resolution in hashcode()
            final URL key = new URL("jar:file://!/WEB-INF/beans.xml");
            try {
                DeploymentLoader.doMerge(key, compositeBeans, ReadDescriptors.readBeans(beansXml.getAsset().openStream()));
            } catch (final OpenEJBException e) {
                throw new IllegalArgumentException(e);
            }
            final List<String> mainClasses = new ArrayList<>();
            for (final Class<?> clazz : classes) {
                mainClasses.add(clazz.getName());
            }
            webAppClassesByUrl.put(key, mainClasses);
        } catch (final MalformedURLException mue) {
        // no-op
        }
    }
    if (libs != null) {
        archives.add(libs);
    }
    return new SimpleWebappAggregatedArchive(cl, new CompositeArchive(archives), webAppClassesByUrl);
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) MalformedURLException(java.net.MalformedURLException) FilteredArchive(org.apache.xbean.finder.archive.FilteredArchive) ClassesArchive(org.apache.xbean.finder.archive.ClassesArchive) EnterpriseArchive(org.jboss.shrinkwrap.api.spec.EnterpriseArchive) WebappAggregatedArchive(org.apache.openejb.config.WebappAggregatedArchive) WebArchive(org.jboss.shrinkwrap.api.spec.WebArchive) JarArchive(org.apache.xbean.finder.archive.JarArchive) Archive(org.jboss.shrinkwrap.api.Archive) CompositeArchive(org.apache.xbean.finder.archive.CompositeArchive) Node(org.jboss.shrinkwrap.api.Node) ArrayList(java.util.ArrayList) URL(java.net.URL) ArchivePath(org.jboss.shrinkwrap.api.ArchivePath) IncludeRegExpPaths(org.jboss.shrinkwrap.impl.base.filter.IncludeRegExpPaths) CompositeArchive(org.apache.xbean.finder.archive.CompositeArchive) ClassesArchive(org.apache.xbean.finder.archive.ClassesArchive) TestClass(org.jboss.arquillian.test.spi.TestClass) Map(java.util.Map) HashMap(java.util.HashMap)

Example 94 with OpenEJBException

use of org.apache.openejb.OpenEJBException in project tomee by apache.

the class ConfigurationFactory method configureApplication.

/**
 * embedded usage
 *
 * @param classLoader classloader
 * @param id          id supplied from embedded properties or null
 * @param jarFiles    list of ejb modules
 * @return configured AppInfo
 * @throws OpenEJBException on error
 */
public AppInfo configureApplication(final ClassLoader classLoader, final String id, final List<File> jarFiles) throws OpenEJBException {
    final AppModule collection = loadApplication(classLoader, id, jarFiles);
    final AppInfo appInfo;
    try {
        appInfo = configureApplication(collection);
    } catch (final ValidationFailedException e) {
        // DO not include the stacktrace in the message
        logger.warning("configureApplication.loadFailed", collection.getModuleId(), e.getMessage());
        throw e;
    } catch (final OpenEJBException e) {
        // DO NOT REMOVE THE EXCEPTION FROM THIS LOG MESSAGE
        // removing this message causes NO messages to be printed when embedded
        logger.warning("configureApplication.loadFailed", e, collection.getModuleId(), e.getMessage());
        throw e;
    }
    return appInfo;
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) AppInfo(org.apache.openejb.assembler.classic.AppInfo) WebAppInfo(org.apache.openejb.assembler.classic.WebAppInfo)

Example 95 with OpenEJBException

use of org.apache.openejb.OpenEJBException in project tomee by apache.

the class ConfigurationFactory method getServiceProvider.

private <T extends ServiceInfo> ServiceProvider getServiceProvider(final org.apache.openejb.config.Service service, final Class<? extends T> infoType) throws OpenEJBException {
    final String providerType = getProviderType(service);
    final ServiceProvider provider = resolveServiceProvider(service, infoType);
    if (provider == null) {
        final List<ServiceProvider> providers = ServiceUtils.getServiceProvidersByServiceType(providerType);
        final StringBuilder sb = new StringBuilder();
        final List<String> types = new ArrayList<String>();
        for (final ServiceProvider p : providers) {
            for (final String type : p.getTypes()) {
                if (types.contains(type)) {
                    continue;
                }
                types.add(type);
                sb.append(JavaSecurityManagers.getSystemProperty("line.separator"));
                sb.append("  <").append(p.getService());
                sb.append(" id=\"").append(service.getId()).append('"');
                sb.append(" type=\"").append(type).append("\"/>");
            }
        }
        final String noProviderMessage = messages.format("configureService.noProviderForService", providerType, service.getId(), service.getType(), service.getProvider(), sb.toString());
        throw new NoSuchProviderException(noProviderMessage);
    }
    if (!provider.getService().equals(providerType)) {
        throw new OpenEJBException(messages.format("configureService.wrongProviderType", service.getId(), providerType));
    }
    return provider;
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) ServiceProvider(org.apache.openejb.config.sys.ServiceProvider) ArrayList(java.util.ArrayList)

Aggregations

OpenEJBException (org.apache.openejb.OpenEJBException)187 IOException (java.io.IOException)55 NamingException (javax.naming.NamingException)34 URL (java.net.URL)31 MalformedURLException (java.net.MalformedURLException)30 ApplicationException (org.apache.openejb.ApplicationException)29 BeanContext (org.apache.openejb.BeanContext)29 File (java.io.File)26 ArrayList (java.util.ArrayList)26 OpenEJBRuntimeException (org.apache.openejb.OpenEJBRuntimeException)23 SystemException (org.apache.openejb.SystemException)22 Method (java.lang.reflect.Method)20 HashMap (java.util.HashMap)18 ThreadContext (org.apache.openejb.core.ThreadContext)17 InterceptorData (org.apache.openejb.core.interceptor.InterceptorData)15 RemoteException (java.rmi.RemoteException)14 EJBException (javax.ejb.EJBException)14 EjbTransactionUtil.handleApplicationException (org.apache.openejb.core.transaction.EjbTransactionUtil.handleApplicationException)14 HashSet (java.util.HashSet)13 Properties (java.util.Properties)13