gdamour 2005/12/21 09:21:54
Modified: modules/core/src/java/org/openejb/server/ejbd
ClientObjectFactory.java EjbRequestHandler.java
Log:
GERONIMO-1397 Clustering of SFSB
First step of many others to add the clustering of SFSB.
This check-in adds the following features:
* definition of an EJBClusterManager, which abstracts an EJB Cluster node;
* this EJB cluster node is a standard GBean (the default or
WADI implementation is DefaultEJBClusterManager);
* in an openejb-jar.xml DD, a SFSB can declare a reference to this node via
the ejb-cluster-reference element;
* when the SFSB container is started, the EJB cluster node notifies
the cluster that it is running a specific SFSB container;
* when a clustered SFSB InstanceContext is created, an array of nodes running
the container of this SFSB is associated to the InstanceContext. Note that
this array of nodes is updated upon start-up of a clustered SFSB container or
upon node failure;
* this array of nodes capable of running the created SFSB is propagated to
clients. Actually, this array is propagated at each EJB invocation.
Revision Changes Path
1.8 +7 -7
openejb/modules/core/src/java/org/openejb/server/ejbd/ClientObjectFactory.java
Index: ClientObjectFactory.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/ejbd/ClientObjectFactory.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ClientObjectFactory.java 8 Dec 2005 04:43:40 -0000 1.7
+++ ClientObjectFactory.java 21 Dec 2005 14:21:53 -0000 1.8
@@ -84,11 +84,11 @@
IP = System.getProperty("openejb.server.ip", "127.0.0.1");
}
- protected ServerMetaData sMetaData;
+ protected ServerMetaData[] servers;
public ClientObjectFactory(ContainerIndex containerIndex) throws
Exception {
this.containerIndex = containerIndex;
- this.sMetaData = new ServerMetaData(ClientObjectFactory.IP,
ClientObjectFactory.PORT);
+ servers = new ServerMetaData[] {new ServerMetaData("BOOT",
ClientObjectFactory.IP, ClientObjectFactory.PORT)};
}
public javax.ejb.EJBMetaData getEJBMetaData(ProxyInfo info) {
@@ -197,7 +197,7 @@
idCode);
Object primKey = info.getPrimaryKey();
- EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData,sMetaData,primKey);
+ EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData,servers,primKey);
return new EJBObjectHandle( hanlder.createEJBObjectProxy() );
}
@@ -223,7 +223,7 @@
info.getContainerID(),
idCode);
- EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData,sMetaData);
+ EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData,servers);
return new EJBHomeHandle( hanlder.createEJBHomeProxy() );
}
@@ -250,7 +250,7 @@
idCode);
Object primKey = info.getPrimaryKey();
- EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData,sMetaData,primKey);
+ EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData,servers,primKey);
return hanlder.createEJBObjectProxy();
}
@@ -276,7 +276,7 @@
info.getContainerID(),
idCode);
- EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData,sMetaData);
+ EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData,servers);
//EJBHomeProxyHandle handle = new EJBHomeProxyHandle( hanlder );
1.24 +14 -9
openejb/modules/core/src/java/org/openejb/server/ejbd/EjbRequestHandler.java
Index: EjbRequestHandler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/ejbd/EjbRequestHandler.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- EjbRequestHandler.java 20 Oct 2005 22:19:24 -0000 1.23
+++ EjbRequestHandler.java 21 Dec 2005 14:21:53 -0000 1.24
@@ -68,6 +68,7 @@
import org.openejb.client.EJBResponse;
import org.openejb.client.RequestMethods;
import org.openejb.client.ResponseCodes;
+import org.openejb.cluster.server.ClusteredInvocationResult;
import org.openejb.proxy.BaseEJB;
import org.openejb.proxy.ProxyInfo;
@@ -283,7 +284,7 @@
}
- private Object invoke(EJBRequest req) throws Throwable {
+ private Object invoke(EJBRequest req, EJBResponse res) throws Throwable {
CallContext call = CallContext.getCallContext();
EJBContainer container = call.getContainer();
@@ -307,6 +308,10 @@
}
+ if (result instanceof ClusteredInvocationResult) {
+ ClusteredInvocationResult clusteredResult =
(ClusteredInvocationResult) result;
+ res.setServers(clusteredResult.getServers());
+ }
if (result.isException()) {
throw new
org.openejb.ApplicationException(result.getException());
@@ -322,7 +327,7 @@
protected void doEjbObject_BUSINESS_METHOD(EJBRequest req, EJBResponse
res) throws Throwable {
- Object result = invoke(req);
+ Object result = invoke(req, res);
res.setResponse(EJB_OK, result);
}
@@ -332,14 +337,14 @@
// Home interface methods
protected void doEjbHome_METHOD(EJBRequest req, EJBResponse res) throws
Throwable {
- Object result = invoke(req);
+ Object result = invoke(req, res);
res.setResponse(EJB_OK, result);
}
protected void doEjbHome_CREATE(EJBRequest req, EJBResponse res) throws
Throwable {
- Object result = invoke(req);
+ Object result = invoke(req, res);
if (result instanceof BaseEJB) {
BaseEJB proxy = (BaseEJB) result;
@@ -391,7 +396,7 @@
protected void doEjbHome_FIND(EJBRequest req, EJBResponse res) throws
Throwable {
- Object result = invoke(req);
+ Object result = invoke(req,res);
/* Multiple instances found */
if (result instanceof Collection) {
@@ -472,7 +477,7 @@
private void doEjbObject_REMOVE(EJBRequest req, EJBResponse res) throws
Throwable {
- invoke(req);
+ invoke(req, res);
res.setResponse(EJB_OK, null);
}
@@ -491,13 +496,13 @@
private void doEjbHome_REMOVE_BY_HANDLE(EJBRequest req, EJBResponse res)
throws Throwable {
- invoke(req);
+ invoke(req, res);
res.setResponse(EJB_OK, null);
}
private void doEjbHome_REMOVE_BY_PKEY(EJBRequest req, EJBResponse res)
throws Throwable {
- invoke(req);
+ invoke(req, res);
res.setResponse(EJB_OK, null);
}