1
package org.jboss.test.remoting.detection.multicast.deadlock;
3
import org.apache.log4j.Level;
4
import org.jboss.jrunit.extensions.ServerTestCase;
5
import org.jboss.remoting.Client;
6
import org.jboss.remoting.InvocationRequest;
7
import org.jboss.remoting.InvokerLocator;
8
import org.jboss.remoting.ServerInvocationHandler;
9
import org.jboss.remoting.ServerInvoker;
10
import org.jboss.remoting.callback.InvokerCallbackHandler;
11
import org.jboss.remoting.detection.multicast.MulticastDetector;
12
import org.jboss.remoting.network.NetworkRegistry;
13
import org.jboss.remoting.security.SSLSocketBuilder;
14
import org.jboss.remoting.transport.Connector;
15
import org.jboss.test.remoting.TestUtil;
17
import javax.management.MBeanServer;
18
import javax.management.MBeanServerFactory;
19
import javax.management.ObjectName;
21
import java.net.InetAddress;
22
import java.security.AccessController;
23
import java.security.PrivilegedActionException;
24
import java.security.PrivilegedExceptionAction;
25
import java.util.HashMap;
31
* @author <a href="mailto:tom.elrod@jboss.com">Tom Elrod</a>
33
public class MulticastDetectorServer extends ServerTestCase
35
private MulticastDetector detector;
36
private Connector connector;
37
private NetworkRegistry registry;
38
private Map config = new HashMap();
40
public void setUp() throws Exception
42
detector = new MulticastDetector();
44
System.setProperty("jboss.identity", String.valueOf(System.currentTimeMillis()));
45
System.out.println("jboss.identity = " + System.getProperty("jboss.identity"));
47
MBeanServer server = null;
51
server = (MBeanServer) AccessController.doPrivileged( new PrivilegedExceptionAction()
53
public Object run() throws Exception
55
return MBeanServerFactory.createMBeanServer();
59
catch (PrivilegedActionException e)
61
throw (Exception) e.getCause();
64
registry = NetworkRegistry.getInstance();
65
server.registerMBean(registry, new ObjectName("remoting:type=NetworkRegistry"));
67
int port = TestUtil.getRandomPort();
68
System.out.println("port = " + port);
70
String host = InetAddress.getLocalHost().getHostAddress();
71
String bindAddr = System.getProperty("jrunit.bind_addr", host);
72
InvokerLocator locator = new InvokerLocator("sslsocket://" + bindAddr + ":" + port);
74
System.out.println("Starting remoting server with locator uri of: " + locator.getLocatorURI());
76
config.put(SSLSocketBuilder.REMOTING_TRUST_STORE_TYPE, "JKS");
77
String trustStoreFilePath = this.getClass().getResource("ssl/.truststore").getFile();
78
config.put(SSLSocketBuilder.REMOTING_TRUST_STORE_FILE_PATH, trustStoreFilePath);
79
config.put(SSLSocketBuilder.REMOTING_TRUST_STORE_PASSWORD, "unit-tests-client");
80
String keyStoreFilePath = this.getClass().getResource("ssl/.keystore").getFile();
81
config.put(SSLSocketBuilder.REMOTING_KEY_STORE_FILE_PATH, keyStoreFilePath);
82
config.put(SSLSocketBuilder.REMOTING_KEY_STORE_PASSWORD, "unit-tests-server");
83
config.put(SSLSocketBuilder.REMOTING_CLIENT_AUTH_MODE, SSLSocketBuilder.CLIENT_AUTH_MODE_WANT);
85
connector = new Connector(config);
86
connector.setInvokerLocator(locator.getLocatorURI());
88
ObjectName obj = new ObjectName("jboss.remoting:type=Connector,transport=" + locator.getProtocol());
89
server.registerMBean(connector, obj);
92
TestHandler handler = new TestHandler();
93
connector.addInvocationHandler("mock", handler);
96
//Need to set new domain for identity
97
server.registerMBean(detector, new ObjectName("remoting:type=MulticastDetector"));
103
public void tearDown() throws Exception
105
if (detector != null)
109
if (connector != null)
116
public static void main(String[] args)
118
org.apache.log4j.BasicConfigurator.configure();
119
org.apache.log4j.Category.getRoot().setLevel(Level.DEBUG);
123
MulticastDetectorServer test = new MulticastDetectorServer();
125
Thread.currentThread().sleep(10000);
135
public class TestHandler implements ServerInvocationHandler
138
public void setMBeanServer(MBeanServer server)
140
//TODO: -TME Implement
143
public void setInvoker(ServerInvoker invoker)
145
//TODO: -TME Implement
148
public Object invoke(InvocationRequest invocation) throws Throwable
150
Object obj = invocation.getParameter();
151
if (obj instanceof String)
153
String locator = (String) obj;
154
ServerClient client = new ServerClient(locator);
155
Thread t = new Thread(client, "server_client_thread");
156
//t.setDaemon(false);
165
public void addListener(InvokerCallbackHandler callbackHandler)
167
//TODO: -TME Implement
170
public void removeListener(InvokerCallbackHandler callbackHandler)
172
//TODO: -TME Implement
176
public class ServerClient implements Runnable
178
private String locatorUrl = null;
180
public ServerClient(String locator)
182
this.locatorUrl = locator;
190
Client remotingClient = null;
191
for (int x = 0; x < 2; x++)
193
remotingClient = new Client(new InvokerLocator(locatorUrl), config);
194
remotingClient.connect();
195
Object ret = remotingClient.invoke("bar");
196
System.out.println("client returned " + ret);
197
Thread.currentThread().sleep(3000);
199
remotingClient.disconnect();
200
System.out.println("server client disconnected.");
207
catch (Throwable throwable)
209
throwable.printStackTrace();