Package org.jboss.test.cluster.hapartition.rpc

Source Code of org.jboss.test.cluster.hapartition.rpc.RPCUser

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cluster.hapartition.rpc;

import java.util.GregorianCalendar;

import org.jboss.ha.framework.interfaces.ClusterNode;
import org.jboss.ha.framework.interfaces.HAPartition;
import org.jboss.logging.Logger;
import org.jboss.system.ServiceMBeanSupport;

/** Tests of clustered RPC calls
*
* @author Jerry Gauthier
* @version $Revision: 105748 $
*/
public class RPCUser extends ServiceMBeanSupport implements RPCUserMBean
   protected static Logger log = Logger.getLogger(RPCUser.class);
   private static final String METHOD_GET_PERSON = "getPerson";
   private static final String METHOD_GET_PERSON_MATCH = "getPersonMatch";
   private static final String METHOD_NOTIFY_PERSON = "notifyPerson";

   protected String rpcServiceName;
   protected HAPartition partition = null;
   private Person myPerson = null;

   public String getPartitionName()
   {
      return (partition == null) ? null : partition.getPartitionName();
   }
  
   public HAPartition getHAPartition()
   {
      return partition;
   }
  
   public void setHAPartition(HAPartition partition)
   {
      this.partition = partition;
   }
  
   public void startService() throws Exception
   {
      rpcServiceName = this.serviceName.toString();
      log.debug("RPCTestCase.startService() - " + rpcServiceName);
     
      if (partition == null)
         throw new IllegalStateException("RPCUser partition is null");

      ClusterNode me = partition.getClusterNode();
      ClusterNode[] nodes = partition.getClusterNodes();
      boolean isFirstNode = (nodes != null && nodes[0].equals(me));
     
      // register the service with the partition
      // note that "OneNode" services are only registered on the first node
      if (rpcServiceName.indexOf("OneNode") < 0 || isFirstNode)
      {
         // ClassLoader services register with a classloader reference
         if (rpcServiceName.indexOf("ClassLoader") >= 0)
            partition.registerRPCHandler(rpcServiceName, this, Thread.currentThread().getContextClassLoader());
         else
            partition.registerRPCHandler(rpcServiceName, this);
      }
     
      // add a different person to each of the two nodes
      Person p;
      if (isFirstNode)
      {
         p = new Person("John White");
         p.setAddress("Main Street", "Boston", "MA", "02101");
         p.setDob(new GregorianCalendar(1965, GregorianCalendar.MARCH, 30));
         p.setEmployer("WidgetsRUs");
      }
      else
      {
         p = new Person("Jane Brown");
         p.setAddress("High Street", "Cambridge", "MA", "02141");
         p.setDob(new GregorianCalendar(1970, GregorianCalendar.JULY, 15));
         p.setEmployer("AcmeLtd");
      }
      myPerson = p;
      
   }  
 
   public Object runRetrieveAll() throws Exception
   {
      log.debug("runRetrieveAll");
      return partition.callMethodOnCluster(rpcServiceName, METHOD_GET_PERSON, null, null, false);
   }
  
   public Object runRetrieveQuery(PersonQuery query) throws Exception
   {
      log.debug("runRetrieveQuery");
      Object[] parms = new Object[]{query};
      Class<?>[] types = new Class[]{PersonQuery.class};
      return partition.callMethodOnCluster(rpcServiceName, METHOD_GET_PERSON_MATCH, parms, types, false);
   }
  
   public Object runRetrieveFromCoordinator() throws Exception
   {
      log.debug("runRetrieveFromCoordinator");
      return partition.callMethodOnCoordinatorNode(rpcServiceName, METHOD_GET_PERSON, null, null, false);
   }
  
   public void runNotifyAllAsynch() throws Exception
   {
      log.debug("runNotifyAllAsynch");
      Object[] parms = new Object[]{Boolean.TRUE};
      Class<?>[] types = new Class[]{Boolean.class};
      partition.callAsynchMethodOnCluster(rpcServiceName, METHOD_NOTIFY_PERSON, parms, types, false);
   }
  
   public Person getPerson()
   {
      return myPerson;
   }
  
   public Person getPersonMatch(PersonQuery query)
   {
      if (query.isMatch(myPerson))
         return myPerson;
      else
         return null;
   }
  
   public void notifyPerson(Boolean notify)
   {
      myPerson.setNotified(notify.booleanValue());
   }

}
TOP

Related Classes of org.jboss.test.cluster.hapartition.rpc.RPCUser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.