dain 2004/10/13 14:53:22
Modified: modules/core/src/java/org/openejb/deployment
CMPEntityBuilder.java
Log:
CMP 1.1 beans now deploy... you can't use them but deployment won't complain
Synchronized version-info with geronimo
Revision Changes Path
1.5 +57 -11
openejb/modules/core/src/java/org/openejb/deployment/CMPEntityBuilder.java
Index: CMPEntityBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/deployment/CMPEntityBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CMPEntityBuilder.java 8 Oct 2004 06:05:06 -0000 1.4
+++ CMPEntityBuilder.java 13 Oct 2004 18:53:22 -0000 1.5
@@ -49,6 +49,7 @@
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.security.Permissions;
import java.util.HashMap;
import java.util.HashSet;
@@ -66,9 +67,9 @@
import org.apache.geronimo.security.deploy.Security;
import org.apache.geronimo.xbeans.j2ee.CmpFieldType;
import org.apache.geronimo.xbeans.j2ee.EjbJarType;
+import org.apache.geronimo.xbeans.j2ee.EjbNameType;
import org.apache.geronimo.xbeans.j2ee.EnterpriseBeansType;
import org.apache.geronimo.xbeans.j2ee.EntityBeanType;
-import org.apache.geronimo.xbeans.j2ee.EjbNameType;
import org.openejb.dispatch.MethodSignature;
import org.openejb.entity.cmp.CMPContainerBuilder;
import org.openejb.proxy.EJBProxyFactory;
@@ -117,6 +118,8 @@
String ejbName = getString(entityBean.getEjbName());
String abstractSchemaName =
getString(entityBean.getAbstractSchemaName());
+ boolean cmp2 = isCMP2(entityBean);
+
ObjectName entityObjectName = super.createEJBObjectName(earContext,
ejbModuleName, entityBean);
EJBProxyFactory proxyFactory = (EJBProxyFactory)
getModuleBuilder().createEJBProxyFactory(entityObjectName.getCanonicalName(),
@@ -146,7 +149,7 @@
Set pkFieldNames;
if (entityBean.getPrimkeyField() == null) {
-// no field name specified, must be a compound pk so get the field names from the
public fields
+ // no field name specified, must be a compound pk so get the
field names from the public fields
Field[] fields = pkClass.getFields();
pkFieldNames = new HashSet(fields.length);
for (int j = 0; j < fields.length; j++) {
@@ -154,7 +157,7 @@
pkFieldNames.add(field.getName());
}
} else {
-// specific field is primary key
+ // specific field is primary key
pkFieldNames = new HashSet(1);
pkFieldNames.add(getString(entityBean.getPrimkeyField()));
}
@@ -163,7 +166,7 @@
for (int cmpFieldIndex = 0; cmpFieldIndex < cmpFieldTypes.length;
cmpFieldIndex++) {
CmpFieldType cmpFieldType = cmpFieldTypes[cmpFieldIndex];
String fieldName = getString(cmpFieldType.getFieldName());
- Class fieldType = getCMPFieldType(fieldName, ejbClass);
+ Class fieldType = getCMPFieldType(cmp2, fieldName, ejbClass);
boolean isPKField = pkFieldNames.contains(fieldName);
ejb.addCMPField(new CMPField(fieldName, fieldType, isPKField));
table.addColumn(new Column(fieldName, fieldType, isPKField));
@@ -187,13 +190,55 @@
}
}
- private Class getCMPFieldType(String fieldName, Class beanClass) throws
DeploymentException {
- try {
- String getterName = "get" + Character.toUpperCase(fieldName.charAt(0))
+ fieldName.substring(1);
- Method getter = beanClass.getMethod(getterName, null);
- return getter.getReturnType();
- } catch (Exception e) {
- throw new DeploymentException("Getter for CMP field not found:
fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ private static boolean isCMP2(EntityBeanType entityBean) throws
DeploymentException {
+ if (!entityBean.isSetCmpVersion()) {
+ return true;
+ } else {
+ String version = getString(entityBean.getCmpVersion());
+ if ("1.x".equals(version)) {
+ return false;
+ } else if ("2.x".equals(version)) {
+ return true;
+ } else {
+ throw new DeploymentException("cmp-version must be either 1.x or
2.x, but was " + version);
+ }
+ }
+ }
+
+ private Class getCMPFieldType(boolean cmp2, String fieldName, Class beanClass)
throws DeploymentException {
+ if (cmp2) {
+ try {
+ String getterName = "get" +
Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
+ Method getter = beanClass.getMethod(getterName, null);
+ return getter.getReturnType();
+ } catch (Exception e) {
+ throw new DeploymentException("Getter for CMP field not found:
fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+ } else {
+ Field field;
+ try {
+ field = beanClass.getField(fieldName);
+ } catch (NoSuchFieldException e) {
+ throw new DeploymentException("Class field for CMP field not found:
fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+
+ if (!Modifier.isPublic(field.getModifiers())) {
+ throw new DeploymentException("Class field for CMP field is not
public: fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+
+ if (Modifier.isFinal(field.getModifiers())) {
+ throw new DeploymentException("Class field for CMP field is final:
fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+
+ if (Modifier.isTransient(field.getModifiers())) {
+ throw new DeploymentException("Class field for CMP field is
transient: fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+
+ if (Modifier.isStatic(field.getModifiers())) {
+ throw new DeploymentException("Class field for CMP field is static:
fieldName=" + fieldName + " beanClass=" + beanClass.getName());
+ }
+
+ return field.getType();
}
}
@@ -209,6 +254,7 @@
builder.setLocalHomeInterfaceName(getString(entityBean.getLocalHome()));
builder.setLocalInterfaceName(getString(entityBean.getLocal()));
builder.setPrimaryKeyClassName(getString(entityBean.getPrimKeyClass()));
+ builder.setCMP2(isCMP2(entityBean));
TransactionPolicySource transactionPolicySource =
transactionPolicyHelper.getTransactionPolicySource(ejbName);
builder.setTransactionPolicySource(transactionPolicySource);
builder.setTransactedTimerName(earContext.getTransactedTimerName());