User: slaboure
  Date: 01/11/09 14:51:38

  Modified:    src/main/org/jboss/ejb/plugins/jrmp13/server
                        JRMPContainerInvokerHA.java
  Log:
  Added SFSB support for clustering.
  
  Revision  Changes    Path
  1.9       +76 -7     
jbossmx/src/main/org/jboss/ejb/plugins/jrmp13/server/JRMPContainerInvokerHA.java
  
  Index: JRMPContainerInvokerHA.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jbossmx/src/main/org/jboss/ejb/plugins/jrmp13/server/JRMPContainerInvokerHA.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JRMPContainerInvokerHA.java       2001/11/01 04:13:57     1.8
  +++ JRMPContainerInvokerHA.java       2001/11/09 22:51:38     1.9
  @@ -29,6 +29,7 @@
   import org.jboss.ejb.plugins.jrmp.interfaces.ContainerRemote;
   import org.jboss.ejb.plugins.jrmp13.interfaces.HomeProxyHA;
   import org.jboss.ejb.plugins.jrmp13.interfaces.StatelessSessionProxyHA;
  +import org.jboss.ejb.plugins.jrmp13.interfaces.StatefulSessionProxyHA;
   import org.jboss.ejb.plugins.jrmp13.interfaces.EntityProxyHA;
   import org.jboss.ejb.plugins.jrmp13.interfaces.StatefulSessionProxy;
   import org.jboss.ejb.plugins.jrmp13.interfaces.EntityProxy;
  @@ -40,17 +41,27 @@
   import org.jboss.ha.framework.interfaces.RoundRobin;
   import org.jboss.ha.framework.interfaces.FirstAvailable;
   import org.jboss.ha.framework.interfaces.LoadBalancePolicy;
  +import 
org.jboss.ha.hasessionstate.interfaces.HASessionState.HASessionStateTopologyListener;
  +import org.jboss.ha.hasessionstate.interfaces.HASessionState;
   
   /**
    *  HA JRMP Container delegate
    *
    *  @see <related>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Bill Burke</a>
  - *  @version $Revision: 1.8 $
  + *  @author <a href="mailto:[EMAIL PROTECTED]";>Sacha Labourey</a>
  + *  @version $Revision: 1.9 $
  + *
  + *   <p><b>Revisions:</b>
  + *
  + *   <p><b>20010911 Sacha Labourey:</b>
  + *   <ul>
  + *   <li> Added support for SFSB
  + *   </ul>
    */
   public final class JRMPContainerInvokerHA
  -   implements ContainerInvoker
  -{
  +   implements ContainerInvoker, HASessionStateTopologyListener
  +{   
      static Logger log = Logger.create(JRMPContainerInvoker.class);
      EJBHome home;
      EJBObject statelessObject;
  @@ -60,12 +71,16 @@
   
      HomeProxyHA homeProxy;
      StatelessSessionProxyHA statelessProxy;
  -   protected HARMIServerImpl harmi;
  +   protected HARMIServerImpl harmi;   
      protected HAPartition partition;
      protected String partitionName;
      protected Class homeLoadBalancePolicyClass;
      protected Class beanLoadBalancePolicyClass;
  -
  +   
  +   protected HARMIServerImpl harmiSF;
  +   protected HAPartition partitionSF;
  +   protected String haSessionStateName = 
org.jboss.metadata.ClusterConfigMetaData.DEFAULT_SESSION_STATE_NAME;
  +   
      public 
JRMPContainerInvokerHA(org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvokerHA ci)
      {
         this.ci = ci;
  @@ -81,12 +96,14 @@
         
         ClusterConfigMetaData config = 
container.getBeanMetaData().getClusterConfigMetaData();
         String homeLoadBalancePolicy = null;
  -      String beanLoadBalancePolicy = null;
  +      String beanLoadBalancePolicy = null;      
  +      
         if (config != null)
         {
            this.partitionName = config.getPartitionName();
            homeLoadBalancePolicy = config.getHomeLoadBalancePolicy();
            beanLoadBalancePolicy = config.getBeanLoadBalancePolicy();
  +         haSessionStateName = config.getHaSessionStateName ();
         }
         else
         {
  @@ -177,6 +194,24 @@
               ContainerRemote beanStub = 
(ContainerRemote)harmi.createHAStub((LoadBalancePolicy)beanLoadBalancePolicyClass.newInstance());
               statelessProxy.setHAProxy(beanStub);
            }
  +         
  +         // SFSB work
  +         //
  +         if (!(container.getBeanMetaData() instanceof EntityMetaData) &&
  +             ((SessionMetaData)container.getBeanMetaData()).isStateful())
  +         {
  +            // first get the HASessionState we work with
  +            //
  +            HASessionState hass = (HASessionState) new 
InitialContext().lookup(this.haSessionStateName);
  +            hass.subscribe (this);
  +            this.partitionSF = hass.getCurrentHAPartition ();
  +            
  +            // the partition may not yet exists
  +            //
  +            if (this.partitionSF != null)
  +               this.harmiSF = new HARMIServerImpl (this.partitionSF, 
ci.getJndiName(), ContainerRemote.class, ci);
  +         }
  +
         }
         catch (Exception ex)
         {
  @@ -223,9 +258,42 @@
         return statelessObject;
      }
   
  +   // For SFSB only
  +   //
  +   public void newSessionStateTopology (HAPartition haSubPartition, boolean 
partitionHasChanged)
  +   {
  +      if (partitionHasChanged)
  +         try
  +         {
  +            if (this.partitionSF == null)
  +               this.harmiSF = new HARMIServerImpl (this.partitionSF, 
ci.getJndiName(), ContainerRemote.class, ci);
  +            else
  +               this.harmiSF.updateHAPartition (haSubPartition);
  +         }
  +         catch (Exception e)
  +         {
  +            e.printStackTrace ();
  +         }
  +   }
  +   
      public EJBObject getStatefulSessionEJBObject(Object id)
      {
  -      throw new RuntimeException("NOT IMPLEMENTED");
  +      ContainerRemote stub = null;
  +      try
  +      {
  +         if (harmiSF == null)
  +            log.info ("Not yet able to create EJBObject for SFSB: HAPartition not 
yet ready");
  +         else
  +            stub = 
(ContainerRemote)harmiSF.createHAStub((LoadBalancePolicy)beanLoadBalancePolicyClass.newInstance());
  +      }
  +      catch (Exception ie)
  +      {
  +         log.error("failed to create load balance class", ie);
  +      }
  +      return 
(EJBObject)Proxy.newProxyInstance(((ContainerInvokerContainer)container).getRemoteClass().getClassLoader(),
  +                  new Class[] { 
((ContainerInvokerContainer)container).getRemoteClass() },
  +                  new StatefulSessionProxyHA(ci.getJndiName(), stub, id, 
ci.isOptimized()));
  +      
      }
   
      public EJBObject getEntityEJBObject(Object id)
  @@ -256,5 +324,6 @@
         }
         return list;
      }
  +   
   }
   
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to