## Clustered Remoting

Clustered AOP Remoting didn't receive much TLC for the 1.0 beta release although we did fix a few critical bugs. We'll put more TLC in the next release

Clustered remoting works a little differently than regular AOP remoting. It leverages the clustering framework implemented for EJBs.

    import org.jboss.ha.framework.interfaces.RoundRobin;
    ...
       POJO remote = new POJO("hello");
       return (POJO)ClusteredRemoting.registerClusteredObject("clusteredobj", remote,
                                                              "DefaultPartition", new RoundRobin(),
                                                              "socket://servername:8084");

Unlike regular AOP remoting, clients cannot independently connect to a clustered object. Here's a look at the API.

    package org.jboss.aop.remoting;

    import javax.naming.InitialContext;

    import org.jboss.aop.Advised;
    import org.jboss.aop.InstanceAdvised;
    import org.jboss.aop.InstanceAdvisor;
    import org.jboss.aop.PayloadKey;
    import org.jboss.aop.proxy.ClassProxy;
    import org.jboss.aop.proxy.ClassProxyFactory;
    import org.jboss.ha.framework.server.HATarget;
    import org.jboss.ha.framework.interfaces.HAPartition;
    import org.jboss.ha.framework.interfaces.LoadBalancePolicy;
    import org.jboss.ha.framework.interfaces.GenericClusteringException;
    import org.jboss.ha.framework.interfaces.ClusteringTargetsRepository;
    import org.jboss.ha.framework.interfaces.FamilyClusterInfo;
    import org.jboss.logging.Logger;
    import org.jboss.remoting.InvokerLocator;
    import org.jboss.aop.Dispatcher;

    public class ClusteredRemoting implements ClusterConstants
    {
       public static ClassProxy registerClusteredObject(Object objectId, Object obj,
                                                        String partitionName,
                                                        LoadBalancePolicy lb, String uri)
          throws Exception

       public static ClassProxy registerClusteredObject(Object objectId, Object obj,
                                                        String partitionName, LoadBalancePolicy lb,
                                                        InvokerLocator locator) throws Exception

    }

The ClusteredRemoting static methods register with the Dispatcher for you. The partitionName corresponds to the Cluster Partition you want the object to be used with. Pre-implemented load balance policies are RoundRobin and FirstAvailable. See the EJB clustering docs for more information.