You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/01/04 05:23:10 UTC
svn commit: r492404 [1/3] - in /incubator/openejb/trunk/openejb3:
container/openejb-core/
container/openejb-core/src/main/java/org/apache/openejb/
container/openejb-core/src/main/java/org/apache/openejb/alt/assembler/
container/openejb-core/src/main/ja...
Author: dain
Date: Wed Jan 3 20:23:04 2007
New Revision: 492404
URL: http://svn.apache.org/viewvc?view=rev&rev=492404
Log:
Cmp2 generator
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorComplexKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorSimpleKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Cmp2Builder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmrFieldInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/AbstractKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ComplexKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java (contents, props changed)
- copied, changed from r491148, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/SimpleKeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Entity.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2KeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpUtil.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/CmpField.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/CmrField.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/CmrSet.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CmrSet.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/CmrStyle.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/CollectionRef.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CollectionRef.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/SetValuedCmr.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/MultiValuedCmr.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/SingleValuedCmr.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/SingleValuedCmr.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetomany/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetomany/ExampleABean_JPA.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetomany/ExampleBBean_JPA.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetoone/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetoone/ExampleABean_JPA.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetoone/ABean_JPA.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/test/entity/cmr/onetoone/ExampleBBean_JPA.java
- copied, changed from r491148, incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetoone/BBean_JPA.java
Removed:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/assembler/
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGenerator.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGeneratorFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/util/resources/
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpUtil.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/instrument/
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CmpWrapper.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CmpWrapperFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CmrFactoryImpl.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CmrSet.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/CollectionRef.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/MultiValuedCmrImpl.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/SingleValuedCmrImpl.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/CmrFactory.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/MultiValuedCmr.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/SingleValuedCmr.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/EncCmp2Bean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/RmiIiopCmp2Bean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetomany/ABean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetomany/BBean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetoone/ABean_JPA.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmr/onetoone/BBean_JPA.java
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCmpEngine.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityBeanInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/CmpDeploymentFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmrFieldType.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRelation.java
incubator/openejb/trunk/openejb3/container/openejb-persistence/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/jpa.mapping.xml
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/persistence.xml
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/pom.xml Wed Jan 3 20:23:04 2007
@@ -144,7 +144,7 @@
</executions>
<configuration>
<namespace>http://openejb.apache.org/schemas/core</namespace>
- <excludedClasses>org.apache.openejb.alt.config.ejb,org.apache.openejb.util.io,org.apache.openejb.InterfaceType,org.apache.openejb.BeanType</excludedClasses>
+ <excludedClasses>org.apache.openejb.alt.config.ejb,org.apache.openejb.util.io,org.apache.openejb.InterfaceType,org.apache.openejb.BeanType,org.apache.openejb.core.cmp.cmp2.CmrStyle</excludedClasses>
</configuration>
</plugin>
</plugins>
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java Wed Jan 3 20:23:04 2007
@@ -67,7 +67,7 @@
public Class getBusinessRemoteInterface();
- public java.lang.reflect.Field getPrimaryKeyField();
+ public String getPrimaryKeyField();
public boolean isReentrant();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java Wed Jan 3 20:23:04 2007
@@ -35,6 +35,7 @@
import org.apache.openejb.assembler.classic.SecurityRoleReferenceInfo;
import org.apache.openejb.assembler.classic.StatefulBeanInfo;
import org.apache.openejb.assembler.classic.StatelessBeanInfo;
+import org.apache.openejb.assembler.classic.CmrFieldInfo;
import org.apache.openejb.jee.AroundInvoke;
import org.apache.openejb.jee.CmpField;
import org.apache.openejb.jee.CmpVersion;
@@ -61,6 +62,9 @@
import org.apache.openejb.jee.TransactionType;
import org.apache.openejb.jee.ActivationConfig;
import org.apache.openejb.jee.ActivationConfigProperty;
+import org.apache.openejb.jee.EjbRelation;
+import org.apache.openejb.jee.EjbRelationshipRole;
+import org.apache.openejb.jee.Multiplicity;
import org.apache.openejb.loader.SystemInstance;
import java.util.ArrayList;
@@ -68,6 +72,7 @@
import java.util.List;
import java.util.Map;
import java.util.Collections;
+import java.util.Iterator;
/**
* @version $Revision$ $Date$
@@ -147,6 +152,10 @@
}
}
+ if (jar.getEjbJar().getRelationships() != null) {
+ initRelationships(jar, infos);
+ }
+
if (!"tomcat-webapp".equals(SystemInstance.get().getProperty("openejb.loader"))) {
// try {
// File jarFile = new File(jar.getJarURI());
@@ -157,6 +166,58 @@
// }
}
return ejbJar;
+ }
+
+ private void initRelationships(EjbModule jar, Map<String, EnterpriseBeanInfo> infos) throws OpenEJBException {
+ for (EjbRelation ejbRelation : jar.getEjbJar().getRelationships().getEjbRelation()) {
+ Iterator<EjbRelationshipRole> iterator = ejbRelation.getEjbRelationshipRole().iterator();
+ EjbRelationshipRole left = iterator.next();
+ EjbRelationshipRole right = iterator.next();
+
+ // left role info
+ CmrFieldInfo leftCmrFieldInfo = initRelationshipRole(left, infos);
+ CmrFieldInfo rightCmrFieldInfo = initRelationshipRole(right, infos);
+ leftCmrFieldInfo.mappedBy = rightCmrFieldInfo;
+ rightCmrFieldInfo.mappedBy = leftCmrFieldInfo;
+ }
+ }
+
+ private CmrFieldInfo initRelationshipRole(EjbRelationshipRole role, Map<String, EnterpriseBeanInfo> infos) throws OpenEJBException {
+ CmrFieldInfo cmrFieldInfo = new CmrFieldInfo();
+
+ // find the entityBeanInfo info for this role
+ String ejbName = role.getRelationshipRoleSource().getEjbName();
+ 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);
+ }
+ EntityBeanInfo entityBeanInfo = (EntityBeanInfo) enterpriseBeanInfo;
+ cmrFieldInfo.roleSource = entityBeanInfo;
+
+ // RoleName: this may be null
+ cmrFieldInfo.roleName = role.getEjbRelationshipRoleName();
+
+ // 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();
+ }
+ }
+
+ // CascadeDelete
+ cmrFieldInfo.cascadeDelete = role.getCascadeDelete() != null;
+ // Multiplicity: one or many
+ cmrFieldInfo.many = role.getMultiplicity() == Multiplicity.MANY;
+
+ // add the field to the entityBean
+ entityBeanInfo.cmrFields.add(cmrFieldInfo);
+
+ return cmrFieldInfo;
}
private void initInterceptors(EjbModule jar, EjbJarInfo ejbJar, Map<String, EnterpriseBeanInfo> beanInfos) throws OpenEJBException {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCmpEngine.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCmpEngine.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCmpEngine.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCmpEngine.java Wed Jan 3 20:23:04 2007
@@ -17,12 +17,37 @@
*/
package org.apache.openejb.alt.containers.castor_cmp11;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import javax.ejb.CreateException;
+import javax.ejb.DuplicateKeyException;
+import javax.ejb.EJBException;
+import javax.ejb.EJBObject;
+import javax.ejb.EntityBean;
+import javax.ejb.FinderException;
+import javax.ejb.RemoveException;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.SystemException;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.cmp.CmpCallback;
import org.apache.openejb.core.cmp.CmpEngine;
+import org.apache.openejb.core.cmp.KeyGenerator;
import org.apache.openejb.util.Logger;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.JDOManager;
@@ -33,30 +58,6 @@
import org.exolab.castor.persist.spi.CallbackInterceptor;
import org.exolab.castor.persist.spi.InstanceFactory;
-import javax.ejb.CreateException;
-import javax.ejb.DuplicateKeyException;
-import javax.ejb.EJBException;
-import javax.ejb.EJBObject;
-import javax.ejb.EntityBean;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-import javax.naming.InitialContext;
-import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
public class CastorCmpEngine implements CmpEngine {
private static final Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.core.cmp");
private static final Object[] NO_ARGS = new Object[0];
@@ -316,7 +317,7 @@
}
private Object getCastorPrimaryKey(ThreadContext callContext, Object primaryKey) {
- KeyGenerator kg = callContext.getDeploymentInfo().getKeyGenerator();
+ CastorKeyGenerator kg = (CastorKeyGenerator) callContext.getDeploymentInfo().getKeyGenerator();
if (kg.isKeyComplex()) {
return kg.getJdoComplex(primaryKey);
} else {
@@ -348,8 +349,13 @@
private void configureKeyGenerator(CoreDeploymentInfo di) throws SystemException {
try {
- KeyGenerator kg = KeyGeneratorFactory.createKeyGenerator(di);
- di.setKeyGenerator(kg);
+ String primaryKeyField = di.getPrimaryKeyField();
+ Class beanClass = di.getBeanClass();
+ if (primaryKeyField != null) {
+ di.setKeyGenerator(new CastorSimpleKeyGenerator(beanClass, primaryKeyField));
+ } else {
+ di.setKeyGenerator(new CastorComplexKeyGenerator(beanClass, di.getPrimaryKeyClass()));
+ }
} catch (Exception e) {
logger.error("Unable to create KeyGenerator for deployment id = " + di.getDeploymentID(), e);
throw new SystemException("Unable to create KeyGenerator for deployment id = " + di.getDeploymentID(), e);
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorComplexKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorComplexKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorComplexKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorComplexKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,43 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.alt.containers.castor_cmp11;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.core.cmp.ComplexKeyGenerator;
+import org.exolab.castor.persist.spi.Complex;
+
+public class CastorComplexKeyGenerator extends ComplexKeyGenerator implements CastorKeyGenerator {
+ public CastorComplexKeyGenerator(Class entityBeanClass, Class pkClass) throws OpenEJBException {
+ super(entityBeanClass, pkClass);
+ }
+
+ public Complex getJdoComplex(Object primaryKey) {
+ Object[] pkValues = new Object[fields.size()];
+ for (int i = 0; i < fields.size(); i++) {
+ PkField pkField = fields.get(i);
+ Object pkValue = pkField.getPkFieldValue(primaryKey);
+ pkValues[i] = pkValue;
+ }
+ Complex complex = new Complex(pkValues);
+ return complex;
+ }
+
+ public boolean isKeyComplex() {
+ return true;
+ }
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,26 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.alt.containers.castor_cmp11;
+
+import org.exolab.castor.persist.spi.Complex;
+import org.apache.openejb.core.cmp.KeyGenerator;
+
+public interface CastorKeyGenerator extends KeyGenerator {
+ Complex getJdoComplex(Object primaryKey);
+ boolean isKeyComplex();
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorSimpleKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorSimpleKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorSimpleKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorSimpleKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,37 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.alt.containers.castor_cmp11;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.core.cmp.SimpleKeyGenerator;
+import org.exolab.castor.persist.spi.Complex;
+
+public class CastorSimpleKeyGenerator extends SimpleKeyGenerator implements CastorKeyGenerator {
+ public CastorSimpleKeyGenerator(Class beanClass, String pkField) throws OpenEJBException {
+ super(beanClass, pkField);
+ }
+
+ public Complex getJdoComplex(Object primaryKey) {
+ Complex complex = new Complex(primaryKey);
+ return complex;
+ }
+
+ public boolean isKeyComplex() {
+ return false;
+ }
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed Jan 3 20:23:04 2007
@@ -16,21 +16,40 @@
*/
package org.apache.openejb.assembler.classic;
+import java.io.File;
+import java.io.IOException;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.Instrumentation;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import javax.naming.Context;
+import javax.persistence.EntityManagerFactory;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ManagedConnectionFactory;
+import javax.transaction.TransactionManager;
+
import org.apache.openejb.Container;
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.EnvProps;
import org.apache.openejb.Injection;
+import org.apache.openejb.OpenEJB;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.javaagent.Agent;
import org.apache.openejb.core.ConnectorReference;
import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.TemporaryClassLoader;
import org.apache.openejb.core.TransactionManagerWrapper;
+import org.apache.openejb.javaagent.Agent;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.persistence.GlobalJndiDataSourceResolver;
+import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
import org.apache.openejb.persistence.PersistenceDeployer;
import org.apache.openejb.persistence.PersistenceDeployerException;
-import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
-import org.apache.openejb.core.TemporaryClassLoader;
import org.apache.openejb.spi.SecurityService;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OpenEJBErrorHandler;
@@ -39,24 +58,6 @@
import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.StaticRecipe;
-import javax.naming.Context;
-import javax.persistence.EntityManagerFactory;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.transaction.TransactionManager;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.Instrumentation;
-
public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler {
public static final Logger logger = Logger.getInstance("OpenEJB.startup", Assembler.class.getPackage().getName());
@@ -267,8 +268,15 @@
jars.add(toUrl(jarPath));
}
+ // Generate the cmp2 concrete subclasses
+ Cmp2Builder cmp2Builder = new Cmp2Builder(appInfo);
+ File generatedJar = cmp2Builder.getJarFile();
+ if (generatedJar != null) {
+ jars.add(generatedJar.toURL());
+ }
+
// Create the class loader
- ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), org.apache.openejb.OpenEJB.class.getClassLoader());
+ ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
// JPA - Persistence Units MUST be processed first since they will add ClassFileTransformers
// to the class loader which must be added before any classes are loaded
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Cmp2Builder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Cmp2Builder.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Cmp2Builder.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Cmp2Builder.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,183 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileOutputStream;
+import java.util.jar.JarOutputStream;
+import java.util.jar.JarEntry;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.ArrayList;
+import java.net.URL;
+
+import org.apache.openejb.core.TemporaryClassLoader;
+import org.apache.openejb.core.cmp.cmp2.Cmp2Generator;
+import org.apache.openejb.core.cmp.cmp2.CmrField;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.OpenEJBException;
+
+public class Cmp2Builder {
+ private final ClassLoader tempClassLoader;
+
+ private File jarFile;
+ private final Set<String> entries = new TreeSet<String>();
+ private final AppInfo appInfo;
+
+ public Cmp2Builder(AppInfo appInfo) throws OpenEJBException {
+ this.appInfo = appInfo;
+
+ // create a tempClassLoader
+ try {
+ List<URL> jars = null;
+ jars = new ArrayList<URL>();
+ for (EjbJarInfo info : appInfo.ejbJars) {
+ jars.add(new File(info.jarPath).toURL());
+ }
+ for (ClientInfo info : appInfo.clients) {
+ jars.add(new File(info.codebase).toURL());
+ }
+ for (String jarPath : appInfo.libs) {
+ jars.add(new File(jarPath).toURL());
+ }
+ tempClassLoader = new TemporaryClassLoader(jars.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
+ } catch (Exception e) {
+ throw new OpenEJBException("Unable to create temporary class loader", e);
+ }
+ }
+
+ public File getJarFile() throws IOException {
+ if (jarFile == null) {
+ generate();
+ }
+ return jarFile;
+ }
+
+ private void generate() throws IOException {
+ boolean threwException = false;
+ JarOutputStream jarOutputStream = openJarFile();
+ try {
+ // Generate CMP2 implementation classes
+ for (EjbJarInfo ejbJar : appInfo.ejbJars) {
+ for (EnterpriseBeanInfo beanInfo : ejbJar.enterpriseBeans) {
+ if (beanInfo instanceof EntityBeanInfo) {
+ EntityBeanInfo entityBeanInfo = (EntityBeanInfo) beanInfo;
+ generateClass(jarOutputStream, entityBeanInfo);
+ }
+ }
+ }
+ } catch (IOException e) {
+ threwException = true;
+ throw e;
+ } finally {
+ close(jarOutputStream);
+ if (threwException) {
+ jarFile.delete();
+ jarFile = null;
+ }
+ }
+ }
+
+ private void generateClass(JarOutputStream jarOutputStream, EntityBeanInfo entityBeanInfo) throws IOException {
+ // only generate for cmp2 classes
+ if (entityBeanInfo.cmpVersion != 2) {
+ return;
+ }
+
+ // don't generate if there is aleady an implementation class
+ String className = entityBeanInfo.ejbClass + "_JPA";
+ String entryName = className.replace(".", "/") + ".class";
+ if (entries.contains(entryName) || tempClassLoader.getResource(entryName) != null) {
+ return;
+ }
+
+ // load the bean class, which is used buy the generator
+ Class<?> beanClass = null;
+ try {
+ beanClass = tempClassLoader.loadClass(entityBeanInfo.ejbClass);
+ } catch (ClassNotFoundException e) {
+ throw new IOException("Could not find entity bean class " + beanClass);
+ }
+
+ // generte the implementation class
+ Cmp2Generator cmp2Generator = new Cmp2Generator(beanClass,
+ entityBeanInfo.primKeyField,
+ entityBeanInfo.cmpFieldNames.toArray(new String[entityBeanInfo.cmpFieldNames.size()]));
+ for (CmrFieldInfo cmrFieldInfo : entityBeanInfo.cmrFields) {
+ if (cmrFieldInfo.fieldName != null) {
+ CmrField cmrField = new CmrField(cmrFieldInfo.fieldName,
+ cmrFieldInfo.fieldType,
+ cmrFieldInfo.mappedBy.roleSource.ejbClass,
+ cmrFieldInfo.mappedBy.roleSource.local,
+ cmrFieldInfo.mappedBy.fieldName);
+ cmp2Generator.addCmrField(cmrField);
+ }
+ }
+ byte[] bytes = cmp2Generator.generate();
+
+ // add the generated class to the jar
+ addJarEntry(jarOutputStream, entryName, bytes);
+ }
+
+ private void addJarEntry(JarOutputStream jarOutputStream, String fileName, byte[] bytes) throws IOException {
+ // add all missing directory entried
+ String path = "";
+ for (StringTokenizer tokenizer = new StringTokenizer(fileName, "/"); tokenizer.hasMoreTokens();) {
+ String part = tokenizer.nextToken();
+ if (tokenizer.hasMoreTokens()) {
+ path += part + "/";
+ if (!entries.contains(path)) {
+ jarOutputStream.putNextEntry(new JarEntry(path));
+ jarOutputStream.closeEntry();
+ entries.add(path);
+ }
+ }
+ }
+
+ // write the bytes
+ jarOutputStream.putNextEntry(new JarEntry(fileName));
+ try {
+ jarOutputStream.write(bytes);
+ } finally {
+ jarOutputStream.closeEntry();
+ entries.add(fileName);
+ }
+ }
+
+ private JarOutputStream openJarFile() throws IOException {
+ if (jarFile != null) {
+ throw new IllegalStateException("Jar file is closed");
+ }
+ jarFile = File.createTempFile("OpenEJB_Generated_", ".jar");
+ jarFile.deleteOnExit();
+ JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(jarFile));
+ return jarOutputStream;
+ }
+
+ private void close(JarOutputStream jarOutputStream) {
+ if (jarOutputStream != null) {
+ try {
+ jarOutputStream.close();
+ } catch (IOException ignored) {
+ }
+ }
+ }
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmrFieldInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmrFieldInfo.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmrFieldInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmrFieldInfo.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,28 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+public class CmrFieldInfo extends InfoObject {
+ public EntityBeanInfo roleSource;
+ public String roleName;
+ public String fieldName;
+ public String fieldType;
+ public boolean cascadeDelete;
+ public boolean many;
+ public CmrFieldInfo mappedBy;
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Wed Jan 3 20:23:04 2007
@@ -19,7 +19,6 @@
import org.apache.openejb.BeanType;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.SystemException;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.DeploymentContext;
import org.apache.openejb.core.interceptor.InterceptorData;
@@ -101,7 +100,7 @@
JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc, transactionType, ejbType, factories, new File(bean.codebase).getPath());
IvmContext root = (IvmContext) jndiEncBuilder.build();
- DeploymentContext deploymentContext = new DeploymentContext(bean.ejbDeploymentId, ejbClass.getClassLoader(), root);
+ DeploymentContext deploymentContext = new DeploymentContext(bean.ejbDeploymentId, cl, root);
CoreDeploymentInfo deployment;
if (BeanType.MESSAGE_DRIVEN != ejbType) {
deployment = new CoreDeploymentInfo(deploymentContext, ejbClass, home, remote, localhome, local, businessLocal, businessRemote, primaryKey, ejbType);
@@ -174,6 +173,7 @@
if (ejbType.isEntity()) {
EntityBeanInfo entity = (EntityBeanInfo) bean;
+ deployment.setCmp2(entity.cmpVersion == 2);
deployment.setIsReentrant(entity.reentrant.equalsIgnoreCase("true"));
if (ejbType == BeanType.CMP_ENTITY) {
@@ -194,11 +194,7 @@
deployment.setCmrFields(entity.cmpFieldNames.toArray(new String[]{}));
if (entity.primKeyField != null) {
- try {
- deployment.setPrimKeyField(entity.primKeyField);
- } catch (NoSuchFieldException e) {
- throw new SystemException("Can not set prim-key-field on deployment " + entity.ejbDeploymentId, e);
- }
+ deployment.setPrimaryKeyField(entity.primKeyField);
}
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityBeanInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityBeanInfo.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityBeanInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityBeanInfo.java Wed Jan 3 20:23:04 2007
@@ -26,6 +26,7 @@
public String persistenceType;
public String reentrant;
public final List<String> cmpFieldNames = new ArrayList<String>();
+ public final List<CmrFieldInfo> cmrFields = new ArrayList<CmrFieldInfo>();
public int cmpVersion;
public final List<QueryInfo> queries = new ArrayList<QueryInfo>();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/CmpDeploymentFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/CmpDeploymentFactory.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/CmpDeploymentFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/CmpDeploymentFactory.java Wed Jan 3 20:23:04 2007
@@ -91,11 +91,7 @@
deploymentInfo.setCmrFields(cmpFields == null? new String[0] : cmpFields);
deploymentInfo.setIsReentrant(reentrant);
if (primKeyField != null) {
- try {
- deploymentInfo.setPrimKeyField(primKeyField);
- } catch (NoSuchFieldException e) {
- throw new SystemException("Can not set prim-key-field on deployment " + id, e);
- }
+ deploymentInfo.setPrimaryKeyField(primKeyField);
}
Class home = deploymentInfo.getHomeInterface();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Wed Jan 3 20:23:04 2007
@@ -16,7 +16,6 @@
*/
package org.apache.openejb.core;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
@@ -42,7 +41,7 @@
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.BeanType;
import org.apache.openejb.Injection;
-import org.apache.openejb.alt.containers.castor_cmp11.KeyGenerator;
+import org.apache.openejb.core.cmp.KeyGenerator;
import org.apache.openejb.core.entity.EntityEjbHomeHandler;
import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
import org.apache.openejb.core.stateful.SessionSynchronizationTxPolicy;
@@ -215,10 +214,11 @@
public byte getTransactionAttribute(Method method) {
Byte byteWrapper = methodTransactionAttributes.get(method);
- if (byteWrapper == null)
+ if (byteWrapper == null) {
return TX_NOT_SUPPORTED;// non remote or home interface method
- else
+ } else {
return byteWrapper;
+ }
}
public TransactionPolicy getTransactionPolicy(Method method) {
@@ -244,7 +244,9 @@
}
methodTransactionPolicies.put(method, policy);
}
- if (policy == null) policy = new NoTransactionPolicy();
+ if (policy == null) {
+ policy = new NoTransactionPolicy();
+ }
return policy ;
}
@@ -263,7 +265,9 @@
}
public Collection<String> getAuthorizedRoles(Method method) {
Collection<String> roleSet = methodPermissions.get(method);
- if (roleSet == null) return Collections.emptySet();
+ if (roleSet == null) {
+ return Collections.emptySet();
+ }
return roleSet;
}
@@ -723,12 +727,13 @@
}
protected String extractHomeBeanMethodName(String methodName) {
- if (methodName.equals("create"))
+ if (methodName.equals("create")) {
return "ejbCreate";
- else if (methodName.startsWith("find"))
+ } else if (methodName.startsWith("find")) {
return "ejbF" + methodName.substring(1);
- else
+ } else {
return "ejbH" + methodName.substring(1);
+ }
}
public Method getCreateMethod() {
@@ -776,20 +781,28 @@
// CMP specific data
//
+ private boolean cmp2;
private KeyGenerator keyGenerator;
- private Field primKeyField;
+ private String primaryKeyField;
private String[] cmrFields;
+ private Class cmpBeanImpl;
private Map<Method, String> queryMethodMap = new HashMap<Method, String>();
- public Field getPrimaryKeyField() {
- return primKeyField;
+ public boolean isCmp2() {
+ return cmp2;
}
- public void setPrimKeyField(String fieldName) throws java.lang.NoSuchFieldException {
- if (componentType == BeanType.CMP_ENTITY && !java.lang.reflect.Modifier.isAbstract(beanClass.getModifiers())) {
- primKeyField = beanClass.getField(fieldName);
- }
+ public void setCmp2(boolean cmp2) {
+ this.cmp2 = cmp2;
+ }
+
+ public String getPrimaryKeyField() {
+ return primaryKeyField;
+ }
+
+ public void setPrimaryKeyField(String primaryKeyField) {
+ this.primaryKeyField = primaryKeyField;
}
public String [] getCmrFields() {
@@ -814,6 +827,14 @@
public String getQuery(Method queryMethod) {
return queryMethodMap.get(queryMethod);
+ }
+
+ public Class getCmpBeanImpl() {
+ return cmpBeanImpl;
+ }
+
+ public void setCmpBeanImpl(Class cmpBeanImpl) {
+ this.cmpBeanImpl = cmpBeanImpl;
}
public void setJarPath(String jarPath) {
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/AbstractKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/AbstractKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/AbstractKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/AbstractKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,60 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.cmp;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
+import javax.ejb.EJBException;
+
+import org.apache.openejb.OpenEJBException;
+
+public abstract class AbstractKeyGenerator implements KeyGenerator {
+ public static boolean isValidPkField(Field field) {
+ int modifiers = field.getModifiers();
+ return Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers);
+ }
+
+ public static Field getField(Class clazz, String fieldName) throws OpenEJBException {
+ try {
+ return clazz.getField(fieldName);
+ } catch (NoSuchFieldException e) {
+ throw new OpenEJBException("Unable to get primary key field from entity bean class: " + clazz.getName(), e);
+ }
+ }
+
+ public static Object getFieldValue(Field field, Object object) throws EJBException {
+ if (field == null) throw new NullPointerException("field is null");
+ if (object == null) throw new NullPointerException("object is null");
+ try {
+ return field.get(object);
+ } catch (Exception e) {
+ throw new EJBException("Could not get field value for field " + field, e);
+ }
+ }
+
+ public static void setFieldValue(Field field, Object object, Object value) throws EJBException {
+ if (field == null) throw new NullPointerException("field is null");
+ if (object == null) throw new NullPointerException("object is null");
+ try {
+ field.set(object, value);
+ } catch (Exception e) {
+ throw new EJBException("Could not set field value for field " + field, e);
+ }
+ }
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java Wed Jan 3 20:23:04 2007
@@ -17,47 +17,46 @@
*/
package org.apache.openejb.core.cmp;
-import org.apache.openejb.RpcContainer;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.rmi.NoSuchObjectException;
+import java.rmi.RemoteException;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import javax.ejb.CreateException;
+import javax.ejb.EJBException;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
+import javax.ejb.EJBLocalObject;
+import javax.ejb.EJBObject;
+import javax.ejb.EntityBean;
+import javax.ejb.ObjectNotFoundException;
+import javax.ejb.RemoveException;
+import javax.transaction.TransactionManager;
+
+import org.apache.openejb.ApplicationException;
+import org.apache.openejb.Container;
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.Container;
-import org.apache.openejb.ApplicationException;
import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.util.Enumerator;
-import org.apache.openejb.alt.containers.castor_cmp11.KeyGenerator;
+import org.apache.openejb.RpcContainer;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.Operations;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.entity.EntityContext;
import org.apache.openejb.core.transaction.TransactionContainer;
-import org.apache.openejb.core.transaction.TransactionPolicy;
import org.apache.openejb.core.transaction.TransactionContext;
-import org.apache.openejb.core.transaction.TxRequired;
+import org.apache.openejb.core.transaction.TransactionPolicy;
import org.apache.openejb.core.transaction.TxManditory;
+import org.apache.openejb.core.transaction.TxRequired;
import org.apache.openejb.core.transaction.TxRequiresNew;
-import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.Operations;
-import org.apache.openejb.core.entity.EntityContext;
-
-import javax.ejb.EntityBean;
-import javax.ejb.RemoveException;
-import javax.ejb.EJBException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBObject;
-import javax.ejb.EJBLocalObject;
-import javax.ejb.CreateException;
-import javax.ejb.ObjectNotFoundException;
-import javax.transaction.TransactionManager;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Field;
-import java.rmi.RemoteException;
-import java.rmi.NoSuchObjectException;
-import java.util.List;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.Map;
-import java.util.HashMap;
+import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.util.Enumerator;
/**
* @org.apache.xbean.XBean element="cmpContainer"
@@ -125,20 +124,8 @@
}
public void deploy(CoreDeploymentInfo deploymentInfo) throws OpenEJBException {
- // try to set deploymentInfo static field on bean implementation class
- try {
- Field field = deploymentInfo.getBeanClass().getField("deploymentInfo");
- field.set(null, deploymentInfo);
- } catch (Exception e) {
- // ignore
- }
-
Object deploymentId = deploymentInfo.getDeploymentID();
- deploymentsById.put(deploymentId, deploymentInfo);
- deploymentsByClass.put(deploymentInfo.getBeanClass(), deploymentInfo);
- deploymentInfo.setContainer(this);
-
Object cmpEngineKey = deploymentInfo.getJarPath();
if (cmpEngineKey == null) {
cmpEngineKey = deploymentInfo.getClassLoader();
@@ -151,6 +138,19 @@
}
cmpEngine.deploy(deploymentInfo);
cmpEnginesByDeployment.put(deploymentId, cmpEngine);
+
+ // try to set deploymentInfo static field on bean implementation class
+ try {
+ Field field = deploymentInfo.getCmpBeanImpl().getField("deploymentInfo");
+ field.set(null, deploymentInfo);
+ } catch (Exception e) {
+ // ignore
+ }
+
+ // add to indexes
+ deploymentsById.put(deploymentId, deploymentInfo);
+ deploymentsByClass.put(deploymentInfo.getCmpBeanImpl(), deploymentInfo);
+ deploymentInfo.setContainer(this);
}
public Object getEjbInstance(CoreDeploymentInfo deployInfo, Object primaryKey) {
@@ -203,6 +203,8 @@
ThreadContext oldCallContext = ThreadContext.getThreadContext();
ThreadContext.setThreadContext(callContext);
+ ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(deployInfo.getClassLoader());
try {
boolean authorized = securityService.isCallerAuthorized(securityIdentity, deployInfo.getAuthorizedRoles(callMethod));
@@ -254,6 +256,7 @@
obtains from the DeploymentInfo object associated with the current thread context.
*/
ThreadContext.setThreadContext(oldCallContext);
+ Thread.currentThread().setContextClassLoader(oldCL);
}
}
@@ -263,10 +266,10 @@
private EntityBean createNewInstance(ThreadContext callContext) {
CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
try {
- EntityBean bean = (EntityBean) deploymentInfo.getBeanClass().newInstance();
+ EntityBean bean = (EntityBean) deploymentInfo.getCmpBeanImpl().newInstance();
return bean;
} catch (Exception e) {
- throw new EJBException("Unable to create new entity bean instance");
+ throw new EJBException("Unable to create new entity bean instance " + deploymentInfo.getCmpBeanImpl(), e);
}
}
@@ -383,14 +386,6 @@
return entityBean.getClass().getField("deleted").getBoolean(entityBean);
} catch (NoSuchFieldException e) {
return false;
- } catch (Exception e) {
- throw new EJBException(e);
- }
- }
-
- private void setDeleted(EntityBean entityBean, boolean deleted) {
- try {
- entityBean.getClass().getField("deleted").setBoolean(entityBean, deleted);
} catch (Exception e) {
throw new EJBException(e);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java?view=diff&rev=492404&r1=492403&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java Wed Jan 3 20:23:04 2007
@@ -20,6 +20,7 @@
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.SystemException;
+import org.apache.openejb.OpenEJBException;
import javax.persistence.EntityTransaction;
import javax.ejb.EntityBean;
@@ -38,5 +39,5 @@
List<Object> queryBeans(ThreadContext callContext, String queryString, Object[] args) throws FinderException;
- void deploy(CoreDeploymentInfo deploymentInfo) throws SystemException;
+ void deploy(CoreDeploymentInfo deploymentInfo) throws OpenEJBException;
}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ComplexKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ComplexKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ComplexKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ComplexKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,81 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.cmp;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.ejb.EJBException;
+import javax.ejb.EntityBean;
+
+import org.apache.openejb.OpenEJBException;
+
+public class ComplexKeyGenerator extends AbstractKeyGenerator {
+ protected final List<PkField> fields;
+ private final Class pkClass;
+
+ public ComplexKeyGenerator(Class entityBeanClass, Class pkClass) throws OpenEJBException {
+ this.pkClass = pkClass;
+ List<org.apache.openejb.core.cmp.ComplexKeyGenerator.PkField> fields = new ArrayList<PkField>();
+ for (Field pkObjectField : pkClass.getFields()) {
+ if (!isValidPkField(pkObjectField)) {
+ Field entityBeanField = getField(entityBeanClass, pkObjectField.getName());
+ if (!isValidPkField(entityBeanField)) {
+ throw new OpenEJBException("Invalid primray key field on entity bean class: " + entityBeanClass.getName());
+ }
+ org.apache.openejb.core.cmp.ComplexKeyGenerator.PkField pkField = new org.apache.openejb.core.cmp.ComplexKeyGenerator.PkField(entityBeanField, pkObjectField);
+ fields.add(pkField);
+ }
+ }
+ this.fields = Collections.unmodifiableList(fields);
+ }
+
+ public Object getPrimaryKey(EntityBean bean) {
+ Object pkObject = null;
+ try {
+ pkObject = pkClass.newInstance();
+ } catch (Exception e) {
+ throw new EJBException("Unable to create complex primary key instance: " + pkClass.getName(), e);
+ }
+ for (org.apache.openejb.core.cmp.ComplexKeyGenerator.PkField pkField : fields) {
+ pkField.copyToPkObject(bean, pkObject);
+ }
+ return pkObject;
+ }
+
+ protected static class PkField {
+ private final Field entityBeanField;
+ private final Field pkObjectField;
+
+ public PkField(Field entityBeanField, Field pkObjectField) {
+ this.entityBeanField = entityBeanField;
+ this.pkObjectField = pkObjectField;
+ }
+
+ public void copyToPkObject(EntityBean bean, Object pkObject) {
+ Object value = getFieldValue(entityBeanField, bean);
+ setFieldValue(pkObjectField, bean, value);
+ }
+
+ public Object getPkFieldValue(Object pkObject) {
+ Object value = getFieldValue(pkObjectField, pkObject);
+ return value;
+ }
+ }
+}
Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java (from r491148, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGenerator.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java?view=diff&rev=492404&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGenerator.java&r1=491148&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java&r2=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/KeyGenerator.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -14,16 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.openejb.alt.containers.castor_cmp11;
-
-import org.exolab.castor.persist.spi.Complex;
+package org.apache.openejb.core.cmp;
public interface KeyGenerator {
-
- public Object getPrimaryKey(javax.ejb.EntityBean bean);
-
- public Complex getJdoComplex(Object primaryKey);
-
- public boolean isKeyComplex();
-
+ Object getPrimaryKey(javax.ejb.EntityBean bean);
}
Propchange: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/KeyGenerator.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/SimpleKeyGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/SimpleKeyGenerator.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/SimpleKeyGenerator.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/SimpleKeyGenerator.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,39 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.cmp;
+
+import java.lang.reflect.Field;
+import javax.ejb.EntityBean;
+
+import org.apache.openejb.OpenEJBException;
+
+public class SimpleKeyGenerator extends AbstractKeyGenerator {
+ private final Field pkField;
+
+ public SimpleKeyGenerator(Class beanClass, String pkField) throws OpenEJBException {
+ this.pkField = getField(beanClass, pkField);
+ if (!isValidPkField(this.pkField)) {
+ throw new OpenEJBException("Invalid primray key field: " + pkField);
+ }
+ }
+
+ public Object getPrimaryKey(EntityBean bean) {
+ Object value = getFieldValue(pkField, bean);
+ return value;
+ }
+}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Entity.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Entity.java?view=auto&rev=492404
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Entity.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Entity.java Wed Jan 3 20:23:04 2007
@@ -0,0 +1,31 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.core.cmp.cmp2;
+
+//
+// WARNING: Do not refactor this class. It is used by the Cmp2Generator.
+//
+public interface Cmp2Entity {
+ Object OpenEJB_getPrimaryKey();
+
+ void OpenEJB_deleted();
+
+ Object OpenEJB_addCmr(String name, Object bean);
+
+ void OpenEJB_removeCmr(String name, Object value);
+}