KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > remoting > callback > listeners > MultipleListenersTestCase


1 /**
2  * JBoss, the OpenSource J2EE WebOS
3  *
4  * Distributable under LGPL license.
5  * See terms of license at gnu.org.
6  */

7 package org.jboss.test.remoting.callback.listeners;
8
9 import java.util.ArrayList JavaDoc;
10 import java.util.Iterator JavaDoc;
11 import java.util.List JavaDoc;
12 import javax.management.MBeanServer JavaDoc;
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 /**
26  * This is a test to make sure multiple callback listeners can be added
27  * from the same client and the each gets their callbacks, as well
28  * as making sure they are removed correctly.
29  * <p/>
30  * This test really only works the way it is coded because know that
31  * everything will be run locally, meaning that I can check the
32  * callback values after making in invoke call because the same
33  * thread will make the callbacks before the thread returns from
34  * invoke method.
35  *
36  * @author <a HREF="mailto:ovidiu@jboss.org">Ovidiu Feodorov</a>
37  * @author <a HREF="mailto:tom@jboss.org">Ton Elrod</a>
38  * @version <tt>$Revision: 1.6 $</tt>
39  */

40 public class MultipleListenersTestCase extends TestCase
41 {
42    private static List JavaDoc callbacks = new ArrayList JavaDoc();
43
44    private static String JavaDoc value1 = "FOO";
45    private static String JavaDoc value2 = "BAR";
46    private static String JavaDoc value3 = "FOOBAR";
47
48    public void testCallbacks() throws Throwable JavaDoc
49    {
50
51       // Start the callback server
52
InvokerLocator callbackServerLocator = new InvokerLocator("socket://localhost:2222");
53       Connector callbackConnector = new Connector();
54       callbackConnector.setInvokerLocator(callbackServerLocator.getLocatorURI());
55       callbackConnector.start();
56
57       // Start the target server
58
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 JavaDoc id;
106
107       public InvokerCallbackHandlerImpl(String JavaDoc 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          //throw new CustomListenerException("This is the custom listener exception that I want to know about.");
117
}
118    }
119
120    private static class ServerInvocationHandlerImpl implements ServerInvocationHandler
121    {
122
123       protected ServerInvoker serverInvoker;
124       protected ArrayList JavaDoc callbackHandlers = new ArrayList JavaDoc();
125
126       public void setMBeanServer(MBeanServer JavaDoc server)
127       {
128       }
129
130       public void setInvoker(ServerInvoker invoker)
131       {
132          serverInvoker = invoker;
133       }
134
135       public Object JavaDoc invoke(InvocationRequest invocation) throws Throwable JavaDoc
136       {
137          String JavaDoc param = (String JavaDoc) invocation.getParameter();
138          System.out.println(param);
139
140          if(param.startsWith("call back"))
141          {
142             String JavaDoc arg = param.substring("call back".length()).trim();
143             for(Iterator JavaDoc 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 JavaDoc
166    {
167       public CustomListenerException(String JavaDoc e)
168       {
169          super(e);
170       }
171    }
172
173 }
174
Popular Tags