Package org.jgroups.tests

Source Code of org.jgroups.tests.DeadlockTest$Handler

// $Id: DeadlockTest.java,v 1.7 2006/02/28 16:32:11 belaban Exp $

package org.jgroups.tests;


import org.jgroups.*;
import org.jgroups.blocks.GroupRequest;
import org.jgroups.blocks.MethodCall;
import org.jgroups.blocks.RpcDispatcher;



/**
* Class which tests deadlock detection in RequestCorrelator.
* @author John Giorgiadis
*/
public class DeadlockTest {
    private static final Class[] TYPES=new Class[]{};
    private static final Object[] ARGS=new Object[]{};

    public class InRpc {
        public void rpc_1() { _in_rpc_1(); }
        public void rpc_2() { _in_rpc_2(); }
    }


  private static class Handler implements MessageListener, MembershipListener {
    public Handler() { super(); }
    // MessageListener
    public byte[] getState() { return(null); }
    public void setState(byte[] state) {}
    public void receive(Message msg) {}
    // MembershipListener
    public void block() {}
    public void suspect(Address suspect) {}
    public void viewAccepted(View view) {}
  }

  // .......................................................................

  private String name = "JG";
  private String stack = null; // default stack config
  private JChannel channel;
  private RpcDispatcher disp;


  private void _in_rpc_1() {
    System.out.println("In rpc_1()");
    cast_call("rpc_2", ARGS, TYPES);
    System.out.println("Exiting rpc_1()");
  }

  private void _in_rpc_2() {
    System.out.println("In rpc_2()");
    System.out.println("Exiting rpc_2()");
  }


  private void cast_call(String method, Object[] args, Class[] types) {
    MethodCall call;
    call = new MethodCall(method, args, types);
    disp.callRemoteMethods(null, call, GroupRequest.GET_ALL, 0);
  }

  // .......................................................................

  public DeadlockTest(boolean use_deadlock_detection) {
    Handler handler = new Handler();
    InRpc in_rpc = new InRpc();

    try {
        channel = new JChannel(stack);
        disp = new RpcDispatcher(channel, handler, handler, in_rpc, use_deadlock_detection);
        channel.connect(name);
    }
        catch(ChannelClosedException ex) { ex.printStackTrace(); }
        catch(ChannelException ex) { ex.printStackTrace(); }
   
    // Call rpc_1 which in turn calls rpc_2
    System.out.println("Calling rpc_1()");
    if(!use_deadlock_detection)
        System.out.println("** Not using deadlock detection -- recursive call will hang !");
    else
        System.out.println("** Using deadlock detection -- recursive call will succeed");
    cast_call("rpc_1", ARGS, TYPES);
    System.out.println("Out of rpc_1()");
    channel.disconnect();
    channel.close();
    System.out.println("Disconnected");
  }

  // .......................................................................

  public static void main(String[] args) {
      if(args.length != 1) {
    System.out.println("DeadlockTest <true|false (use_deadlock_detection)>");
    return;
      }
      new DeadlockTest(Boolean.valueOf(args[0]).booleanValue());
  }
}
TOP

Related Classes of org.jgroups.tests.DeadlockTest$Handler

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.