Author: dblevins
Date: Thu Apr 19 20:42:11 2007
New Revision: 530626
URL: http://svn.apache.org/viewvc?view=rev&rev=530626
Log:
Support for one proxy per business interface. more to come.
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.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/ivm/EjbHomeProxyHandler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java
incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
Thu Apr 19 20:42:11 2007
@@ -20,6 +20,7 @@
public String referenceName;
public String homeType;
+ public String localType;
public String ejbDeploymentId;
public ReferenceLocationInfo location;
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
Thu Apr 19 20:42:11 2007
@@ -143,7 +143,10 @@
if (homeInterface != null) {
String name = strategy.getName(deployment,
homeInterface, JndiNameStrategy.Interface.REMOTE_HOME);
bindings.add(name);
- context.bind("openejb/ejb/" + name, new
ObjectReference(deployment.getEJBHome()));
+ ObjectReference ref = new
ObjectReference(deployment.getEJBHome());
+ context.bind("openejb/ejb/" + name, ref);
+ name = deployment.getDeploymentID() + "/" +
deployment.getRemoteInterface().getName();
+ context.bind("openejb/Deployment/" + name, ref);
}
} catch (NamingException e) {
throw new RuntimeException("Unable to bind home
interface for deployment " + id, e);
@@ -154,7 +157,9 @@
if (localHomeInterface != null) {
String name = strategy.getName(deployment,
localHomeInterface, JndiNameStrategy.Interface.LOCAL_HOME);
bindings.add(name);
- context.bind("openejb/ejb/" + name, new
ObjectReference(deployment.getEJBLocalHome()));
+ ObjectReference ref = new
ObjectReference(deployment.getEJBLocalHome());
+ context.bind("openejb/ejb/" + name, ref);
+ context.bind("openejb/Deployment/" +
deployment.getDeploymentID() + "/" +
deployment.getLocalInterface().getName(), ref);
}
} catch (NamingException e) {
throw new RuntimeException("Unable to bind local
interface for deployment " + id, e);
@@ -167,6 +172,11 @@
DeploymentInfo.BusinessLocalHome businessLocalHome
= deployment.getBusinessLocalHome();
bindings.add(name);
context.bind("openejb/ejb/" + name, new
BusinessLocalReference(businessLocalHome));
+
+ for (Class interfce :
deployment.getBusinessLocalInterfaces()) {
+ DeploymentInfo.BusinessLocalHome home =
deployment.getBusinessLocalHome(asList(interfce));
+ context.bind("openejb/Deployment/" +
deployment.getDeploymentID() + "/" + interfce.getName(), new
BusinessLocalReference(home));
+ }
}
} catch (NamingException e) {
throw new RuntimeException("Unable to bind business
local interface for deployment " + id, e);
@@ -178,7 +188,13 @@
String name = strategy.getName(deployment,
businessRemoteInterface, JndiNameStrategy.Interface.BUSINESS_REMOTE);
DeploymentInfo.BusinessRemoteHome
businessRemoteHome = deployment.getBusinessRemoteHome();
bindings.add(name);
- context.bind("openejb/ejb/" + name, new
BusinessRemoteReference(businessRemoteHome));
+ BusinessRemoteReference ref = new
BusinessRemoteReference(businessRemoteHome);
+ context.bind("openejb/ejb/" + name, ref);
+
+ for (Class interfce :
deployment.getBusinessRemoteInterfaces()) {
+ DeploymentInfo.BusinessRemoteHome home =
deployment.getBusinessRemoteHome(asList(interfce));
+ context.bind("openejb/Deployment/" +
deployment.getDeploymentID() + "/" + interfce.getName(), new
BusinessRemoteReference(home));
+ }
}
} catch (NamingException e) {
throw new RuntimeException("Unable to bind business
remote deployment in jndi.", e);
@@ -204,6 +220,12 @@
} catch (NamingException e) {
throw new RuntimeException("Unable to bind mdb
destination in jndi.", e);
}
+ }
+
+ private static List<Class> asList(Class interfce) {
+ List<Class> list = new ArrayList<Class>();
+ list.add(interfce);
+ return list;
}
protected static final class Bindings {
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
Thu Apr 19 20:42:11 2007
@@ -183,22 +183,11 @@
if (referenceInfo.location != null) {
reference =
buildReferenceLocation(referenceInfo.location);
} else {
- // TODO: Before JndiNameStrategy can be used, this
assumption has to be updated
- if (referenceInfo.homeType == null){
- String jndiName = "java:openejb/ejb/" +
referenceInfo.ejbDeploymentId + "BusinessRemote";
- if (useCrossClassLoaderRef &&
referenceInfo.externalReference) {
- reference = new
CrossClassLoaderJndiReference(jndiName);
- } else {
- reference = new
IntraVmJndiReference(jndiName);
- }
+ String jndiName = "java:openejb/Deployment/" +
referenceInfo.ejbDeploymentId + "/" + referenceInfo.remoteType;
+ if (useCrossClassLoaderRef &&
referenceInfo.externalReference) {
+ reference = new
CrossClassLoaderJndiReference(jndiName);
} else {
- // TODO: Before JndiNameStrategy can be used,
this assumption has to be updated
- String jndiName = "java:openejb/ejb/" +
referenceInfo.ejbDeploymentId;
- if (useCrossClassLoaderRef &&
referenceInfo.externalReference) {
- reference = new
CrossClassLoaderJndiReference(jndiName);
- } else {
- reference = new
IntraVmJndiReference(jndiName);
- }
+ reference = new IntraVmJndiReference(jndiName);
}
}
bindings.put(normalize(referenceInfo.referenceName),
reference);
@@ -210,12 +199,8 @@
if (referenceInfo.location != null) {
reference =
buildReferenceLocation(referenceInfo.location);
- } else if (referenceInfo.homeType == null){
- // TODO: Before JndiNameStrategy can be used, this
assumption has to be updated
- String jndiName = "java:openejb/ejb/" +
referenceInfo.ejbDeploymentId + "BusinessLocal";
- reference = new IntraVmJndiReference(jndiName);
} else {
- String jndiName = "java:openejb/ejb/" +
referenceInfo.ejbDeploymentId + "Local";
+ String jndiName = "java:openejb/Deployment/" +
referenceInfo.ejbDeploymentId + "/" + referenceInfo.localType;
reference = new IntraVmJndiReference(jndiName);
}
bindings.put(normalize(referenceInfo.referenceName),
reference);
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
Thu Apr 19 20:42:11 2007
@@ -361,6 +361,7 @@
EjbLocalReferenceInfo info = new EjbLocalReferenceInfo();
info.homeType = ejb.getLocalHome();
+ info.localType = ejb.getLocal();
info.referenceName = ejb.getEjbRefName();
// assign location to a global jndi name
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=530626&r1=530625&r2=530626
==============================================================================
---
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
Thu Apr 19 20:42:11 2007
@@ -506,7 +506,7 @@
}
}
- return (BusinessLocalHome)
EjbHomeProxyHandler.createHomeProxy(this,
InterfaceType.BUSINESS_LOCAL_HOME);
+ return (BusinessLocalHome)
EjbHomeProxyHandler.createHomeProxy(this,
InterfaceType.BUSINESS_LOCAL_HOME, interfaces);
}
public BusinessRemoteHome getBusinessRemoteHome() {
@@ -526,7 +526,7 @@
}
}
- return (BusinessRemoteHome)
EjbHomeProxyHandler.createHomeProxy(this,
InterfaceType.BUSINESS_REMOTE_HOME);
+ return (BusinessRemoteHome)
EjbHomeProxyHandler.createHomeProxy(this,
InterfaceType.BUSINESS_REMOTE_HOME, interfaces);
}
public String getMessageDestination() {
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
Thu Apr 19 20:42:11 2007
@@ -97,7 +97,7 @@
return createHomeProxy(deploymentInfo, interfaceType, null);
}
- public static Object createHomeProxy(DeploymentInfo
deploymentInfo, InterfaceType interfaceType, ArrayList<Class>
objectInterfaces) {
+ public static Object createHomeProxy(DeploymentInfo
deploymentInfo, InterfaceType interfaceType, List<Class>
objectInterfaces) {
if (!interfaceType.isHome()) throw new
IllegalArgumentException("InterfaceType is not a Home type: " +
interfaceType);
try {
@@ -105,7 +105,8 @@
List<Class> proxyInterfaces = new ArrayList<Class>(2);
-
proxyInterfaces.add(deploymentInfo.getInterface(interfaceType));
+ Class homeInterface =
deploymentInfo.getInterface(interfaceType);
+ proxyInterfaces.add(homeInterface);
proxyInterfaces.add(IntraVmProxy.class);
return
ProxyManager.newProxyInstance(proxyInterfaces.toArray(new
Class[]{}), handler);
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=530626&r1=530625&r2=530626
==============================================================================
---
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
Thu Apr 19 20:42:11 2007
@@ -39,6 +39,7 @@
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.ProxyInfo;
import org.apache.openejb.RpcContainer;
+import org.apache.openejb.InvalidateReferenceException;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
@@ -315,6 +316,8 @@
InterceptorStack interceptorStack = new
InterceptorStack(instance.bean, runMethod, Operation.REMOVE,
interceptors, instance.interceptors);
_invoke(callMethod, interceptorStack, args,
instance, callContext);
+ } catch(InvalidateReferenceException e){
+ throw e;
} catch(ApplicationException e){
retain = deploymentInfo.retainIfExeption(runMethod);
throw e;
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java
(original)
+++
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java
Thu Apr 19 20:42:11 2007
@@ -54,7 +54,10 @@
public void handleSystemException(Throwable sysException,
Object instance, TransactionContext context) throws
ApplicationException, SystemException {
try {
policy.handleSystemException(sysException, instance,
context);
+ } catch (InvalidateReferenceException e) {
+ throw e;
} catch (ApplicationException e) {
+ // DMB: Not sure we want this here
throw new InvalidateReferenceException(e.getRootCause());
}
}
Modified:
incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL:
http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?view=diff&rev=530626&r1=530625&r2=530626
==============================================================================
---
incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
(original)
+++
incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
Thu Apr 19 20:42:11 2007
@@ -162,7 +162,7 @@
deployment.getPrimaryKeyClass(),
deployment.getComponentType().toString(),
deploymentID,
- -1, deployment.getBusinessRemoteInterfaces());
+ -1, proxyInfo.getInterfaces());
Object[] data = {metaData, proxyInfo.getPrimaryKey()};
res.setResult(data);
break;
@@ -172,11 +172,11 @@
if (property.equalsIgnoreCase("remotable")) {
res.setResponseCode(ResponseCodes.JNDI_BUSINESS_OBJECT);
EJBMetaDataImpl metaData = new
EJBMetaDataImpl(null,
- deployment.getBusinessLocalInterface(),
+ null,
deployment.getPrimaryKeyClass(),
deployment.getComponentType().toString(),
deploymentID,
- -1, null);
+ -1, proxyInfo.getInterfaces());
Object[] data = {metaData,
proxyInfo.getPrimaryKey()};
res.setResult(data);
} else {