package org.jacorb.demo.mtclient; /** * * Test multi-threading and call-back support: * * use any number of ClientThreads on the same server * object. */ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import org.omg.CosNaming.*; import org.omg.PortableServer.*; import org.omg.CORBA.*; public class Client { public static void main( String[] args ) { MyServer s = null; try { int clientNum = 2; if( args.length > 1 ) clientNum = Integer.parseInt( args[1] ); String msg = "<test_msg>"; /* Make sure that you allow a maximum thread * pool size > 1, otherwise this will block. */ java.util.Properties props = new java.util.Properties(); props.put("jacorb.poa.thread_pool_max", Integer.toString( clientNum * 2 > 5 ? clientNum * 2 : 5)); ORB orb = ORB.init(args, props); BufferedReader br = new BufferedReader( new FileReader( new File( args[0] ))); // get object reference from command-line argument file org.omg.CORBA.Object obj = orb.string_to_object( br.readLine() ); br.close(); s = MyServerHelper.narrow(obj); POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); /* create thread objects */ ClientThread [] clientThread = new ClientThread [clientNum] ; for( int i = 0; i < clientNum; i++) { clientThread[i] = new ClientThread(s, msg, i); } /* create CORBA references for each client thread */ Observer [] observers = new Observer [clientNum]; for( int i = 0; i < clientNum; i++) { observers[i] = ObserverHelper.narrow(poa.servant_to_reference( new ObserverPOATie( clientThread[i] ))); clientThread[i].setMe( observers[i]); } /* start threads */ for( int i = 0; i < clientNum; i++) { clientThread[i].start(); } int which = 0; while( which < clientNum ) { while( clientThread[which].isAlive() ) Thread.currentThread().sleep(500); which++; } System.out.println("Going down..."); s.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }