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