Search in sources :

Example 1 with OpenejbJarType

use of org.apache.openejb.jee.oejb2.OpenejbJarType in project tomee by apache.

the class JndiNameTest method testOpenejbJar2.

public void testOpenejbJar2() throws Exception {
    System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
    final ConfigurationFactory config = new ConfigurationFactory();
    final Assembler assembler = new Assembler();
    assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
    assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
    assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
    // containers
    final StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
    assembler.createContainer(statelessContainerInfo);
    // Setup the descriptor information
    final EjbModule ejbModule = new EjbModule(new EjbJar(), null);
    ejbModule.getEjbJar().addEnterpriseBean(new StatelessBean(FooBean.class));
    final OpenejbJarType v2 = new OpenejbJarType();
    final SessionBeanType ejbDeployment = new SessionBeanType();
    ejbDeployment.setEjbName("FooBean");
    ejbDeployment.getJndi().add(new org.apache.openejb.jee.oejb2.Jndi("thename", "Local"));
    ejbDeployment.getJndi().add(new org.apache.openejb.jee.oejb2.Jndi("anothername", "Remote"));
    ejbDeployment.getJndi().add(new org.apache.openejb.jee.oejb2.Jndi("loldstyle", "LocalHome"));
    ejbDeployment.getJndi().add(new org.apache.openejb.jee.oejb2.Jndi("roldstyle", "RemoteHome"));
    v2.getEnterpriseBeans().add(ejbDeployment);
    ejbModule.getAltDDs().put("openejb-jar.xml", v2);
    assembler.createApplication(config.configureApplication(ejbModule));
    final InitialContext initialContext = new InitialContext();
    assertName(initialContext, Orange.class, "thename");
    assertName(initialContext, Red.class, "anothername");
    assertName(initialContext, LHYellow.class, "loldstyle");
    assertName(initialContext, RHGreen.class, "roldstyle");
}
Also used : StatelessSessionContainerInfo(org.apache.openejb.assembler.classic.StatelessSessionContainerInfo) OpenejbJarType(org.apache.openejb.jee.oejb2.OpenejbJarType) InitContextFactory(org.apache.openejb.core.ivm.naming.InitContextFactory) InitialContext(javax.naming.InitialContext) ProxyFactoryInfo(org.apache.openejb.assembler.classic.ProxyFactoryInfo) TransactionServiceInfo(org.apache.openejb.assembler.classic.TransactionServiceInfo) StatelessBean(org.apache.openejb.jee.StatelessBean) SessionBeanType(org.apache.openejb.jee.oejb2.SessionBeanType) Assembler(org.apache.openejb.assembler.classic.Assembler) SecurityServiceInfo(org.apache.openejb.assembler.classic.SecurityServiceInfo) EjbJar(org.apache.openejb.jee.EjbJar)

Example 2 with OpenejbJarType

use of org.apache.openejb.jee.oejb2.OpenejbJarType in project tomee by apache.

the class OpenEjb2Conversion method convertEjbRefs.

public final void convertEjbRefs(final EjbJar ejbJar, final OpenejbJar openejbJar, final OpenejbJarType openejbJarType) {
    openejbJar.getProperties().putAll(openejbJarType.getProperties());
    final Map<String, EnterpriseBean> ejbs = ejbJar.getEnterpriseBeansByEjbName();
    final Map<String, EjbDeployment> deployments = openejbJar.getDeploymentsByEjbName();
    for (final org.apache.openejb.jee.oejb2.EnterpriseBean enterpriseBean : openejbJarType.getEnterpriseBeans()) {
        final EnterpriseBean ejb = ejbs.get(enterpriseBean.getEjbName());
        if (ejb == null) {
            // todo warn no such ejb in the ejb-jar.xml
            continue;
        }
        final Map<String, EjbRef> ejbRefs = ejb.getEjbRefMap();
        final EjbDeployment deployment = deployments.get(enterpriseBean.getEjbName());
        if (deployment == null) {
            // todo warn no such ejb in the ejb-jar.xml
            continue;
        }
        // Add WS Security
        if (enterpriseBean instanceof SessionBeanType) {
            final SessionBeanType sessionBean = (SessionBeanType) enterpriseBean;
            final WebServiceSecurityType webServiceSecurityType = sessionBean.getWebServiceSecurity();
            if (webServiceSecurityType != null) {
                if (webServiceSecurityType.getRealmName() != null) {
                    deployment.addProperty("webservice.security.realm", webServiceSecurityType.getRealmName());
                }
                if (webServiceSecurityType.getSecurityRealmName() != null) {
                    deployment.addProperty("webservice.security.securityRealm", webServiceSecurityType.getSecurityRealmName());
                }
                if (webServiceSecurityType.getTransportGuarantee() != null) {
                    deployment.addProperty("webservice.security.transportGarantee", webServiceSecurityType.getTransportGuarantee().value());
                } else {
                    deployment.addProperty("webservice.security.transportGarantee", "NONE");
                }
                if (webServiceSecurityType.getAuthMethod() != null) {
                    deployment.addProperty("webservice.security.authMethod", webServiceSecurityType.getAuthMethod().value());
                } else {
                    deployment.addProperty("webservice.security.authMethod", "NONE");
                }
                deployment.getProperties().putAll(webServiceSecurityType.getProperties());
            }
            if (sessionBean.getWebServiceAddress() != null) {
                deployment.getProperties().put("openejb.webservice.deployment.address", sessionBean.getWebServiceAddress());
            }
        }
        deployment.getProperties().putAll(enterpriseBean.getProperties());
        for (final String name : enterpriseBean.getLocalJndiName()) {
            deployment.getJndi().add(new org.apache.openejb.jee.oejb3.Jndi(name, "LocalHome"));
        }
        for (final String name : enterpriseBean.getJndiName()) {
            deployment.getJndi().add(new org.apache.openejb.jee.oejb3.Jndi(name, "RemoteHome"));
        }
        for (final Jndi jndi : enterpriseBean.getJndi()) {
            deployment.getJndi().add(new org.apache.openejb.jee.oejb3.Jndi(jndi.getName(), jndi.getInterface()));
        }
        final Set<String> ejbLinks = new TreeSet<String>();
        for (final EjbLink ejbLink : deployment.getEjbLink()) {
            ejbLinks.add(ejbLink.getEjbRefName());
        }
        for (final EjbRefType refType : enterpriseBean.getEjbRef()) {
            final String refName = refType.getRefName();
            if (ejbLinks.contains(refName)) {
                // don't overwrite refs that have been already set
                continue;
            }
            final String nsCorbaloc = refType.getNsCorbaloc();
            if (nsCorbaloc != null) {
                final EjbRef ref = ejbRefs.get(refName);
                if (ref != null) {
                    ref.setMappedName("jndi:" + nsCorbaloc);
                }
            } else if (refType.getEjbLink() != null) {
                final EjbRef ref = ejbRefs.get(refName);
                if (ref != null) {
                    ref.setEjbLink(refType.getEjbLink());
                }
            } else {
                final PatternType pattern = refType.getPattern();
                addEjbLink(deployment, refName, pattern);
            }
        }
        for (final EjbLocalRefType refType : enterpriseBean.getEjbLocalRef()) {
            final String refName = refType.getRefName();
            if (ejbLinks.contains(refName)) {
                // don't overwrite refs that have been already set
                continue;
            }
            if (refType.getEjbLink() != null) {
                final EjbRef ref = ejbRefs.get(refName);
                if (ref != null) {
                    ref.setEjbLink(refType.getEjbLink());
                }
            } else {
                final PatternType pattern = refType.getPattern();
                addEjbLink(deployment, refName, pattern);
            }
        }
    }
}
Also used : PatternType(org.apache.openejb.jee.oejb2.PatternType) WebServiceSecurityType(org.apache.openejb.jee.oejb2.WebServiceSecurityType) EjbRefType(org.apache.openejb.jee.oejb2.EjbRefType) EnterpriseBean(org.apache.openejb.jee.EnterpriseBean) EjbLocalRefType(org.apache.openejb.jee.oejb2.EjbLocalRefType) Jndi(org.apache.openejb.jee.oejb2.Jndi) EjbLink(org.apache.openejb.jee.oejb3.EjbLink) TreeSet(java.util.TreeSet) EjbRef(org.apache.openejb.jee.EjbRef) SessionBeanType(org.apache.openejb.jee.oejb2.SessionBeanType) EjbDeployment(org.apache.openejb.jee.oejb3.EjbDeployment)

Example 3 with OpenejbJarType

use of org.apache.openejb.jee.oejb2.OpenejbJarType in project tomee by apache.

the class OpenEjb2Conversion method convertToGeronimoOpenejbXml.

/**
     * Actually called from ReadDescriptors as Geronimo needs this info early
     *
     * @param o2 OpenejbJarType
     * @return GeronimoEjbJarType
     */
public static GeronimoEjbJarType convertToGeronimoOpenejbXml(final OpenejbJarType o2) {
    final GeronimoEjbJarType g2 = new GeronimoEjbJarType();
    g2.setEnvironment(o2.getEnvironment());
    g2.setSecurity(o2.getSecurity());
    g2.getService().addAll(o2.getService());
    g2.getMessageDestination().addAll(o2.getMessageDestination());
    g2.getPersistence().addAll(o2.getPersistence());
    for (final org.apache.openejb.jee.oejb2.EnterpriseBean bean : o2.getEnterpriseBeans()) {
        g2.getAbstractNamingEntry().addAll(bean.getAbstractNamingEntry());
        g2.getPersistenceContextRef().addAll(bean.getPersistenceContextRef());
        g2.getPersistenceUnitRef().addAll(bean.getPersistenceUnitRef());
        g2.getEjbLocalRef().addAll(bean.getEjbLocalRef());
        g2.getEjbRef().addAll(bean.getEjbRef());
        g2.getResourceEnvRef().addAll(bean.getResourceEnvRef());
        g2.getResourceRef().addAll(bean.getResourceRef());
        g2.getServiceRef().addAll(bean.getServiceRef());
        if (bean instanceof RpcBean) {
            final RpcBean rpcBean = (RpcBean) bean;
            if (rpcBean.getTssLink() != null) {
                g2.getTssLink().add(new TssLinkType(rpcBean.getEjbName(), rpcBean.getTssLink(), rpcBean.getJndiName()));
            }
        }
        if (bean instanceof SessionBeanType) {
            final SessionBeanType sb = (SessionBeanType) bean;
            final WebServiceBindingType b = new WebServiceBindingType();
            b.setEjbName(sb.getEjbName());
            b.setWebServiceAddress(sb.getWebServiceAddress());
            b.setWebServiceVirtualHost(sb.getWebServiceVirtualHost());
            b.setWebServiceSecurity(sb.getWebServiceSecurity());
            if (b.containsData()) {
                g2.getWebServiceBinding().add(b);
            }
        }
    }
    return g2;
}
Also used : WebServiceBindingType(org.apache.openejb.jee.oejb2.WebServiceBindingType) RpcBean(org.apache.openejb.jee.oejb2.RpcBean) TssLinkType(org.apache.openejb.jee.oejb2.TssLinkType) SessionBeanType(org.apache.openejb.jee.oejb2.SessionBeanType) GeronimoEjbJarType(org.apache.openejb.jee.oejb2.GeronimoEjbJarType)

Example 4 with OpenejbJarType

use of org.apache.openejb.jee.oejb2.OpenejbJarType in project tomee by apache.

the class OpenEjb2Conversion method deploy.

@Override
public final AppModule deploy(final AppModule appModule) {
    for (final EjbModule ejbModule : appModule.getEjbModules()) {
        final Object altDD = getOpenejbJarType(ejbModule);
        if (OpenejbJarType.class.isInstance(altDD)) {
            final OpenejbJarType openejbJarType = OpenejbJarType.class.cast(altDD);
            convertEjbRefs(ejbModule.getEjbJar(), ejbModule.getOpenejbJar(), openejbJarType);
            convertMdbConfigs(ejbModule.getEjbJar(), openejbJarType);
            mergeEntityMappings(ejbModule.getModuleId(), appModule.getCmpMappings(), ejbModule.getOpenejbJar(), openejbJarType);
        }
    }
    return appModule;
}
Also used : OpenejbJarType(org.apache.openejb.jee.oejb2.OpenejbJarType) AttributeOverride(org.apache.openejb.jee.jpa.AttributeOverride)

Example 5 with OpenejbJarType

use of org.apache.openejb.jee.oejb2.OpenejbJarType in project tomee by apache.

the class OpenEjb2Conversion method mergeEntityMappings.

public final void mergeEntityMappings(final String moduleId, final EntityMappings entityMappings, final OpenejbJar openejbJar, final OpenejbJarType openejbJarType) {
    final Map<String, EntityData> entities = new TreeMap<String, EntityData>();
    if (entityMappings != null) {
        for (final Entity entity : entityMappings.getEntity()) {
            try {
                entities.put(entity.getDescription(), new EntityData(entity));
            } catch (final IllegalArgumentException e) {
                LoggerFactory.getLogger(this.getClass()).error(e.getMessage(), e);
            }
        }
    }
    for (final org.apache.openejb.jee.oejb2.EnterpriseBean enterpriseBean : openejbJarType.getEnterpriseBeans()) {
        if (!(enterpriseBean instanceof EntityBeanType)) {
            continue;
        }
        final EntityBeanType bean = (EntityBeanType) enterpriseBean;
        final EntityData entityData = entities.get(moduleId + "#" + bean.getEjbName());
        if (entityData == null) {
            // todo warn no such ejb in the ejb-jar.xml
            continue;
        }
        final Table table = new Table();
        table.setName(bean.getTableName());
        entityData.entity.setTable(table);
        for (final EntityBeanType.CmpFieldMapping cmpFieldMapping : bean.getCmpFieldMapping()) {
            final String cmpFieldName = cmpFieldMapping.getCmpFieldName();
            final Field field = entityData.fields.get(cmpFieldName);
            if (field == null) {
                // todo warn no such cmp-field in the ejb-jar.xml
                continue;
            }
            final Column column = new Column();
            column.setName(cmpFieldMapping.getTableColumn());
            field.setColumn(column);
        }
        if (bean.getKeyGenerator() != null) {
            // todo support complex primary keys
            final Attributes attributes = entityData.entity.getAttributes();
            if (attributes != null && attributes.getId().size() == 1) {
                final Id id = attributes.getId().get(0);
                // todo detect specific generation strategy
                id.setGeneratedValue(new GeneratedValue(GenerationType.IDENTITY));
            }
        }
        for (final QueryType query : bean.getQuery()) {
            final NamedQuery namedQuery = new NamedQuery();
            final QueryType.QueryMethod queryMethod = query.getQueryMethod();
            // todo deployment id could change in one of the later conversions... use entity name instead, but we need to save it off
            final StringBuilder name = new StringBuilder();
            name.append(entityData.entity.getName()).append(".").append(queryMethod.getMethodName());
            if (queryMethod.getMethodParams() != null && !queryMethod.getMethodParams().getMethodParam().isEmpty()) {
                name.append('(');
                boolean first = true;
                for (final String methodParam : queryMethod.getMethodParams().getMethodParam()) {
                    if (!first) {
                        name.append(",");
                    }
                    name.append(methodParam);
                    first = false;
                }
                name.append(')');
            }
            namedQuery.setName(name.toString());
            namedQuery.setQuery(query.getEjbQl());
            entityData.entity.getNamedQuery().add(namedQuery);
        }
    }
    for (final EjbRelationType relation : openejbJarType.getEjbRelation()) {
        final List<EjbRelationshipRoleType> roles = relation.getEjbRelationshipRole();
        if (roles.isEmpty()) {
            continue;
        }
        if (relation.getManyToManyTableName() == null) {
            final EjbRelationshipRoleType leftRole = roles.get(0);
            final EjbRelationshipRoleType.RelationshipRoleSource leftRoleSource = leftRole.getRelationshipRoleSource();
            final String leftEjbName = leftRoleSource == null ? null : leftRoleSource.getEjbName();
            final EntityData leftEntityData = entities.get(moduleId + "#" + leftEjbName);
            final EjbRelationshipRoleType.CmrField cmrField = leftRole.getCmrField();
            final String leftFieldName = null != cmrField ? cmrField.getCmrFieldName() : null;
            RelationField field;
            if (leftRole.isForeignKeyColumnOnSource()) {
                field = null != leftFieldName && null != leftEntityData ? leftEntityData.relations.get(leftFieldName) : null;
                // todo warn field not found
                if (field == null) {
                    continue;
                }
            } else {
                final RelationField other = null != leftFieldName && null != leftEntityData ? leftEntityData.relations.get(leftFieldName) : null;
                // todo warn field not found
                if (other == null) {
                    continue;
                }
                field = other.getRelatedField();
                // todo warn field not found
                if (field == null) {
                    if (other instanceof OneToMany) {
                        // for a unidirectional oneToMany, the join column declaration
                        // is placed on the oneToMany element instead of manyToOne
                        field = other;
                    } else {
                        continue;
                    }
                }
            }
            // is marked as the owning field
            if (field instanceof OneToOne) {
                final OneToOne left = (OneToOne) field;
                final OneToOne right = (OneToOne) left.getRelatedField();
                if (right != null) {
                    left.setMappedBy(null);
                    right.setMappedBy(left.getName());
                }
            }
            final EjbRelationshipRoleType.RoleMapping roleMapping = leftRole.getRoleMapping();
            for (final EjbRelationshipRoleType.RoleMapping.CmrFieldMapping cmrFieldMapping : roleMapping.getCmrFieldMapping()) {
                final JoinColumn joinColumn = new JoinColumn();
                joinColumn.setName(cmrFieldMapping.getForeignKeyColumn());
                joinColumn.setReferencedColumnName(cmrFieldMapping.getKeyColumn());
                field.getJoinColumn().add(joinColumn);
            }
        } else {
            final JoinTable joinTable = new JoinTable();
            joinTable.setName(relation.getManyToManyTableName());
            //
            // left
            final EjbRelationshipRoleType leftRole = roles.get(0);
            RelationField left = null;
            if (leftRole.getRelationshipRoleSource() != null) {
                final String leftEjbName = leftRole.getRelationshipRoleSource().getEjbName();
                final EntityData leftEntityData = entities.get(moduleId + "#" + leftEjbName);
                if (leftEntityData == null) {
                    // todo warn no such entity in ejb-jar.xml
                    continue;
                }
                final EjbRelationshipRoleType.CmrField lcf = leftRole.getCmrField();
                left = (null != lcf ? leftEntityData.relations.get(lcf.getCmrFieldName()) : null);
            }
            if (left != null) {
                left.setJoinTable(joinTable);
                final EjbRelationshipRoleType.RoleMapping roleMapping = leftRole.getRoleMapping();
                for (final EjbRelationshipRoleType.RoleMapping.CmrFieldMapping cmrFieldMapping : roleMapping.getCmrFieldMapping()) {
                    final JoinColumn joinColumn = new JoinColumn();
                    joinColumn.setName(cmrFieldMapping.getForeignKeyColumn());
                    joinColumn.setReferencedColumnName(cmrFieldMapping.getKeyColumn());
                    joinTable.getJoinColumn().add(joinColumn);
                }
            }
            // right
            if (roles.size() > 1) {
                final EjbRelationshipRoleType rightRole = roles.get(1);
                // if there wasn't a left cmr field, find the field for the right, so we can add the join table to it
                if (left == null) {
                    final EjbRelationshipRoleType.CmrField rcf = rightRole.getCmrField();
                    if (rcf == null) {
                        // todo warn no cmr field declared for either role
                        continue;
                    } else if (rightRole.getRelationshipRoleSource() != null) {
                        final String rightEjbName = rightRole.getRelationshipRoleSource().getEjbName();
                        final EntityData rightEntityData = entities.get(moduleId + "#" + rightEjbName);
                        if (rightEntityData == null) {
                            // todo warn no such entity in ejb-jar.xml
                            continue;
                        }
                        final RelationField right = rightEntityData.relations.get(rcf.getCmrFieldName());
                        right.setJoinTable(joinTable);
                    }
                }
                final EjbRelationshipRoleType.RoleMapping roleMapping = rightRole.getRoleMapping();
                for (final EjbRelationshipRoleType.RoleMapping.CmrFieldMapping cmrFieldMapping : roleMapping.getCmrFieldMapping()) {
                    final JoinColumn joinColumn = new JoinColumn();
                    joinColumn.setName(cmrFieldMapping.getForeignKeyColumn());
                    joinColumn.setReferencedColumnName(cmrFieldMapping.getKeyColumn());
                    joinTable.getInverseJoinColumn().add(joinColumn);
                }
            }
        }
    }
}
Also used : Entity(org.apache.openejb.jee.jpa.Entity) Attributes(org.apache.openejb.jee.jpa.Attributes) EjbRelationshipRoleType(org.apache.openejb.jee.oejb2.EjbRelationshipRoleType) GeneratedValue(org.apache.openejb.jee.jpa.GeneratedValue) RelationField(org.apache.openejb.jee.jpa.RelationField) Field(org.apache.openejb.jee.jpa.Field) OneToOne(org.apache.openejb.jee.jpa.OneToOne) JoinColumn(org.apache.openejb.jee.jpa.JoinColumn) Column(org.apache.openejb.jee.jpa.Column) JoinColumn(org.apache.openejb.jee.jpa.JoinColumn) Table(org.apache.openejb.jee.jpa.Table) JoinTable(org.apache.openejb.jee.jpa.JoinTable) TreeMap(java.util.TreeMap) OneToMany(org.apache.openejb.jee.jpa.OneToMany) EjbRelationType(org.apache.openejb.jee.oejb2.EjbRelationType) RelationField(org.apache.openejb.jee.jpa.RelationField) EntityBeanType(org.apache.openejb.jee.oejb2.EntityBeanType) Id(org.apache.openejb.jee.jpa.Id) NamedQuery(org.apache.openejb.jee.jpa.NamedQuery) QueryType(org.apache.openejb.jee.oejb2.QueryType) JoinTable(org.apache.openejb.jee.jpa.JoinTable)

Aggregations

OpenejbJarType (org.apache.openejb.jee.oejb2.OpenejbJarType)3 SessionBeanType (org.apache.openejb.jee.oejb2.SessionBeanType)3 TreeMap (java.util.TreeMap)2 EnterpriseBean (org.apache.openejb.jee.EnterpriseBean)2 GeronimoEjbJarType (org.apache.openejb.jee.oejb2.GeronimoEjbJarType)2 File (java.io.File)1 IOException (java.io.IOException)1 TreeSet (java.util.TreeSet)1 InitialContext (javax.naming.InitialContext)1 JAXBElement (javax.xml.bind.JAXBElement)1 JAXBException (javax.xml.bind.JAXBException)1 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)1 SAXParser (javax.xml.parsers.SAXParser)1 SAXParserFactory (javax.xml.parsers.SAXParserFactory)1 OpenEJBException (org.apache.openejb.OpenEJBException)1 Assembler (org.apache.openejb.assembler.classic.Assembler)1 ProxyFactoryInfo (org.apache.openejb.assembler.classic.ProxyFactoryInfo)1 SecurityServiceInfo (org.apache.openejb.assembler.classic.SecurityServiceInfo)1 StatelessSessionContainerInfo (org.apache.openejb.assembler.classic.StatelessSessionContainerInfo)1 TransactionServiceInfo (org.apache.openejb.assembler.classic.TransactionServiceInfo)1