99 lines
3.5 KiB
Java
99 lines
3.5 KiB
Java
|
import java.rmi.RemoteException;
|
||
|
import java.net.InetAddress;
|
||
|
import java.net.MalformedURLException;
|
||
|
import java.rmi.NotBoundException;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.Vector;
|
||
|
import java.util.concurrent.ConcurrentHashMap;
|
||
|
import java.util.concurrent.locks.ReentrantLock;
|
||
|
|
||
|
import javax.naming.NamingException;
|
||
|
import javax.naming.InitialContext;
|
||
|
import javax.naming.Context;
|
||
|
import javax.naming.NameNotFoundException;
|
||
|
import javax.naming.NamingException;
|
||
|
import javax.rmi.PortableRemoteObject;
|
||
|
|
||
|
import org.omg.CORBA.Any;
|
||
|
import org.omg.CORBA.ORB;
|
||
|
|
||
|
public class HelloClient implements Runnable {
|
||
|
static final int MAX_RETRY = 10;
|
||
|
static final int ONE_SECOND = 1000;
|
||
|
private static boolean responseReceived;
|
||
|
|
||
|
public static void main(String args[]) throws Exception {
|
||
|
executeRmiClientCall();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void run() {
|
||
|
try {
|
||
|
executeRmiClientCall();
|
||
|
} catch (Exception e) {
|
||
|
e.printStackTrace();
|
||
|
throw new RuntimeException(e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public static boolean isResponseReceived () {
|
||
|
return responseReceived;
|
||
|
}
|
||
|
|
||
|
public static void executeRmiClientCall() throws Exception {
|
||
|
Context ic;
|
||
|
Object objref;
|
||
|
HelloInterface helloSvc;
|
||
|
String response;
|
||
|
int retryCount = 0;
|
||
|
|
||
|
Test test = new Test();
|
||
|
System.out.println("HelloClient.main: enter ...");
|
||
|
while (retryCount < MAX_RETRY) {
|
||
|
try {
|
||
|
ic = new InitialContext();
|
||
|
System.out.println("HelloClient.main: HelloService lookup ...");
|
||
|
// STEP 1: Get the Object reference from the Name Service
|
||
|
// using JNDI call.
|
||
|
objref = ic.lookup("HelloService");
|
||
|
System.out.println("HelloClient: Obtained a ref. to Hello server.");
|
||
|
|
||
|
// STEP 2: Narrow the object reference to the concrete type and
|
||
|
// invoke the method.
|
||
|
helloSvc = (HelloInterface) PortableRemoteObject.narrow(objref,
|
||
|
HelloInterface.class);
|
||
|
System.out.println("HelloClient: Invoking on remote server with ConcurrentHashMap parameter");
|
||
|
ConcurrentHashMap <String, String> testConcurrentHashMap = new ConcurrentHashMap<String, String>();
|
||
|
response = helloSvc.sayHelloWithHashMap(testConcurrentHashMap);
|
||
|
System.out.println("HelloClient: Server says: " + response);
|
||
|
if (!response.contains("Hello with hashMapSize ==")) {
|
||
|
System.out.println("HelloClient: expected response not received");
|
||
|
throw new RuntimeException("Expected Response Hello with hashMapSize == 0 not received");
|
||
|
}
|
||
|
responseReceived = true;
|
||
|
break;
|
||
|
} catch (NameNotFoundException nnfEx) {
|
||
|
System.err.println("NameNotFoundException Caught .... try again");
|
||
|
retryCount++;
|
||
|
try {
|
||
|
Thread.sleep(ONE_SECOND);
|
||
|
} catch (InterruptedException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
continue;
|
||
|
} catch (Exception e) {
|
||
|
System.err.println("Exception " + e + "Caught");
|
||
|
e.printStackTrace();
|
||
|
throw new RuntimeException(e);
|
||
|
}
|
||
|
}
|
||
|
System.err.println("HelloClient terminating ");
|
||
|
try {
|
||
|
Thread.sleep(5000);
|
||
|
} catch (InterruptedException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
}
|