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 2008/03/01 20:27:52 UTC
svn commit: r632648 - in /openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/core/cmp/
container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/
container/openejb-core/src/main/java/org/apache/openejb/core/cmp/...
Author: dain
Date: Sat Mar 1 11:27:51 2008
New Revision: 632648
URL: http://svn.apache.org/viewvc?rev=632648&view=rev
Log:
OPENEJB-756 Allow CMP2 ejbSelect returning void for UPDATE and DELETE queries
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/EjbSelect.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmpBean.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpBean.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpHome.java
openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp/CmpAllowedOperationsTests.java
openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp2/Cmp2EjbHomeTests.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java Sat Mar 1 11:27:51 2008
@@ -114,7 +114,7 @@
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) classLoader = getClass().getClassLoader();
- CmpEngineFactory factory = null;
+ CmpEngineFactory factory;
try {
Class<?> cmpEngineFactoryClass = classLoader.loadClass(cmpEngineFactory);
factory = (CmpEngineFactory) cmpEngineFactoryClass.newInstance();
@@ -540,7 +540,16 @@
Method runMethod = deploymentInfo.getMatchingBeanMethod(callMethod);
- returnValue = runMethod.invoke(bean, args);
+ try {
+ returnValue = runMethod.invoke(bean, args);
+ } catch (IllegalArgumentException e) {
+ System.out.println("********************************************************");
+ System.out.println("callMethod = " + callMethod);
+ System.out.println("runMethod = " + runMethod);
+ System.out.println("bean = " + bean.getClass().getName());
+
+ throw e;
+ }
} finally {
unsetEntityContext(bean);
}
@@ -801,6 +810,15 @@
} catch (RuntimeException e) {
throw new EJBException(e);
}
+ }
+
+ public int update(DeploymentInfo di, String methodSignature, Object... args) throws FinderException {
+ CoreDeploymentInfo deploymentInfo = (CoreDeploymentInfo) di;
+ String signature = deploymentInfo.getAbstractSchemaName() + "." + methodSignature;
+
+ // exectue the update query
+ int result = cmpEngine.executeUpdateQuery(deploymentInfo, signature, args);
+ return result;
}
private void removeEJBObject(Method callMethod, ThreadContext callContext) throws OpenEJBException {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngine.java Sat Mar 1 11:27:51 2008
@@ -41,6 +41,8 @@
List<Object> queryBeans(CoreDeploymentInfo deploymentInfo, String signature, Object[] args) throws FinderException;
+ int executeUpdateQuery(CoreDeploymentInfo deploymentInfo, String signature, Object[] args) throws FinderException;
+
void deploy(CoreDeploymentInfo deploymentInfo) throws OpenEJBException;
void undeploy(CoreDeploymentInfo deploymentInfo) throws OpenEJBException;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java Sat Mar 1 11:27:51 2008
@@ -696,11 +696,16 @@
EJB_SELECT_EXECUTE.getName(),
Type.getMethodDescriptor(EJB_SELECT_EXECUTE));
- // convert return type
- Convert.fromObjectTo(mv, selectMethod.getReturnType());
-
- // return
- mv.visitInsn(Type.getReturnType(selectMethod).getOpcode(IRETURN));
+ if (!Void.TYPE.equals(selectMethod.getReturnType())) {
+ // convert return type
+ Convert.fromObjectTo(mv, selectMethod.getReturnType());
+
+ // return value;
+ mv.visitInsn(Type.getReturnType(selectMethod).getOpcode(IRETURN));
+ } else {
+ // return;
+ mv.visitInsn(RETURN);
+ }
// close method
mv.visitMaxs(0, 0);
@@ -775,6 +780,7 @@
mv.visitTypeInsn(CHECKCAST, Type.getInternalName(to));
} else {
Convert conversion = getConversion(to);
+ if (conversion == null) throw new NullPointerException("unsupported conversion for EJB select return type " + to.getName());
conversion.objectToPrimitive(mv);
}
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/EjbSelect.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/EjbSelect.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/EjbSelect.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/EjbSelect.java Sat Mar 1 11:27:51 2008
@@ -34,6 +34,13 @@
throw new FinderException("Deployment is not connected to a CmpContainer " + deploymentInfo.getDeploymentID());
}
CmpContainer cmpContainer = (CmpContainer) container;
+
+ // if the return type is void, assume we have an update query
+ if ("void".equals(returnType)) {
+ int result = cmpContainer.update(deploymentInfo, methodSignature, args);
+ return result;
+ }
+
Object result = cmpContainer.select(deploymentInfo, methodSignature, returnType, args);
if (result instanceof Number) {
Number number = (Number) result;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java Sat Mar 1 11:27:51 2008
@@ -237,7 +237,7 @@
throw new FinderException("No query defined for method " + fullName);
}
}
- return executeQuery(query, args);
+ return executeSelectQuery(query, args);
}
public List<Object> queryBeans(CoreDeploymentInfo deploymentInfo, String signature, Object[] args) throws FinderException {
@@ -254,10 +254,10 @@
throw new FinderException("No query defined for method " + signature);
}
}
- return executeQuery(query, args);
+ return executeSelectQuery(query, args);
}
- private List<Object> executeQuery(Query query, Object[] args) {
+ private List<Object> executeSelectQuery(Query query, Object[] args) {
// process args
if (args == null) {
args = NO_ARGS;
@@ -287,6 +287,41 @@
}
//noinspection unchecked
return results;
+ }
+
+ public int executeUpdateQuery(CoreDeploymentInfo deploymentInfo, String signature, Object[] args) throws FinderException {
+ EntityManager entityManager = getEntityManager(deploymentInfo);
+
+ Query query = createNamedQuery(entityManager, signature);
+ if (query == null) {
+ int parenIndex = signature.indexOf('(');
+ if (parenIndex > 0) {
+ String shortName = signature.substring(0, parenIndex);
+ query = createNamedQuery(entityManager, shortName);
+ }
+ if (query == null) {
+ throw new FinderException("No query defined for method " + signature);
+ }
+ }
+
+ // process args
+ if (args == null) {
+ args = NO_ARGS;
+ }
+ for (int i = 0; i < args.length; i++) {
+ Object arg = args[i];
+ // ejb proxies need to be swapped out for real instance classes
+ if (arg instanceof EJBObject) {
+ arg = Cmp2Util.getEntityBean(((EJBObject) arg));
+ }
+ if (arg instanceof EJBLocalObject) {
+ arg = Cmp2Util.getEntityBean(((EJBLocalObject) arg));
+ }
+ query.setParameter(i + 1, arg);
+ }
+
+ int result = query.executeUpdate();
+ return result;
}
private Query createNamedQuery(EntityManager entityManager, String name) {
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmp2Bean.java Sat Mar 1 11:27:51 2008
@@ -65,6 +65,9 @@
return x + y;
}
+ public void ejbHomeVoidSelect() {
+ }
+
/**
* Maps to BasicCmpHome.create
*/
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmpBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmpBean.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmpBean.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/AllowedOperationsCmpBean.java Sat Mar 1 11:27:51 2008
@@ -66,6 +66,9 @@
return x+y;
}
+ public void ejbHomeVoidSelect() {
+ }
+
/**
* Maps to BasicCmpHome.create
*/
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmp2Bean.java Sat Mar 1 11:27:51 2008
@@ -22,6 +22,7 @@
import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
+import javax.ejb.FinderException;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.Map;
@@ -44,7 +45,8 @@
public abstract void setLastName(String lastName);
-
+ public abstract void ejbSelectRemoveById(Integer someId) throws FinderException;
+
//=============================
// Home interface methods
//
@@ -57,6 +59,10 @@
public int ejbHomeSum(int x, int y) {
testAllowedOperations("ejbHome");
return x + y;
+ }
+
+ public void ejbHomeVoidSelect() throws FinderException {
+ ejbSelectRemoveById(999999);
}
/**
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpBean.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpBean.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpBean.java Sat Mar 1 11:27:51 2008
@@ -61,6 +61,9 @@
return x+y;
}
+ public void ejbHomeVoidSelect() {
+ }
+
/**
* Maps to BasicCmpHome.create
*
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpHome.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpHome.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpHome.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/entity/cmp/BasicCmpHome.java Sat Mar 1 11:27:51 2008
@@ -36,4 +36,6 @@
Collection findByLastName(String lastName) throws FinderException, RemoteException;
int sum(int x, int y) throws RemoteException;
+
+ void voidSelect() throws FinderException, RemoteException;
}
Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/resources/META-INF/ejb-jar.xml Sat Mar 1 11:27:51 2008
@@ -176,6 +176,15 @@
<role-name>TheMan</role-name>
<role-link>Executive</role-link>
</security-role-ref>
+ <query>
+ <query-method>
+ <method-name>ejbSelectRemoveById</method-name>
+ <method-params>
+ <method-param>java.lang.Integer</method-param>
+ </method-params>
+ </query-method>
+ <ejb-ql>DELETE FROM BasicCmp2Bean o WHERE o.id = ?1</ejb-ql>
+ </query>
</entity>
<entity>
Modified: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp/CmpAllowedOperationsTests.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp/CmpAllowedOperationsTests.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp/CmpAllowedOperationsTests.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp/CmpAllowedOperationsTests.java Sat Mar 1 11:27:51 2008
@@ -180,7 +180,9 @@
ejbObject.remove();
ejbObject = ejbHome.createObject("Fourth Bean");
- ejbHome.findEmptyCollection();
+ ejbHome.findEmptyCollection();
+
+ ejbHome.voidSelect();
}
//=====================================
Modified: openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp2/Cmp2EjbHomeTests.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp2/Cmp2EjbHomeTests.java?rev=632648&r1=632647&r2=632648&view=diff
==============================================================================
--- openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp2/Cmp2EjbHomeTests.java (original)
+++ openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/entity/cmp2/Cmp2EjbHomeTests.java Sat Mar 1 11:27:51 2008
@@ -122,6 +122,15 @@
fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
}
+
+ public void test06_voidEjbSelect() {
+ try {
+ ejbHome.voidSelect();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ fail("Received Exception " + e.getClass() + " : " + e.getMessage());
+ }
+ }
//
// Test ejb home methods
//===============================