User: patriot1burke
  Date: 01/10/31 20:13:57

  Modified:    src/main/org/jboss/ejb/plugins/jrmp13/server
                        JRMPContainerInvokerHA.java
  Log:
  Added configurable load-balance policies for home and beans
  
  Revision  Changes    Path
  1.8       +66 -6     
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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JRMPContainerInvokerHA.java       2001/10/16 22:19:18     1.7
  +++ JRMPContainerInvokerHA.java       2001/11/01 04:13:57     1.8
  @@ -39,13 +39,14 @@
   import org.jboss.ha.framework.interfaces.HAPartition;
   import org.jboss.ha.framework.interfaces.RoundRobin;
   import org.jboss.ha.framework.interfaces.FirstAvailable;
  +import org.jboss.ha.framework.interfaces.LoadBalancePolicy;
   
   /**
    *  HA JRMP Container delegate
    *
    *  @see <related>
    *  @author <a href="mailto:[EMAIL PROTECTED]";>Bill Burke</a>
  - *  @version $Revision: 1.7 $
  + *  @version $Revision: 1.8 $
    */
   public final class JRMPContainerInvokerHA
      implements ContainerInvoker
  @@ -62,7 +63,8 @@
      protected HARMIServerImpl harmi;
      protected HAPartition partition;
      protected String partitionName;
  -   
  +   protected Class homeLoadBalancePolicyClass;
  +   protected Class beanLoadBalancePolicyClass;
   
      public 
JRMPContainerInvokerHA(org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvokerHA ci)
      {
  @@ -78,14 +80,61 @@
      {
         
         ClusterConfigMetaData config = 
container.getBeanMetaData().getClusterConfigMetaData();
  +      String homeLoadBalancePolicy = null;
  +      String beanLoadBalancePolicy = null;
         if (config != null)
         {
            this.partitionName = config.getPartitionName();
  +         homeLoadBalancePolicy = config.getHomeLoadBalancePolicy();
  +         beanLoadBalancePolicy = config.getBeanLoadBalancePolicy();
         }
         else
         {
            this.partitionName = ClusterConfigMetaData.DEFAULT_PARTITION;
         }
  +      ClassLoader cl = Thread.currentThread().getContextClassLoader();
  +      if (homeLoadBalancePolicy == null)
  +      {
  +         log.info("using default RoundRobin for home load balancing.");
  +         homeLoadBalancePolicyClass = 
org.jboss.ha.framework.interfaces.RoundRobin.class;
  +      }
  +      else
  +      {
  +         log.info("using " + homeLoadBalancePolicy + " for home load balancing");
  +         try
  +         {
  +            homeLoadBalancePolicyClass = cl.loadClass(homeLoadBalancePolicy);
  +         }
  +         catch (Exception ex)
  +         {
  +            log.error("failed to load class", ex);
  +         }
  +      }
  +      if (beanLoadBalancePolicy != null)
  +      {
  +         log.info("using " + beanLoadBalancePolicy + " for bean load balancing");
  +         try
  +         {
  +            beanLoadBalancePolicyClass = cl.loadClass(beanLoadBalancePolicy);
  +         }
  +         catch (Exception ex)
  +         {
  +            log.error("failed to load class", ex);
  +         }
  +      }
  +      else if ((container.getBeanMetaData() instanceof EntityMetaData)
  +               || ((SessionMetaData)container.getBeanMetaData()).isStateful())
  +         
  +      {
  +         log.info("using default FirstAvailable for bean load balancing.");
  +         beanLoadBalancePolicyClass = 
org.jboss.ha.framework.interfaces.FirstAvailable.class;
  +      }
  +      else
  +      {
  +         log.info("using default RoundRobin for bean load balancing.");
  +         beanLoadBalancePolicyClass = 
org.jboss.ha.framework.interfaces.RoundRobin.class;
  +      }
  +         
         // Create EJBHome object
         // We add the Handle methods to the Home
         Class handleClass;
  @@ -121,10 +170,13 @@
         {
            this.partition = (HAPartition)new InitialContext().lookup("/HAPartition/" 
+ partitionName);
            this.harmi = new HARMIServerImpl(partition, ci.getJndiName(), 
ContainerRemote.class, ci);
  -         ContainerRemote stub = (ContainerRemote)harmi.createHAStub(new 
RoundRobin());
  -         homeProxy.setHAProxy(stub);
  +         ContainerRemote homeStub = 
(ContainerRemote)harmi.createHAStub((LoadBalancePolicy)homeLoadBalancePolicyClass.newInstance());
  +         homeProxy.setHAProxy(homeStub);
            if (statelessProxy != null)
  -            statelessProxy.setHAProxy(stub);
  +         {
  +            ContainerRemote beanStub = 
(ContainerRemote)harmi.createHAStub((LoadBalancePolicy)beanLoadBalancePolicyClass.newInstance());
  +            statelessProxy.setHAProxy(beanStub);
  +         }
         }
         catch (Exception ex)
         {
  @@ -178,7 +230,15 @@
   
      public EJBObject getEntityEJBObject(Object id)
      {
  -      ContainerRemote stub = (ContainerRemote)harmi.createHAStub(new 
FirstAvailable());
  +      ContainerRemote stub = null;
  +      try
  +      {
  +         stub = 
(ContainerRemote)harmi.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 EntityProxyHA(ci.getJndiName(), stub, id, ci.isOptimized()));
  
  
  

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

Reply via email to