private CmrFieldInfo initRelationshipRole( final EjbRelationshipRole role, final EjbRelationshipRole relatedRole, final Map<String, EnterpriseBeanInfo> infos) throws OpenEJBException { final CmrFieldInfo cmrFieldInfo = new CmrFieldInfo(); // find the entityBeanInfo info for this role final String ejbName = role.getRelationshipRoleSource().getEjbName(); final EnterpriseBeanInfo enterpriseBeanInfo = infos.get(ejbName); if (enterpriseBeanInfo == null) { throw new OpenEJBException("Relation role source ejb not found " + ejbName); } if (!(enterpriseBeanInfo instanceof EntityBeanInfo)) { throw new OpenEJBException("Relation role source ejb is not an entity bean " + ejbName); } final EntityBeanInfo entityBeanInfo = (EntityBeanInfo) enterpriseBeanInfo; cmrFieldInfo.roleSource = entityBeanInfo; // RoleName: this may be null cmrFieldInfo.roleName = role.getEjbRelationshipRoleName(); cmrFieldInfo.synthetic = role.getCmrField() == null; // CmrFieldName: is null for uni-directional relationships if (role.getCmrField() != null) { cmrFieldInfo.fieldName = role.getCmrField().getCmrFieldName(); // CollectionType: java.util.Collection or java.util.Set if (role.getCmrField().getCmrFieldType() != null) { cmrFieldInfo.fieldType = role.getCmrField().getCmrFieldType().toString(); } if (cmrFieldInfo.fieldType == null && relatedRole.getMultiplicity() == Multiplicity.MANY) { cmrFieldInfo.fieldType = Collection.class.getName(); } } else { final String relatedEjbName = relatedRole.getRelationshipRoleSource().getEjbName(); final EnterpriseBeanInfo relatedEjb = infos.get(relatedEjbName); if (relatedEjb == null) { throw new OpenEJBException("Relation role source ejb not found " + relatedEjbName); } if (!(relatedEjb instanceof EntityBeanInfo)) { throw new OpenEJBException( "Relation role source ejb is not an entity bean " + relatedEjbName); } final EntityBeanInfo relatedEntity = (EntityBeanInfo) relatedEjb; relatedRole.getRelationshipRoleSource(); cmrFieldInfo.fieldName = relatedEntity.abstractSchemaName + "_" + relatedRole.getCmrField().getCmrFieldName(); if (relatedRole.getMultiplicity() == Multiplicity.MANY) { cmrFieldInfo.fieldType = Collection.class.getName(); } } // CascadeDelete cmrFieldInfo.cascadeDelete = role.getCascadeDelete(); // Multiplicity: one or many cmrFieldInfo.many = role.getMultiplicity() == Multiplicity.MANY; // add the field to the entityBean entityBeanInfo.cmrFields.add(cmrFieldInfo); return cmrFieldInfo; }