Search in sources :

Example 1 with ExclusionInfo

use of org.apache.openejb.assembler.classic.ExclusionInfo in project tomee by apache.

the class EjbJarInfoBuilder method buildInfo.

public EjbJarInfo buildInfo(final EjbModule jar) throws OpenEJBException {
    deploymentIds.clear();
    securityRoles.clear();
    final Map<String, EjbDeployment> ejbds = jar.getOpenejbJar().getDeploymentsByEjbName();
    final int beansDeployed = jar.getOpenejbJar().getEjbDeploymentCount();
    final int beansInEjbJar = jar.getEjbJar().getEnterpriseBeans().length;
    if (beansInEjbJar != beansDeployed) {
        for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
            if (!ejbds.containsKey(bean.getEjbName())) {
                ConfigUtils.logger.warning("conf.0018", bean.getEjbName(), jar.getJarLocation());
            }
        }
        final String message = messages.format("conf.0008", jar.getJarLocation(), String.valueOf(beansInEjbJar), String.valueOf(beansDeployed));
        logger.warning(message);
        throw new OpenEJBException(message);
    }
    final Map<String, EnterpriseBeanInfo> infos = new HashMap<>();
    final Map<String, EnterpriseBean> items = new HashMap<>();
    final EjbJarInfo ejbJar = new EjbJarInfo();
    ejbJar.path = jar.getJarLocation();
    ejbJar.moduleUri = jar.getModuleUri();
    ejbJar.moduleId = jar.getModuleId();
    if (jar.getEjbJar() != null && jar.getEjbJar().getModuleName() != null) {
        ejbJar.moduleName = jar.getEjbJar().getModuleName();
    } else {
        ejbJar.moduleName = jar.getModuleId();
    }
    ejbJar.watchedResources.addAll(jar.getWatchedResources());
    ejbJar.properties.putAll(jar.getProperties());
    ejbJar.properties.putAll(jar.getOpenejbJar().getProperties());
    for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
        final EnterpriseBeanInfo beanInfo;
        if (bean instanceof SessionBean) {
            beanInfo = initSessionBean((SessionBean) bean, ejbJar, ejbds);
        } else if (bean instanceof EntityBean) {
            beanInfo = initEntityBean((EntityBean) bean, ejbds);
        } else if (bean instanceof MessageDrivenBean) {
            beanInfo = initMessageBean((MessageDrivenBean) bean, ejbds);
        } else {
            throw new OpenEJBException("Unknown bean type: " + bean.getClass().getName());
        }
        ejbJar.enterpriseBeans.add(beanInfo);
        if (deploymentIds.contains(beanInfo.ejbDeploymentId)) {
            final String message = messages.format("conf.0100", beanInfo.ejbDeploymentId, jar.getJarLocation(), beanInfo.ejbName);
            logger.warning(message);
            throw new OpenEJBException(message);
        }
        deploymentIds.add(beanInfo.ejbDeploymentId);
        beanInfo.codebase = jar.getJarLocation();
        infos.put(beanInfo.ejbName, beanInfo);
        items.put(beanInfo.ejbName, bean);
        if (bean.getSecurityIdentity() != null) {
            beanInfo.runAs = bean.getSecurityIdentity().getRunAs();
            final EjbDeployment deployment = ejbds.get(beanInfo.ejbName);
            if (deployment != null) {
                for (final RoleMapping mapping : deployment.getRoleMapping()) {
                    if (mapping.getRoleName().equals(beanInfo.runAs)) {
                        beanInfo.runAsUser = mapping.getPrincipalName();
                        break;
                    }
                }
            }
        }
        initJndiNames(ejbds, beanInfo);
    }
    if (jar.getEjbJar().getAssemblyDescriptor() != null) {
        initInterceptors(jar, ejbJar);
        initSecurityRoles(jar, ejbJar);
        initMethodPermissions(jar, ejbds, ejbJar);
        initExcludesList(jar, ejbds, ejbJar);
        initMethodTransactions(jar, ejbds, ejbJar);
        initMethodConcurrency(jar, ejbds, ejbJar);
        initApplicationExceptions(jar, ejbJar);
        for (final EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
            resolveRoleLinks(bean, items.get(bean.ejbName));
        }
    }
    if (jar.getEjbJar().getRelationships() != null) {
        initRelationships(jar, infos);
    }
    final Beans beans = jar.getBeans();
    if (beans != null) {
        ejbJar.beans = new BeansInfo();
        ejbJar.beans.version = beans.getVersion();
        ejbJar.beans.discoveryMode = beans.getBeanDiscoveryMode();
        if (beans.getScan() != null) {
            for (final Beans.Scan.Exclude exclude : beans.getScan().getExclude()) {
                final ExclusionInfo exclusionInfo = new ExclusionInfo();
                for (final Object config : exclude.getIfClassAvailableOrIfClassNotAvailableOrIfSystemProperty()) {
                    if (Beans.Scan.Exclude.IfAvailableClassCondition.class.isInstance(config)) {
                        exclusionInfo.availableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
                    } else if (Beans.Scan.Exclude.IfNotAvailableClassCondition.class.isInstance(config)) {
                        exclusionInfo.notAvailableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
                    } else if (Beans.Scan.Exclude.IfSystemProperty.class.isInstance(config)) {
                        final Beans.Scan.Exclude.IfSystemProperty systemProperty = Beans.Scan.Exclude.IfSystemProperty.class.cast(config);
                        if (systemProperty.getValue() == null) {
                            exclusionInfo.systemPropertiesPresence.add(systemProperty.getName());
                        } else {
                            exclusionInfo.systemProperties.put(systemProperty.getName(), systemProperty.getValue());
                        }
                    } else {
                        throw new IllegalArgumentException("Not supported: " + config);
                    }
                }
                final BeansInfo.ExclusionEntryInfo exclusionEntryInfo = new BeansInfo.ExclusionEntryInfo();
                exclusionEntryInfo.name = exclude.getName();
                exclusionEntryInfo.exclusion = exclusionInfo;
                ejbJar.beans.excludes.add(exclusionEntryInfo);
            }
        }
        ejbJar.beans.duplicatedAlternativeClasses.addAll(beans.getDuplicatedAlternatives().getClasses());
        ejbJar.beans.duplicatedAlternativeStereotypes.addAll(beans.getDuplicatedAlternatives().getStereotypes());
        ejbJar.beans.duplicatedInterceptors.addAll(beans.getDuplicatedInterceptors());
        ejbJar.beans.duplicatedDecorators.addAll(beans.getDuplicatedDecorators());
        ejbJar.beans.startupClasses.addAll(beans.getStartupBeans());
        final Map<URL, String> discoveryModeByUrl = new HashMap<>();
        final CompositeBeans composite;
        final boolean isComposite = CompositeBeans.class.isInstance(beans);
        if (isComposite) {
            composite = CompositeBeans.class.cast(beans);
            discoveryModeByUrl.putAll(composite.getDiscoveryByUrl());
        } else {
            composite = null;
            URL key = DEFAULT_BEANS_XML_KEY;
            if (beans.getUri() != null) {
                try {
                    key = new URL(beans.getUri());
                } catch (final MalformedURLException e) {
                // no-op
                }
            }
            discoveryModeByUrl.put(key, beans.getBeanDiscoveryMode());
        }
        for (final Map.Entry<URL, List<String>> next : beans.getManagedClasses().entrySet()) {
            final URL key = next.getKey();
            final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
            bdaInfo.discoveryMode = discoveryModeByUrl.get(key);
            merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
            ejbJar.beans.bdas.add(bdaInfo);
        }
        for (final Map.Entry<URL, List<String>> next : beans.getNotManagedClasses().entrySet()) {
            final URL key = next.getKey();
            final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
            bdaInfo.discoveryMode = BeanArchiveService.BeanDiscoveryMode.ANNOTATED.name();
            merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
            ejbJar.beans.noDescriptorBdas.add(bdaInfo);
        }
        // app composer case mainly,we should really not use it anywhere else
        if (composite == null && ejbJar.beans.bdas.size() == 1) {
            final BeansInfo.BDAInfo bda = ejbJar.beans.bdas.iterator().next();
            bda.alternatives.addAll(beans.getAlternativeClasses());
            bda.interceptors.addAll(beans.getInterceptors());
            bda.decorators.addAll(beans.getDecorators());
            bda.stereotypeAlternatives.addAll(beans.getAlternativeStereotypes());
        }
    }
    return ejbJar;
}
Also used : OpenEJBException(org.apache.openejb.OpenEJBException) MalformedURLException(java.net.MalformedURLException) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) HashMap(java.util.HashMap) ExclusionInfo(org.apache.openejb.assembler.classic.ExclusionInfo) SessionBean(org.apache.openejb.jee.SessionBean) URL(java.net.URL) EnterpriseBeanInfo(org.apache.openejb.assembler.classic.EnterpriseBeanInfo) BeansInfo(org.apache.openejb.assembler.classic.BeansInfo) MessageDrivenBean(org.apache.openejb.jee.MessageDrivenBean) List(java.util.List) ArrayList(java.util.ArrayList) ExcludeList(org.apache.openejb.jee.ExcludeList) CompositeBeans(org.apache.openejb.cdi.CompositeBeans) RoleMapping(org.apache.openejb.jee.oejb3.RoleMapping) CompositeBeans(org.apache.openejb.cdi.CompositeBeans) Beans(org.apache.openejb.jee.Beans) EntityBean(org.apache.openejb.jee.EntityBean) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) EjbJarInfo(org.apache.openejb.assembler.classic.EjbJarInfo) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 OpenEJBException (org.apache.openejb.OpenEJBException)1 BeansInfo (org.apache.openejb.assembler.classic.BeansInfo)1 EjbJarInfo (org.apache.openejb.assembler.classic.EjbJarInfo)1 EnterpriseBeanInfo (org.apache.openejb.assembler.classic.EnterpriseBeanInfo)1 ExclusionInfo (org.apache.openejb.assembler.classic.ExclusionInfo)1 CompositeBeans (org.apache.openejb.cdi.CompositeBeans)1 Beans (org.apache.openejb.jee.Beans)1 EnterpriseBean (org.apache.openejb.jee.EnterpriseBean)1 EntityBean (org.apache.openejb.jee.EntityBean)1 ExcludeList (org.apache.openejb.jee.ExcludeList)1 MessageDrivenBean (org.apache.openejb.jee.MessageDrivenBean)1 SessionBean (org.apache.openejb.jee.SessionBean)1 EjbDeployment (org.apache.openejb.jee.oejb3.EjbDeployment)1 RoleMapping (org.apache.openejb.jee.oejb3.RoleMapping)1