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");
}
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);
}
}
}
}
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;
}
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;
}
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);
}
}
}
}
}
Aggregations