Search in sources :

Example 6 with EntityBean

use of org.apache.openejb.jee.EntityBean in project tomee by apache.

the class CheckWrongClassTypeTest method wrongClassType.

@Keys({ @Key("wrong.class.type"), @Key("noInterfaceDeclared.entity") })
public EjbJar wrongClassType() throws OpenEJBException {
    System.setProperty("openejb.validation.output.level", "VERBOSE");
    final EjbJar ejbJar = new EjbJar();
    final EntityBean entityBean = new EntityBean();
    entityBean.setEjbClass(FooEntity.class);
    entityBean.setEjbName("fooEntity");
    entityBean.setPersistenceType(PersistenceType.BEAN);
    ejbJar.addEnterpriseBean(entityBean);
    return ejbJar;
}
Also used : EntityBean(org.apache.openejb.jee.EntityBean) EjbJar(org.apache.openejb.jee.EjbJar)

Example 7 with EntityBean

use of org.apache.openejb.jee.EntityBean in project tomee by apache.

the class CheckMissingClassTest method wrongClassType.

@Keys(@Key(value = "missing.class", count = 16))
public EjbJar wrongClassType() throws OpenEJBException {
    System.setProperty("openejb.validation.output.level", "VERBOSE");
    final EjbJar ejbJar = new EjbJar();
    final StatelessBean stateless = new StatelessBean(FooStateless.class);
    stateless.setHomeAndRemote("WrongHome", "WrongRemote");
    stateless.setLocal("WrongLocal");
    stateless.setLocalHome("WrongLocalHome");
    ejbJar.addEnterpriseBean(stateless);
    final StatefulBean stateful = new StatefulBean(FooStateful.class);
    stateful.setHomeAndRemote("WrongHome", "WrongRemote");
    stateful.setLocal("WrongLocal");
    stateful.setLocalHome("WrongLocalHome");
    ejbJar.addEnterpriseBean(stateful);
    final EntityBean bmpEntityBean = new EntityBean(FooEntityBMP.class, PersistenceType.BEAN);
    bmpEntityBean.setHome("WrongHome");
    bmpEntityBean.setLocalHome("WrongLocalHome");
    bmpEntityBean.setRemote("WrongRemote");
    bmpEntityBean.setLocal("WrongLocal");
    ejbJar.addEnterpriseBean(bmpEntityBean);
    final EntityBean cmpEntityBean = new EntityBean(FooEntityCMP.class, PersistenceType.CONTAINER);
    cmpEntityBean.setHome("WrongHome");
    cmpEntityBean.setLocalHome("WrongLocalHome");
    cmpEntityBean.setRemote("WrongRemote");
    cmpEntityBean.setLocal("WrongLocal");
    ejbJar.addEnterpriseBean(cmpEntityBean);
    return ejbJar;
}
Also used : StatelessBean(org.apache.openejb.jee.StatelessBean) StatefulBean(org.apache.openejb.jee.StatefulBean) EntityBean(org.apache.openejb.jee.EntityBean) EjbJar(org.apache.openejb.jee.EjbJar)

Example 8 with EntityBean

use of org.apache.openejb.jee.EntityBean 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)

Example 9 with EntityBean

use of org.apache.openejb.jee.EntityBean in project tomee by apache.

the class InitEjbDeployments method deploy.

private EjbModule deploy(final EjbModule ejbModule, final Map<String, String> contextData, final Set<String> abstractSchemaNames) throws OpenEJBException {
    contextData.put("moduleId", ejbModule.getModuleId());
    contextData.put("moduleUri", ejbModule.getModuleUri().toString());
    final OpenejbJar openejbJar;
    if (ejbModule.getOpenejbJar() != null) {
        openejbJar = ejbModule.getOpenejbJar();
    } else {
        openejbJar = new OpenejbJar();
        ejbModule.setOpenejbJar(openejbJar);
    }
    StringTemplate deploymentIdTemplate = this.deploymentIdTemplate;
    if (openejbJar.getProperties().containsKey(DEPLOYMENT_ID_FORMAT)) {
        final String format = openejbJar.getProperties().getProperty(DEPLOYMENT_ID_FORMAT);
        logger.info("Using " + DEPLOYMENT_ID_FORMAT + " '" + format + "'");
        deploymentIdTemplate = new StringTemplate(format);
    }
    for (final EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
        StringTemplate template = deploymentIdTemplate;
        final org.apache.openejb.api.EjbDeployment annotation = getEjbDeploymentAnnotation(ejbModule, bean);
        EjbDeployment ejbDeployment = openejbJar.getDeploymentsByEjbName().get(bean.getEjbName());
        if (ejbDeployment == null) {
            ejbDeployment = new EjbDeployment();
            ejbDeployment.setEjbName(bean.getEjbName());
            if (annotation != null && isDefined(annotation.id())) {
                template = new StringTemplate(annotation.id());
                ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
            } else {
                ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
                if (!(bean instanceof ManagedBean) || !((ManagedBean) bean).isHidden()) {
                    logger.info("Auto-deploying ejb " + bean.getEjbName() + ": EjbDeployment(deployment-id=" + ejbDeployment.getDeploymentId() + ")");
                }
            }
            openejbJar.getEjbDeployment().add(ejbDeployment);
        } else if (ejbDeployment.getDeploymentId() == null) {
            if (annotation != null && isDefined(annotation.id())) {
                template = new StringTemplate(annotation.id());
                ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
            } else {
                ejbDeployment.setDeploymentId(formatDeploymentId(bean, contextData, template));
                logger.info("Auto-assigning deployment-id for ejb " + bean.getEjbName() + ": EjbDeployment(deployment-id=" + ejbDeployment.getDeploymentId() + ")");
            }
        }
        if (ejbDeployment.getContainerId() == null && annotation != null && isDefined(annotation.container())) {
            ejbDeployment.setContainerId(annotation.container());
        }
        if (isCmpEntity(bean)) {
            final EntityBean entity = (EntityBean) bean;
            if (entity.getAbstractSchemaName() == null) {
                String abstractSchemaName = bean.getEjbName().trim().replaceAll("[ \\t\\n\\r-]+", "_");
                // The AbstractSchemaName must be unique, we should check that it is
                if (abstractSchemaNames.contains(abstractSchemaName)) {
                    int i = 2;
                    while (abstractSchemaNames.contains(abstractSchemaName + i)) {
                        i++;
                    }
                    abstractSchemaName = abstractSchemaName + i;
                }
                abstractSchemaNames.add(abstractSchemaName);
                entity.setAbstractSchemaName(abstractSchemaName);
            }
        }
    }
    return ejbModule;
}
Also used : OpenejbJar(org.apache.openejb.jee.oejb3.OpenejbJar) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) StringTemplate(org.apache.openejb.util.StringTemplate) EntityBean(org.apache.openejb.jee.EntityBean) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment) ManagedBean(org.apache.openejb.jee.ManagedBean)

Example 10 with EntityBean

use of org.apache.openejb.jee.EntityBean in project tomee by apache.

the class SunConversion method mergeEntityMappings.

private void mergeEntityMappings(final Map<String, EntityData> entities, final String moduleId, final EjbJar ejbJar, final OpenejbJar openejbJar, final SunEjbJar sunEjbJar) {
    if (openejbJar == null) {
        return;
    }
    if (sunEjbJar == null) {
        return;
    }
    if (sunEjbJar.getEnterpriseBeans() == null) {
        return;
    }
    for (final Ejb ejb : sunEjbJar.getEnterpriseBeans().getEjb()) {
        final Cmp cmp = ejb.getCmp();
        if (cmp == null) {
            // skip non cmp beans
            continue;
        }
        // skip all non-CMP beans
        final EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejb.getEjbName());
        if (!(enterpriseBean instanceof EntityBean) || ((EntityBean) enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
            continue;
        }
        final EntityBean bean = (EntityBean) enterpriseBean;
        final EntityData entityData = entities.get(moduleId + "#" + ejb.getEjbName());
        if (entityData == null) {
            // todo warn no such ejb in the ejb-jar.xml
            continue;
        }
        final Collection<String> cmpFields = new ArrayList<String>(bean.getCmpField().size());
        for (final CmpField cmpField : bean.getCmpField()) {
            cmpFields.add(cmpField.getFieldName());
        }
        final OneOneFinders oneOneFinders = cmp.getOneOneFinders();
        if (oneOneFinders != null) {
            for (final Finder finder : oneOneFinders.getFinder()) {
                final List<List<String>> params = parseQueryParamters(finder.getQueryParams());
                final String queryFilter = finder.getQueryFilter();
                final String ejbQl = convertToEjbQl(entityData.entity.getName(), cmpFields, finder.getQueryParams(), queryFilter);
                final NamedQuery namedQuery = new NamedQuery();
                final StringBuilder name = new StringBuilder();
                name.append(entityData.entity.getName()).append(".").append(finder.getMethodName());
                if (!params.isEmpty()) {
                    name.append('(');
                    boolean first = true;
                    for (final List<String> methodParam : params) {
                        if (!first) {
                            name.append(",");
                        }
                        name.append(methodParam.get(0));
                        first = false;
                    }
                    name.append(')');
                }
                namedQuery.setName(name.toString());
                namedQuery.setQuery(ejbQl);
                entityData.entity.getNamedQuery().add(namedQuery);
            }
        }
    }
}
Also used : EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) Cmp(org.apache.openejb.jee.sun.Cmp) ArrayList(java.util.ArrayList) OneOneFinders(org.apache.openejb.jee.sun.OneOneFinders) Finder(org.apache.openejb.jee.sun.Finder) CmpField(org.apache.openejb.jee.CmpField) EntityBean(org.apache.openejb.jee.EntityBean) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) NamedQuery(org.apache.openejb.jee.jpa.NamedQuery) Ejb(org.apache.openejb.jee.sun.Ejb)

Aggregations

EntityBean (org.apache.openejb.jee.EntityBean)10 EnterpriseBean (org.apache.openejb.jee.EnterpriseBean)5 EjbJar (org.apache.openejb.jee.EjbJar)4 ArrayList (java.util.ArrayList)3 EjbDeployment (org.apache.openejb.jee.oejb3.EjbDeployment)3 HashMap (java.util.HashMap)2 List (java.util.List)2 CmpField (org.apache.openejb.jee.CmpField)2 ContainerTransaction (org.apache.openejb.jee.ContainerTransaction)2 MessageDrivenBean (org.apache.openejb.jee.MessageDrivenBean)2 SessionBean (org.apache.openejb.jee.SessionBean)2 File (java.io.File)1 Method (java.lang.reflect.Method)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 RemoteException (java.rmi.RemoteException)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 Map (java.util.Map)1 CreateException (javax.ejb.CreateException)1