Skip navigation.
Downloads | Product Documentation | Support

Using WebLogic Server Clusters

# The WebLogic Cluster API

The following sections describe the WebLogic Cluster API.

- How to Use the API
- Custom Call Routing and Collocation Optimization

# How to Use the API

The WebLogic Cluster public API is contained in a single interface, `weblogic.rmi.cluster.CallRouter`.

>     Class java.lang.Object
>        Interface weblogic.rmi.cluster.CallRouter
>           (extends java.io.Serializable)

A class implementing this interface must be provided to the RMI compiler (`rmic`) to enable parameter-based routing. Run `rmic` on the service implementation using these options (to be entered on one line):

>     $ java weblogic.rmic -clusterable -callRouter
>         <callRouterClass> <remoteObjectClass>

The call router is called by the clusterable stub each time a remote method is invoked. The router is responsible for returning the name of the server to which the call should be routed.

Each server in the cluster is uniquely identified by its name as defined with the WebLogic Server Console. These are the names that the method router must use for identifying servers.

Example: Consider the `ExampleImpl` class which implements a remote interface Example, with one method `foo`:

>     public class ExampleImpl implements Example {
>       public void foo(String arg) { return arg; }
>     }

This `CallRouter` implementation `ExampleRouter` ensures that all `foo` calls with `arg' < "n" go to server1 (or server3 if server1 is unreachable) and that all calls with `arg' >= "n" go to server2 (or server3 if server2 is unreachable).

>     public class ExampleRouter implements CallRouter {
>       private static final String[] aToM = { "server1", "server3" };
>       private static final String[] nToZ = { "server2", "server3" };

>       public String[] getServerList(Method m, Object[] params) {
>         if (m.GetName().equals("foo")) {
>           if (((String)params[0]).charAt(0) < 'n') {
>             return aToM;
>           } else {
>             return nToZ;
>           }
>         } else {
>           return null;
>         }
>       }
>     }

This `rmic` call associates the `ExampleRouter` with `ExampleImpl` to enable parameter-based routing:

>     $ rmic -clusterable -callRouter ExampleRouter ExampleImpl

# Custom Call Routing and Collocation Optimization

If a replica is available on the same server instance as the object calling it, the call will not be load-balanced, because it is more efficient to use the local replica. For more information, see Optimization for Collocated Objects.