OOT Seminar H-97 CORBA Praktisk del
Valg av ORB implementasjon Har valgt å bruke Visigenic sin ORB implementsjon ORB en er 100% Java kodet Bygger på OMG sin IDL to Java language mapping fra Jun 97 Gratis prøveversjon i 1 mnd.
Counter eksempel Formål Beregne gjennomsnittstiden det tar for en klient å utføre en metode på et serverobjekt. Eksempel hentet fra Client/Server Programming with Java and CORBA Robert Orfali, Dan Harkey
Ide / Tidlig klassediagram <<IDL Interface>> Count CountServer public int increment() { sum++; return sum; CountClient // Increment 1000 times for (int i = 0 ; i < 1000 ; i++ ) { counter.increment();
Interface Defenition Language Count Interfacet nedfelt i IDL <<IDL Interface>> Count sum : long increment( ) : long module Counter { interface Count { attribute long sum; long increment(); ; ;
IDL til Java Prekompilering idl2java count.idl Produktet blir en Java Package med navn Counter (navnet på modulen)
Hva generer idl2java kompilatoren Count.java _sk_count.java<->countimplbase.java CountHelper.java CountHolder.java (leverer container obj) _st_count.java _tie_count.java CountOperations.java
Count.java Interface til Count objekt package Counter; public interface Count extends org.omg.corba.object { public void sum(int sum); public int sum(); public int increment(); Count.java module Counter { interface Count { attribute long sum; long increment(); ; ; Count.idl
_st_count.java Java klasse for stub kode implementerer interface Count på klient siden blir også kalt clientproxy denne klassen blir ikke direkte brukt av programmerere
Klassediagram <<Interface>> Count CountServer CountImpl _sk_count main( ) 1 1..* CountClient main( ) Server Client
Implementasjon CountImpl class CountImpl extends Counter._sk_Count implements Counter.Count { private int sum; // Constructor CountImpl(String name) { super(name); System.out.println("Count Object Created"); sum = 0; // get sum public int sum() throws org.omg.corba.systemexception { return sum; // set sum public void sum(int val) throws org.omg.corba.systemexception { sum = val; // increment method public int increment() throws org.omg.corba.systemexception { sum++; return sum;
Imlementasjon CountServer // CountServer.java: The Count Server main program class CountServer { static public void main(string[] args) { try { // Initialize the ORB. org.omg.corba.orb orb = org.omg.corba.orb.init(); // Initialize the BOA. org.omg.corba.boa boa = orb.boa_init(); // Create the Count object. CountImpl count = new CountImpl("My Count"); // Export to the ORB newly created object. boa.obj_is_ready(count); // Ready to service requests. boa.impl_is_ready(); catch(org.omg.corba.systemexception e) { System.err.println(e);
Implementajson av CountClient // CountClient.java Static Client, VisiBroker for Java class CountClient { public static void main(string args[]) { try { // Initialize the ORB System.out.println("Initializing the ORB"); org.omg.corba.orb orb = org.omg.corba.orb.init(); // Bind to the Count Object System.out.println("Binding to Count Object"); Counter.Count counter = Counter.CountHelper.bind(orb,"My Count");
// Set sum to initial value of 0 System.out.println("Setting sum to 0"); counter.sum((int)0); // Calculate Start time long starttime = System.currentTimeMillis(); // Increment 1000 times System.out.println("Incrementing"); for (int i = 0 ; i < 1000 ; i++ ) { counter.increment(); // Calculate stop time; print out statistics long stoptime = System.currentTimeMillis(); System.out.println("Avg Ping = " + ((stoptime - starttime)/1000f) + " msecs"); System.out.println("Sum = " + counter.sum()); catch(org.omg.corba.systemexception e) { System.err.println("System Exception"); System.err.println(e);
Kjøring av eksempelet Set CLASSPATH Kompiler alle Java-klassene Start: osagent (er en name service) Start: java CountServer Start: java CountClient
Resultat av kjøringen > java CountServer Count Object Created > java CountClient Initializing the ORB Binding to Count Object Setting sum to 0 Incrementing Avg Ping = 5.28 msecs Sum = 1000