JBoss.org Community Documentation

11.2.3. The HA HttpInvoker - Clustered RMI/HTTP Transport

The RMI/HTTP layer allows for software load balancing of the invocations in a clustered environment. An HA capable extension of the HTTP invoker has been added that borrows much of its functionality from the HA-RMI/JRMP clustering.

To enable HA-RMI/HTTP you need to configure the invokers for the EJB container. This is done through either a jboss.xml descriptor, or the standardjboss.xml descriptor. Example 11.3, “A jboss.xml stateless session configuration for HA-RMI/HTTP” shows is an example of a stateless session configuration taken from the org.jboss.test.hello testsuite package.

<jboss>
					<enterprise-beans>
					<session>
					<ejb-name>HelloWorldViaClusteredHTTP</ejb-name>
					<jndi-name>helloworld/HelloHA-HTTP</jndi-name>
					<invoker-bindings>
					<invoker>
					<invoker-proxy-binding-name>
					stateless-httpHA-invoker
					</invoker-proxy-binding-name>
					</invoker>
					</invoker-bindings>
					<clustered>true</clustered>
					</session>
					</enterprise-beans>
					<invoker-proxy-bindings>
					<invoker-proxy-binding>
					<name>stateless-httpHA-invoker</name>
					<invoker-mbean>jboss:service=invoker,type=httpHA</invoker-mbean>
					<proxy-factory>org.jboss.proxy.ejb.ProxyFactoryHA</proxy-factory>
					<proxy-factory-config>
					<client-interceptors>
					<home>
					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
					</home>
					<bean>
					<interceptor>
					org.jboss.proxy.ejb.StatelessSessionInterceptor
					</interceptor>
					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
					</bean>
					</client-interceptors>
					</proxy-factory-config>
					</invoker-proxy-binding>
					</invoker-proxy-bindings>
					</jboss>
				

Example 11.3. A jboss.xml stateless session configuration for HA-RMI/HTTP


The stateless-httpHA-invoker invoker-proxy-binding references the jboss:service=invoker,type=httpHA invoker service. This service would be configured as shown below.

<mbean code="org.jboss.invocation.http.server.HttpInvokerHA"
				name="jboss:service=invoker,type=httpHA">
				<!-- Use a URL of the form
				http://<hostname>:8080/invoker/EJBInvokerHAServlet
				where <hostname> is InetAddress.getHostname value on which the server
				is running.
				-->
				<attribute name="InvokerURLPrefix">http://</attribute>
				<attribute name="InvokerURLSuffix">:8080/invoker/EJBInvokerHAServlet</attribute>
				<attribute name="UseHostName">true</attribute>
				</mbean>    
			

The URL used by the invoker proxy is the EJBInvokerHAServlet mapping as deployed on the cluster node. The HttpInvokerHA instances across the cluster form a collection of candidate http URLs that are made available to the client side proxy for failover and/or load balancing.