type=page
status=published
title=RMI-IIOP Load Balancing and Failover
prev=jms.html
~~~~~~

= RMI-IIOP Load Balancing and Failover

[[GSHAG00013]][[fxxqs]]

[[rmi-iiop-load-balancing-and-failover]]
== 11 RMI-IIOP Load Balancing and Failover

This chapter describes using high-availability features for remote EJB
references and JNDI objects over RMI-IIOP in {productName}.

* link:#abdbe[Overview]
* link:#gknqo[`InitialContext` Load Balancing]
* link:#gknpv[Per-Request Load Balancing (PRLB)]

[[abdbe]][[GSHAG00215]][[overview]]

=== Overview

With RMI-IIOP load balancing, IIOP client requests are distributed to
different server instances or name servers. The goal is to spread the
load evenly across the cluster, thus providing scalability. IIOP load
balancing combined with EJB clustering and availability also provides
EJB failover.

The following topics are addressed here:

* link:#abdbf[General Requirements for Configuring Load Balancing]
* link:#gknpk[Load Balancing Models]

[[abdbf]][[GSHAG00313]][[general-requirements-for-configuring-load-balancing]]

==== General Requirements for Configuring Load Balancing

{productName} provides high availability of remote EJB
references and `NameService` objects over RMI-IIOP, provided all the
following apply:

* Your deployment has a cluster of at least two instances.
* Jakarta EE applications are deployed to all instances and clusters that
participate in load balancing.
* RMI-IIOP client applications are enabled for load balancing.

{productName} supports load balancing for Java applications executing
in the Application Client Container (ACC). See link:#abdbd[Enabling
RMI-IIOP Hardware Load Balancing and Failover].


[NOTE]
====
{productName} does not support RMI-IIOP load balancing and failover
over secure sockets layer (SSL).
====


[[gknpk]][[GSHAG00314]][[load-balancing-models]]

==== Load Balancing Models

{productName} supports two general models for load balancing:

link:#gknqo[`InitialContext` Load Balancing]::
  When a client performs a JNDI lookup for an object, the Naming Service
  creates a `InitialContext` (IC) object associated with a particular
  server instance. From then on, all lookup requests made using that IC
  object are sent to the same server instance. `InitialContext` load
  balancing can be configured automatically across an entire cluster.
link:#gknpv[Per-Request Load Balancing (PRLB)]::
  Per Request Load Balancing (PRLB) is a method for load balancing
  stateless EJBs that enables load-balancing for each request to an EJB
  instance. PRLB chooses the first node in a cluster to use on each
  request. PRLB is configured on a per-EJB basis.

[[gknqo]][[GSHAG00216]][[initialcontext-load-balancing]]

=== `InitialContext` Load Balancing

The following topics are addressed here:

* link:#gknpn[`InitialContext` Summary]
* link:#abdbg[`InitialContext` Algorithm]
* link:#abdbd[Enabling RMI-IIOP Hardware Load Balancing and Failover]

[[gknpn]][[GSHAG00315]][[initialcontext-summary]]

==== `InitialContext` Summary

When `InitialContext` load balancing is used, the client calls the
`InitialContext()` method to create a new `InitialContext` (IC) object
that is associated with a particular server instance. JNDI lookups are
then performed on that IC object, and all lookup requests made using
that IC object are sent to the same server instance. All `EJBHome`
objects looked up with that `InitialContext` are hosted on the same
target server. Any bean references obtained henceforth are also created
on the same target host. This effectively provides load balancing, since
all clients randomize the list of live target servers when creating
`InitialContext` objects. If the target server instance goes down, the
lookup or EJB method invocation will failover to another server
instance. All objects derived from same `InitialContext` will failover
to the same server instance.

IIOP load balancing and failover happens transparently. No special steps
are needed during application deployment. IIOP load balancing and
failover for the {productName} supports dynamically reconfigured
clusters. If the {productName} instance on which the application
client is deployed participates in a cluster, the {productName} finds
all currently active IIOP endpoints in the cluster automatically.
Therefore, you are not required to manually update the list of endpoints
if a new instance is added to the cluster or deleted from the cluster.
However, a client should have at least two endpoints specified for
bootstrapping purposes, in case one of the endpoints has failed.

[[abdbg]][[GSHAG00316]][[initialcontext-algorithm]]

==== `InitialContext` Algorithm

{productName} uses a randomization and round-robin algorithm for
RMI-IIOP load balancing and failover.

When an RMI-IIOP client first creates a new `InitialContext` object, the
list of available {productName} IIOP endpoints is randomized for that
client. For that `InitialContext` object, the load balancer directs
lookup requests and other `InitialContext` operations to an endpoint on
the randomized list. If that endpoint is not available then a different
random endpoint in the list is used.

Each time the client subsequently creates a new `InitialContext` object,
the endpoint list is rotated so that a different IIOP endpoint is used
for `InitialContext` operations. The rotation is randomized, so the
rotation is not to the next endpoint in the list, but instead to a
random endpoint in the list.

When you obtain or create beans from references obtained by an
`InitialContext` object, those beans are created on the {productName}
instance serving the IIOP endpoint assigned to the `InitialContext`
object. The references to those beans contain the IIOP endpoint
addresses of all {productName} instances in the cluster.

The primary endpoint is the bean endpoint corresponding to the
`InitialContext` endpoint used to look up or create the bean. The other
IIOP endpoints in the cluster are designated as alternate endpoints. If
the bean's primary endpoint becomes unavailable, further requests on
that bean fail over to one of the alternate endpoints.

You can configure RMI-IIOP load balancing and failover to work with
applications running in the ACC.

[[abdbd]][[GSHAG00317]][[enabling-rmi-iiop-hardware-load-balancing-and-failover]]

==== Enabling RMI-IIOP Hardware Load Balancing and Failover

You can enable RMI-IIOP load balancing and failover for applications
running in the application client container (ACC). Weighted round-robin
load balancing is also supported.

[[abdbi]][[GSHAG00161]][[to-enable-rmi-iiop-hardware-load-balancing-for-the-application-client-container]]

===== To Enable RMI-IIOP Hardware Load Balancing for the Application Client Container

This procedure provides an overview of the steps necessary to enable
RMI-IIOP load balancing and failover with the application client
container (ACC). For additional information on the ACC, see
"link:application-development-guide/java-clients.html#GSDVG00160[Developing Clients Using the ACC]" in {productName} Application Development Guide.

[[GSHAG440]]

Before You Begin

The first five steps in this procedure are only necessary if you are
enabling RMI-IIOP load balancing on a system other than the DAS. This is
common in production environment, but less common in a development
environment. For example, a developer who wants to experiment with a
cluster and load balancing might create two instances on the same system
on which the DAS is running. In such cases, these steps are unnecessary.

1. Go to the install_dir ``/bin`` directory.

2. Run `package-appclient`. +
This utility produces an `appclient.jar` file. For more information on
`package-appclient`, see link:reference-manual/package-appclient.html#GSRFM00264[`package-appclient`(1M)].

3. Copy the `appclient.jar` file to the machine where you want your
client and extract it.

4. Edit the `asenv.conf` or `asenv.bat` path variables to refer to the
correct directory values on that machine.
+
The file is at appclient-install-dir `/config/`.
+
For a list of the path variables to update, see
link:reference-manual/package-appclient.html#GSRFM00264[`package-appclient`(1M)].

5. If required, make the `appclient` script executable.
+
For example, on UNIX use `chmod 700`.

6. [[gevjb]]
Find the IIOP listener port number for at least two instances in the cluster.
+
You specify the IIOP listeners as endpoints in link:#gevkc[Add at least
two `target-server` elements in the `sun-acc.xml` file.].
+
For each instance, obtain the IIOP listener ports as follows:
[arabic]
.. Verify that the instances for which you want to determine the IIOP
listener port numbers are running.
+
[source]
----
asadmin> list-instances
----
A list of instances and their status (running, not running) is displayed.
+
The instances for which you want to display the IIOP listener ports must be running.

.. For each instance, enter the following command to list the various
port numbers used by the instance.
+
[source]
----
asadmin> get servers.server.instance-name.system-property.*.value
----
For example, for an instance name `in1`, you would enter the following
command:
+
[source]
----
asadmin> get servers.server.in1.system-property.*.value
----

7. [[gevkc]]
Add at least two `target-server` elements in the `sun-acc.xml` file.
+
Use the endpoints that you obtained in link:#gevjb[Find the IIOP
listener port number for at least two instances in the cluster.].
+
If the {productName} instance on which the application client is
deployed participates in a cluster, the ACC finds all currently active
IIOP endpoints in the cluster automatically. However, a client should
have at least two endpoints specified for bootstrapping purposes, in
case one of the endpoints has failed.
+
The `target-server` element specifies one or more IIOP endpoints used
for load balancing. The `address` attribute is an IPv4 address or host
name, and the `port` attribute specifies the port number. See
"link:application-deployment-guide/dd-elements.html#GSDPG00111[client-container]" in {productName} Application Deployment Guide.
+
As an alternative to using `target-server` elements, you can use the
`endpoints` property as follows:
+
[source]
----
jvmarg value = "-Dcom.sun.appserv.iiop.endpoints=host1:port1,host2:port2,..."
----

8. If you require weighted round-robin load balancing, perform the following steps:
[arabic]
.. Set the load-balancing weight of each server instance.
+
[source]
----
asadmin set instance-name.lb-weight=weight
----
.. In the `sun-acc.xml`, set the
`com.sun.appserv.iiop.loadbalancingpolicy` property of the ACC to `ic-based-weighted`.
+
[source,xml]
----
…
<client-container send-password="true">
  <property name="com.sun.appserv.iiop.loadbalancingpolicy" \
     value="ic-based-weighed"/>
…
----

9. Deploy your client application with the `--retrieve` option to get the client jar file.
+
Keep the client jar file on the client machine.
+
For example:
+
[source]
----
asadmin  --user admin --passwordfile pw.txt deploy --target cluster1 \
--retrieve my_dir myapp.ear
----
10. Run the application client as follows:
+
[source]
----
appclient --client my_dir/myapp.jar
----

[[GSHAG00070]][[gfohj]]
Example 11-1 Setting Load-Balancing Weights for RMI-IIOP Weighted
Round-Robin Load Balancing

In this example, the load-balancing weights in a cluster of three
instances are to be set as shown in the following table.

[width="100%",cols="<44%,<56%",options="header",]
|===
|Instance Name |Load-Balancing Weight
|`i1` |100
|`i2` |200
|`i3` |300
|===


The sequence of commands to set these load balancing weights is as
follows:

[source]
----
asadmin set i1.lb-weight=100
asadmin set i2.lb-weight=200
asadmin set i3.lb-weight=300
----

[[GSHAG441]]

Next Steps

To test failover, stop one instance in the cluster and see that the
application functions normally. You can also have breakpoints (or
sleeps) in your client application.

To test load balancing, use multiple clients and see how the load gets
distributed among all endpoints.

[[GSHAG442]]

See Also

See link:session-persistence-and-failover.html#abdle[Enabling the High
Availability Session Persistence Service] for instructions on enabling
the session availability service for a cluster or for a Web, EJB, or JMS
container running in a cluster.

[[gknpv]][[GSHAG00217]][[per-request-load-balancing-prlb]]

=== Per-Request Load Balancing (PRLB)

The following topics are addressed here:

* link:#gksgt[PRLB Summary]
* link:#gksgy[Enabling Per-Request Load Balancing]

[[gksgt]][[GSHAG00318]][[prlb-summary]]

==== PRLB Summary

Per Request Load Balancing (PRLB) is a method for load balancing
stateless EJBs that enables load-balancing for each request to an EJB
instance. PRLB chooses the first node in a cluster to use on each
request. By contrast, `InitialContext` (hardware) load balancing chooses
the first node to use when the `InitialContext` is created, and each
request thereafter uses the same node unless a failure occurred.

PRLB is enabled by means of the boolean `per-request-load-balancing`
property in the `glassfish-ejb-jar.xml` deployment descriptor file for
the EJB. If this property is not set, the original load balancing
behavior is preserved.


[NOTE]
====
PRLB is only supported for stateless session beans. Using PRLB with any
other bean types will result in a deployment error.
====


[[gksgy]][[GSHAG00319]][[enabling-per-request-load-balancing]]

==== Enabling Per-Request Load Balancing

You can enable Per-Request Load Balancing (PRLB) by setting the boolean
`per-request-load-balancing` property to `true` in the
`glassfish-ejb-jar.xml` deployment descriptor file for the EJB. On the
client side, the `initContext.lookup` method is used to access the
stateless EJB.

[[gksgo]][[GSHAG00162]][[to-enable-rmi-iiop-per-request-load-balancing-for-a-stateless-ejb]]

===== To Enable RMI-IIOP Per-Request Load Balancing for a Stateless EJB

This procedure describes how to enable PRLB for a stateless EJB that is
deployed to clustered {productName} instances. This procedure also
provides an client-side example for accessing a stateless EJB that uses
PRLB.

1. Choose or assemble the EJB that you want to deploy.
+
In this example, an EJB named `TheGreeter` is used.
+
For instructions on developing and assembling an EJB for deployment to
{productName}, refer to the following documentation:

* "link:application-development-guide/ejb.html#GSDVG00010[Using Enterprise JavaBeans Technology]" in {productName} Application Development Guide
* "link:application-deployment-guide/deploying-applications.html#GSDPG00068[EJB Module Deployment Guidelines]" in {productName} Application Deployment Guide
* "link:application-deployment-guide/deploying-applications.html#GSDPG00070[Assembling and Deploying an Application Client
Module]" in {productName} Application Deployment Guide

2. Set the `per-request-load-balancing` property to `true` in the
`glassfish-ejb-jar.xml` deployment descriptor file for the EJB.
+
For more information about the `glassfish-ejb-jar.xml` deployment
descriptor file, refer to
"link:application-deployment-guide/dd-files.html#GSDPG00079[The glassfish-ejb-jar.xml File]"
in {productName} Application Deployment Guide
+
For example, the `glassfish-ejb-jar.xml` file for a sample EJB named
`TheGreeter` is listed below.
+
[source,xml]
----
<glassfish-ejb-jar>
  <enterprise-beans>
    <unique-id>1</unique-id>
    <ejb>
      <ejb-name>TheGreeter</ejb-name>
    <jndi-name>greeter</jndi-name>
    <per-request-load-balancing>true</per-request-load-balancing>
    </ejb>
  </enterprise-beans>
</glassfish-ejb-jar>
----
3. Deploy the EJB.
+
If the EJB was previously deployed, it must be redployed.
+
For instructions on deploying EJBs, refer to the following documentation:

* "link:application-deployment-guide/deploying-applications.html#GSDPG00033[To Deploy an Application or Module]" in {productName} Application Deployment Guide
* "link:application-deployment-guide/deploying-applications.html#GSDPG00036[To Redeploy an Application or Module]" in {productName} Application Deployment Guide

4. Verify the PRLB configuration by looking for the following `FINE`
message in the CORBA log file:
+
[source]
----
Setting per-request-load-balancing policyfor EJB EJB-name
----
5. Configure a client application to access the PRLB-enabled EJB.
+
For example:
+
[source,java]
----
public class EJBClient {
  public static void main(String args[]) {
  // ...
  try {
    // only one lookup
    Object objref = initContext.lookup("test.cluster.loadbalancing.ejb.TestSessionBeanRemote");
    myGreeterRemote = (TestSessionBeanRemote)PortableRemoteObject.narrow(objref, TestSessionBeanRemote.class);
  } catch (Exception e) {
    // ...
  }

  for (int i=0; i < 10; i++ ) {
    // method calls in a loop.
    String theMessage = myGreeterRemote.sayHello(Integer.toString(i));
    System.out.println("got"+": " + theMessage);
  }
  }
}
----

[[GSHAG443]]

See Also

See link:session-persistence-and-failover.html#abdle[Enabling the High
Availability Session Persistence Service] for instructions on enabling
the session availability service for a cluster or for a Web, EJB, or JMS
container running in a cluster.
