KickJava   Java API By Example, From Geeks To Geeks.

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


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.2 $</tt>
39  */

40 public class ListenerRemovedTestCase extends TestCase
41 {
42    private static List JavaDoc callbacks = new ArrayList JavaDoc();
43
44    public void testCallbacks() throws Throwable JavaDoc
45    {
46
47       // Start the callback server
48
InvokerLocator callbackServerLocator = new InvokerLocator("socket://localhost:2222");
49       Connector callbackConnector = new Connector();
50       callbackConnector.setInvokerLocator(callbackServerLocator.getLocatorURI());
51       callbackConnector.start();
52
53       // Start the target server
54
InvokerLocator targetServerLocator = new InvokerLocator("socket://localhost:3456");
55       Connector connector = new Connector();
56       connector.setInvokerLocator(targetServerLocator.getLocatorURI());
57       connector.create();
58       connector.addInvocationHandler("MySubsystem", new ServerInvocationHandlerImpl());
59       connector.start();
60
61
62       Client client = new Client(targetServerLocator);
63       client.connect();
64
65       InvokerCallbackHandler callbackHandler1 = new InvokerCallbackHandlerImpl("ONE");
66
67       client.addListener(callbackHandler1, callbackServerLocator);
68
69       client.removeListener(callbackHandler1);
70
71       try
72       {
73          client.removeListener(callbackHandler1);
74          assertTrue("Should throw an exception if remove a callback handler that has already been removed.", false);
75       }
76       catch(Throwable JavaDoc t)
77       {
78          assertTrue("Got exception from server as expected.", true);
79       }
80       finally
81       {
82          connector.stop();
83          callbackConnector.stop();
84
85          connector.destroy();
86          callbackConnector.destroy();
87       }
88    }
89
90
91    private static class InvokerCallbackHandlerImpl implements InvokerCallbackHandler
92    {
93       private String JavaDoc id;
94
95       public InvokerCallbackHandlerImpl(String JavaDoc id)
96       {
97          this.id = id;
98       }
99
100       public void handleCallback(Callback callback) throws HandleCallbackException
101       {
102          System.out.println("Handler " + id + " got callback: " + callback.getParameter());
103          callbacks.add(callback.getParameter());
104          //throw new CustomListenerException("This is the custom listener exception that I want to know about.");
105
}
106    }
107
108    private static class ServerInvocationHandlerImpl implements ServerInvocationHandler
109    {
110
111       protected ServerInvoker serverInvoker;
112       protected ArrayList JavaDoc callbackHandlers = new ArrayList JavaDoc();
113
114       public void setMBeanServer(MBeanServer JavaDoc server)
115       {
116       }
117
118       public void setInvoker(ServerInvoker invoker)
119       {
120          serverInvoker = invoker;
121       }
122
123       public Object JavaDoc invoke(InvocationRequest invocation) throws Throwable JavaDoc
124       {
125          String JavaDoc param = (String JavaDoc) invocation.getParameter();
126          System.out.println(param);
127
128          if(param.startsWith("call back"))
129          {
130             String JavaDoc arg = param.substring("call back".length()).trim();
131             for(Iterator JavaDoc i = callbackHandlers.iterator(); i.hasNext();)
132             {
133                InvokerCallbackHandler callbackHandler = (InvokerCallbackHandler) i.next();
134                callbackHandler.handleCallback(new Callback(arg));
135             }
136          }
137
138          return null;
139       }
140
141       public void addListener(InvokerCallbackHandler callbackHandler)
142       {
143          System.out.println("adding listener " + callbackHandler);
144          callbackHandlers.add(callbackHandler);
145       }
146
147       public void removeListener(InvokerCallbackHandler callbackHandler)
148       {
149          callbackHandlers.remove(callbackHandler);
150       }
151    }
152
153    private static class CustomListenerException extends RuntimeException JavaDoc
154    {
155       public CustomListenerException(String JavaDoc e)
156       {
157          super(e);
158       }
159    }
160
161 }
162
Popular Tags