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);
       }
   
  
  
  

Reply via email to