30.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 30.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.
Example 30.3. A jboss.xml stateless session configuration for HA-RMI/HTTP
<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>
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.