package org.jacorb.demo.concurrency; import org.omg.CosConcurrencyControl.*; import org.omg.CosTransactions.*; import org.omg.CosNaming.*; public class Client { private static Control ctrl = null; private static TransactionalLockSet lockset = null; private static TransactionFactory tf = null; public static void main (String[] args) { try { // jacorb.security.SecurityRoot.start( args ); // org.omg.CORBA.ORB orb = jacorb.orb.Local.get_orb(); org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init (args, null); org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow (orb.resolve_initial_references ("RootPOA")); // Session ss = get_session( orb ); // org.omg.CosNaming.NamingContextExt nc = ss.get_naming(); NamingContextExt nc = NamingContextExtHelper.narrow (orb.resolve_initial_references ("NameService")); NameComponent[] name = new NameComponent[1]; name[0] = new NameComponent ("LogicLand", "transaction"); tf = TransactionFactoryHelper.narrow (nc.resolve (name)); name[0] = new NameComponent ("LogicLand", "lock"); LockSetFactory ls = LockSetFactoryHelper.narrow (nc.resolve (name)); name[0] = new NameComponent ("LogicLand", "lockset"); lockset = TransactionalLockSetHelper.narrow (nc.resolve (name)); print_help (); while (exec_command ()) { // empty body } } catch (Exception e) { e.printStackTrace (); } } static void print_help () { System.out.println (" ---------------------------------------------------------------------------"); System.out.println (" LogicLand group, Concurrency service test program"); System.out.println (" ---------------------------------------------------------------------------"); System.out.println (" LockMode: Read - r, Write - w, Upgrade - u, IRead - ir, IWrite iw"); System.out.println (" ---------------------------------------------------------------------------"); System.out.println (" Commands :"); System.out.println (" ---------------------------------------------------------------------------"); System.out.println (" Lock ::= l<LockMode> // Lock resource "); System.out.println (" Try_Lock ::= t<LockMode> // Try lock resource "); System.out.println (" Unlock ::= u<LockMode> // Unlock resource"); System.out.println (" Change ::= c<LockMode><LockMode> // Change lock from->to"); System.out.println (" Start ::= start[=n] // n minuts timeout, default - 5"); System.out.println (" Commit ::= commit // commit transaction "); System.out.println (" Rollback ::= rollback // rollback transaction"); System.out.println (" Print ::= print // print LockSet contents"); System.out.println (" Help ::= help // this screen"); System.out.println (" Quit ::= quit // quit from test"); System.out.println (" ---------------------------------------------------------------------------"); }; static boolean exec_command () { System.out.print ("Ready ;-)"); String cmd = InConsole.read (); System.out.println ("Accept:" + cmd); try { if (cmd.equals ("quit")) { return false; } else if (cmd.equals ("help")) { print_help (); } else if (cmd.equals ("print")) { // lockset.print(); } else if (cmd.equals ("commit")) { if (ctrl == null) { System.out.println ("Error: Transaction not active"); } else { try { ctrl.get_terminator ().commit (false); System.out.println ("Commit complete"); } catch (org.omg.CORBA.OBJECT_NOT_EXIST e) { System.out.println ("Error: Transaction finnished"); } ctrl = null; } } else if (cmd.equals ("rollback")) { if (ctrl == null) { System.out.println ("Error: Transaction not active"); } else { try { ctrl.get_terminator ().rollback (); System.out.println ("Rollback complete"); } catch (org.omg.CORBA.OBJECT_NOT_EXIST e) { System.out.println ("Error: Transaction finnished"); } ctrl = null; } } else if (cmd.length () >= 5 && cmd.substring (0, 5).equals ("start")) { if (ctrl != null) { System.out.println ("Error: Transaction is active"); } else { int minute = 5; try { minute = Integer.parseInt (cmd.substring (6)); } catch (Exception e) { e.printStackTrace (); System.out.println ("Use default 5 min."); } ctrl = tf.create (minute * 60); System.out.println ("Transaction started with " + minute + "min timeout"); } } else { if (ctrl == null) { System.out.println ("Error: Transaction not active"); return true; } try { if (cmd.length () >= 2 && cmd.substring (0, 1).equals ("l")) { lock_mode mode = parse_mode (cmd.substring (1)); lockset.lock (ctrl.get_coordinator (), mode); System.out.println ("Lock complete"); } else if (cmd.length () >= 2 && cmd.substring (0, 1).equals ("t")) { lock_mode mode = parse_mode (cmd.substring (1)); if (lockset.try_lock (ctrl.get_coordinator (), mode)) { System.out.println ("Lock complete"); } else { System.out.println ("Lock uncomplete"); } } else if (cmd.length () >= 2 && cmd.substring (0, 1).equals ("u")) { lock_mode mode = parse_mode (cmd.substring (1)); lockset.unlock (ctrl.get_coordinator (), mode); System.out.println ("Unlock complete"); } else if (cmd.length () >= 3 && cmd.substring (0, 1).equals ("c")) { lock_mode mode = parse_mode (cmd.substring (1)); lock_mode mode1; if (mode.equals (lock_mode.intention_read) || mode.equals (lock_mode.intention_write)) { mode1 = parse_mode (cmd.substring (3)); } else { mode1 = parse_mode (cmd.substring (2)); } lockset.change_mode (ctrl.get_coordinator (), mode, mode1); System.out.println ("Change mode complete"); } } catch (org.omg.CORBA.TRANSACTION_ROLLEDBACK e) { System.out.println ("Error: Transaction RolledBack"); ctrl = null; } catch (org.omg.CORBA.INVALID_TRANSACTION e) { System.out.println ("Error: Transaction invalid"); ctrl = null; } catch (org.omg.CORBA.OBJECT_NOT_EXIST e) { System.out.println ("Error: Transaction finnished"); ctrl = null; } } } catch (Exception e) { e.printStackTrace (); } return true; } static lock_mode parse_mode (String mode) { if (mode.substring (0, 1).equals ("r")) { return lock_mode.read; } else if (mode.substring (0, 1).equals ("w")) { return lock_mode.write; } else if (mode.substring (0, 1).equals ("u")) { return lock_mode.upgrade; } else if (mode.substring (0, 2).equals ("ir")) { return lock_mode.intention_read; } else if (mode.substring (0, 2).equals ("iw")) { return lock_mode.intention_write; } return lock_mode.read; }; /* * static Session get_session( org.omg.CORBA.ORB orb ) throws Exception { * String line; BufferedReader in; Socket quote = new Socket("192.168.1.9", * 9000); in = new BufferedReader(new * InputStreamReader(quote.getInputStream())); line = in.readLine(); while * (line.indexOf("IOR:") != 0) { line = in.readLine(); } in.close(); * quote.close(); * * org.omg.CORBA.Object o = orb.string_to_object(line); return * SessionHelper.narrow(o); } */ };