Author: dblevins
Date: Sat May 31 19:49:59 2008
New Revision: 662130
URL: http://svn.apache.org/viewvc?rev=662130&view=rev
Log:
OPENEJB-814: CMP2 <cmp-field> declarations are optional
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
Sat May 31 19:49:59 2008
@@ -185,6 +185,7 @@
if (appModule.getCmpMappings() != null) {
try {
String cmpMappingsXml =
JpaJaxbUtil.marshal(EntityMappings.class, appModule.getCmpMappings());
+ System.out.println(cmpMappingsXml);
appInfo.cmpMappingsXml = cmpMappingsXml;
} catch (JAXBException e) {
throw new OpenEJBException("Unable to marshal cmp entity
mappings", e);
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
Sat May 31 19:49:59 2008
@@ -17,6 +17,7 @@
package org.apache.openejb.config;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.util.Strings;
import org.apache.openejb.core.cmp.jpa.JpaCmpEngine;
import org.apache.openejb.core.cmp.CmpUtil;
import org.apache.openejb.jee.CmpField;
@@ -69,6 +70,7 @@
import java.util.Arrays;
import java.util.TreeMap;
import java.lang.reflect.Modifier;
+import java.lang.reflect.Method;
public class CmpJpaConversion implements DynamicDeployer {
private static final String CMP_PERSISTENCE_UNIT_NAME = "cmp";
@@ -185,7 +187,7 @@
for (Entity entity : entityMappings.getEntity()) {
entitiesByName.put(entity.getName(), entity);
}
-
+
for (org.apache.openejb.jee.EnterpriseBean enterpriseBean :
ejbJar.getEnterpriseBeans()) {
// skip all non-CMP beans
if (!(enterpriseBean instanceof EntityBean) || ((EntityBean)
enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
@@ -459,6 +461,33 @@
allFields.add(cmpField.getFieldName());
}
+ // Add the cmp-field declarations for all the cmp fields that
+ // weren't explicitly declared in the ejb-jar.xml
+ try {
+ Class<?> beanClass = classLoader.loadClass(bean.getEjbClass());
+ for (Method method : beanClass.getMethods()) {
+ if (!Modifier.isAbstract(method.getModifiers())) continue;
+ if (method.getParameterTypes().length != 0) continue;
+ if (method.getReturnType().equals(Void.TYPE)) continue;
+
+ String name = method.getName();
+
+ if (name.startsWith("get")){
+ name = name.substring("get".length(), name.length());
+ } else if (name.startsWith("is")){
+ name = name.substring("is".length(), name.length());
+ } else continue;
+
+ name = Strings.lcfirst(name);
+ if (!allFields.contains(name)){
+ allFields.add(name);
+ bean.addCmpField(name);
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ // class was already loaded in validation phase
+ }
+
//
// id: the primary key
//
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java?rev=662130&view=auto
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
(added)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Strings.java
Sat May 31 19:49:59 2008
@@ -0,0 +1,73 @@
+/**
+ * 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.util;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Strings {
+
+
+ public static String lc(String string){
+ return lowercase(string);
+ }
+
+ public static String lowercase(String string) {
+ if (string == null) return null;
+
+ StringBuilder sb = new StringBuilder(string);
+ for (int i = 0; i < sb.length(); i++) {
+ sb.setCharAt(i, Character.toLowerCase(sb.charAt(i)));
+ }
+ return sb.toString();
+ }
+
+ public static String uc(String string){
+ return uppercase(string);
+ }
+
+ public static String uppercase(String string) {
+ if (string == null) return null;
+
+ StringBuilder sb = new StringBuilder(string);
+ for (int i = 0; i < sb.length(); i++) {
+ sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
+ }
+ return sb.toString();
+ }
+
+ public static String ucfirst(String string){
+ if (string == null) return null;
+
+ StringBuilder sb = new StringBuilder(string);
+ if (sb.length() > 0){
+ sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
+ }
+ return sb.toString();
+ }
+
+ public static String lcfirst(String string){
+ if (string == null) return null;
+
+ StringBuilder sb = new StringBuilder(string);
+ if (sb.length() > 0){
+ sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
+ }
+ return sb.toString();
+ }
+
+}
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/CmpField.java
Sat May 31 19:49:59 2008
@@ -51,6 +51,13 @@
@XmlID
protected String id;
+ public CmpField() {
+ }
+
+ public CmpField(String fieldName) {
+ this.fieldName = fieldName;
+ }
+
public List<Text> getDescription() {
if (description == null) {
description = new ArrayList<Text>();
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java?rev=662130&r1=662129&r2=662130&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EntityBean.java
Sat May 31 19:49:59 2008
@@ -406,6 +406,16 @@
return this.cmpField;
}
+ public void addCmpField(String fieldName) {
+ if (fieldName == null) return;
+
+ for (CmpField field : cmpField) {
+ if (fieldName.equals(field.getFieldName())) return;
+ }
+
+ cmpField.add(new CmpField(fieldName));
+ }
+
public String getPrimkeyField() {
return primkeyField;
}