You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/04/20 11:41:38 UTC
svn commit: r530720 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/config/
container/openejb-core/src/main/java/org/apache/openejb/core/ivm/
container/openejb-core/src/main/java/org/apache/openejb/core/s...
Author: dblevins
Date: Fri Apr 20 02:41:36 2007
New Revision: 530720
URL: http://svn.apache.org/viewvc?view=rev&rev=530720
Log:
more compliant stateful bean remove-method support
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java
incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Fri Apr 20 02:41:36 2007
@@ -113,6 +113,7 @@
import java.util.Set;
import java.util.TreeSet;
import java.util.Properties;
+import java.util.HashMap;
/**
* @version $Rev$ $Date$
@@ -773,10 +774,21 @@
}
List<Method> removeMethods = classFinder.findAnnotatedMethods(Remove.class);
+ Map<NamedMethod,RemoveMethod> declaredRemoveMethods = new HashMap<NamedMethod,RemoveMethod>();
+ for (RemoveMethod removeMethod : session.getRemoveMethod()) {
+ declaredRemoveMethods.put(removeMethod.getBeanMethod(), removeMethod);
+ }
for (Method method : removeMethods) {
Remove remove = method.getAnnotation(Remove.class);
+ RemoveMethod removeMethod = new RemoveMethod(method, remove.retainIfException());
+
+ RemoveMethod declaredRemoveMethod = declaredRemoveMethods.get(removeMethod.getBeanMethod());
- session.getRemoveMethod().add(new RemoveMethod(method, remove.retainIfException()));
+ if (declaredRemoveMethod == null) {
+ session.getRemoveMethod().add(removeMethod);
+ } else if (!declaredRemoveMethod.isExplicitlySet()){
+ declaredRemoveMethod.setRetainIfException(remove.retainIfException());
+ }
}
}
}
@@ -1101,7 +1113,7 @@
if (refName.equals("")) {
refName = (member == null) ? null : member.getDeclaringClass().getName() + "/" + member.getName();
}
-
+
List<ServiceRef> serviceRefEntries = consumer.getServiceRef();
for (ServiceRef serviceRefEntry : serviceRefEntries) {
if (serviceRefEntry.getName().equals(refName)) {
@@ -1145,7 +1157,7 @@
}
serviceRef.setMappedName(mappedName);
}
-
+
// Set wsdl file
if (serviceRef.getWsdlFile() == null) {
String wsdlLocation = webService.wsdlLocation();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Fri Apr 20 02:41:36 2007
@@ -38,6 +38,7 @@
import javax.ejb.NoSuchObjectLocalException;
import javax.ejb.TransactionRequiredLocalException;
import javax.ejb.TransactionRolledbackLocalException;
+import javax.ejb.Remote;
import javax.transaction.TransactionRequiredException;
import javax.transaction.TransactionRolledbackException;
@@ -137,10 +138,12 @@
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (isInvalidReference) {
- if (isLocal) {
- throw new EJBException("reference is invalid");
- } else {
+ if (interfaceType.isComponent() && interfaceType.isLocal()){
+ throw new NoSuchObjectLocalException("reference is invalid");
+ } else if (interfaceType.isComponent() || java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())) {
throw new NoSuchObjectException("reference is invalid");
+ } else {
+ throw new javax.ejb.NoSuchEJBException("reference is invalid");
}
}
getDeploymentInfo(); // will throw an exception if app has been undeployed.
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Fri Apr 20 02:41:36 2007
@@ -90,8 +90,7 @@
for (Method removeMethod : removeMethods) {
methods.put(removeMethod, MethodType.REMOVE);
- Class businessLocal = deploymentInfo.getBusinessLocalInterface();
- if (businessLocal != null) {
+ for (Class businessLocal : deploymentInfo.getBusinessLocalInterfaces()) {
try {
Method method = businessLocal.getMethod(removeMethod.getName());
methods.put(method, MethodType.REMOVE);
@@ -99,8 +98,7 @@
}
}
- Class businessRemote = deploymentInfo.getBusinessRemoteInterface();
- if (businessRemote != null) {
+ for (Class businessRemote : deploymentInfo.getBusinessRemoteInterfaces()) {
try {
Method method = businessRemote.getMethod(removeMethod.getName());
methods.put(method, MethodType.REMOVE);
@@ -320,7 +318,8 @@
throw e;
} catch(ApplicationException e){
retain = deploymentInfo.retainIfExeption(runMethod);
- throw e;
+ if (retain) return;
+ else throw e;
} finally {
if (retain){
instanceManager.poolInstance(callContext, instance);
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java Fri Apr 20 02:41:36 2007
@@ -62,4 +62,18 @@
this.id = value;
}
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final MethodParams that = (MethodParams) o;
+
+ if (methodParam != null ? !methodParam.equals(that.methodParam) : that.methodParam != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return (methodParam != null ? methodParam.hashCode() : 0);
+ }
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java Fri Apr 20 02:41:36 2007
@@ -94,4 +94,29 @@
this.id = value;
}
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final NamedMethod that = (NamedMethod) o;
+
+ if (methodName != null ? !methodName.equals(that.methodName) : that.methodName != null) return false;
+
+ if (nullOrEmpty(this.methodParams) && nullOrEmpty(that.methodParams)) return true;
+
+ if (methodParams != null ? !methodParams.equals(that.methodParams) : that.methodParams != null) return false;
+
+ return true;
+ }
+
+ private boolean nullOrEmpty(MethodParams methodParams) {
+ return methodParams == null || methodParams.getMethodParam().size() == 0;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (methodName != null ? methodName.hashCode() : 0);
+ result = 29 * result + (methodParams != null ? methodParams.hashCode() : 0);
+ return result;
+ }
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java Fri Apr 20 02:41:36 2007
@@ -40,7 +40,7 @@
@XmlElement(name = "bean-method", required = true)
protected NamedMethod beanMethod;
@XmlElement(name = "retain-if-exception", required = true)
- protected boolean retainIfException;
+ protected Boolean retainIfException;
@XmlAttribute
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@@ -66,8 +66,12 @@
this.beanMethod = value;
}
+ public boolean isExplicitlySet() {
+ return retainIfException != null;
+ }
+
public boolean getRetainIfException() {
- return retainIfException;
+ return retainIfException != null && retainIfException;
}
public void setRetainIfException(boolean value) {
@@ -82,4 +86,18 @@
this.id = value;
}
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final RemoveMethod that = (RemoveMethod) o;
+
+ if (beanMethod != null ? !beanMethod.equals(that.beanMethod) : that.beanMethod != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return (beanMethod != null ? beanMethod.hashCode() : 0);
+ }
}
Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java Fri Apr 20 02:41:36 2007
@@ -87,7 +87,13 @@
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- if (isInvalidReference) throw new NoSuchObjectException("reference is invalid");
+ if (isInvalidReference) {
+ if (remote || java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())){
+ throw new NoSuchObjectException("reference is invalid");
+ } else {
+ throw new NoSuchEJBException("reference is invalid");
+ }
+ }
Object returnObj = null;
returnObj = _invoke(proxy, method, args);
Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java Fri Apr 20 02:41:36 2007
@@ -42,7 +42,7 @@
}
public EJBObject getEJBObject() throws RemoteException {
- return ejbObjectProxy;
+ return (EJBObject) ejbObjectProxy;
}
public void writeExternal(ObjectOutput out) throws IOException {
Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java Fri Apr 20 02:41:36 2007
@@ -21,7 +21,7 @@
import javax.ejb.EJBObject;
-public interface EJBObjectProxy extends Serializable, EJBObject {
+public interface EJBObjectProxy extends Serializable {
public EJBObjectHandler getEJBObjectHandler();
Modified: incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java Fri Apr 20 02:41:36 2007
@@ -154,7 +154,7 @@
EJBObjectHandler hanlder = EJBObjectHandler.createEJBObjectHandler(eMetaData, sMetaData, cMetaData, primKey);
- return hanlder.createEJBObjectProxy();
+ return (javax.ejb.EJBObject) hanlder.createEJBObjectProxy();
}
protected javax.ejb.EJBHome _getEJBHome(CallContext call, ProxyInfo info) {