1 7 package org.jboss.test.remoting.callback.listeners; 8 9 import java.util.ArrayList ; 10 import java.util.Iterator ; 11 import java.util.List ; 12 import javax.management.MBeanServer ; 13 import org.jboss.remoting.Client; 14 import org.jboss.remoting.InvocationRequest; 15 import org.jboss.remoting.InvokerLocator; 16 import org.jboss.remoting.ServerInvocationHandler; 17 import org.jboss.remoting.ServerInvoker; 18 import org.jboss.remoting.callback.Callback; 19 import org.jboss.remoting.callback.HandleCallbackException; 20 import org.jboss.remoting.callback.InvokerCallbackHandler; 21 import org.jboss.remoting.transport.Connector; 22 23 import junit.framework.TestCase; 24 25 40 public class MultipleListenersTestCase extends TestCase 41 { 42 private static List callbacks = new ArrayList (); 43 44 private static String value1 = "FOO"; 45 private static String value2 = "BAR"; 46 private static String value3 = "FOOBAR"; 47 48 public void testCallbacks() throws Throwable 49 { 50 51 InvokerLocator callbackServerLocator = new InvokerLocator("socket://localhost:2222"); 53 Connector callbackConnector = new Connector(); 54 callbackConnector.setInvokerLocator(callbackServerLocator.getLocatorURI()); 55 callbackConnector.start(); 56 57 InvokerLocator targetServerLocator = new InvokerLocator("socket://localhost:3456"); 59 Connector connector = new Connector(); 60 connector.setInvokerLocator(targetServerLocator.getLocatorURI()); 61 connector.create(); 62 connector.addInvocationHandler("MySubsystem", new ServerInvocationHandlerImpl()); 63 connector.start(); 64 65 66 Client client = new Client(targetServerLocator); 67 client.connect(); 68 69 InvokerCallbackHandler callbackHandler1 = new InvokerCallbackHandlerImpl("ONE"); 70 InvokerCallbackHandler callbackHandler2 = new InvokerCallbackHandlerImpl("TWO"); 71 72 client.addListener(callbackHandler1, callbackServerLocator); 73 74 client.invoke("call back " + value1); 75 76 assertEquals(1, callbacks.size()); 77 callbacks.clear(); 78 79 client.addListener(callbackHandler2, callbackServerLocator); 80 81 client.invoke("call back " + value2); 82 83 assertEquals(2, callbacks.size()); 84 callbacks.clear(); 85 86 client.removeListener(callbackHandler1); 87 88 client.invoke("call back " + value3); 89 90 assertEquals(1, callbacks.size()); 91 callbacks.clear(); 92 93 client.removeListener(callbackHandler2); 94 95 connector.stop(); 96 callbackConnector.stop(); 97 98 connector.destroy(); 99 callbackConnector.destroy(); 100 } 101 102 103 private static class InvokerCallbackHandlerImpl implements InvokerCallbackHandler 104 { 105 private String id; 106 107 public InvokerCallbackHandlerImpl(String id) 108 { 109 this.id = id; 110 } 111 112 public void handleCallback(Callback callback) throws HandleCallbackException 113 { 114 System.out.println("Handler " + id + " got callback: " + callback.getParameter()); 115 callbacks.add(callback.getParameter()); 116 } 118 } 119 120 private static class ServerInvocationHandlerImpl implements ServerInvocationHandler 121 { 122 123 protected ServerInvoker serverInvoker; 124 protected ArrayList callbackHandlers = new ArrayList (); 125 126 public void setMBeanServer(MBeanServer server) 127 { 128 } 129 130 public void setInvoker(ServerInvoker invoker) 131 { 132 serverInvoker = invoker; 133 } 134 135 public Object invoke(InvocationRequest invocation) throws Throwable 136 { 137 String param = (String ) invocation.getParameter(); 138 System.out.println(param); 139 140 if(param.startsWith("call back")) 141 { 142 String arg = param.substring("call back".length()).trim(); 143 for(Iterator i = callbackHandlers.iterator(); i.hasNext();) 144 { 145 InvokerCallbackHandler callbackHandler = (InvokerCallbackHandler) i.next(); 146 callbackHandler.handleCallback(new Callback(arg)); 147 } 148 } 149 150 return null; 151 } 152 153 public void addListener(InvokerCallbackHandler callbackHandler) 154 { 155 System.out.println("adding listener " + callbackHandler); 156 callbackHandlers.add(callbackHandler); 157 } 158 159 public void removeListener(InvokerCallbackHandler callbackHandler) 160 { 161 callbackHandlers.remove(callbackHandler); 162 } 163 } 164 165 private static class CustomListenerException extends RuntimeException 166 { 167 public CustomListenerException(String e) 168 { 169 super(e); 170 } 171 } 172 173 } 174 | Popular Tags |