import java.io.*; import java.sql.*; import java.util.*; import java.awt.*; import java.rmi.*; import informix.jvp.*; import java.rmi.*; import java.rmi.registry.*; public class Logger extends java.applet.Applet { static String message = ""; static ServiceDirectory sdi = null; int a; static JVPServiceQueue queue = null; static String hostname = "crow"; // static String port = "1099:"; static String port = null; static String service = "Logger"; static String servername = "been"; static String servName = null; static void processArgs(String argv[]) { int curArg = 0; while (curArg < argv.length) { if (argv[curArg].charAt(0) == '-') { switch (argv[curArg].charAt(1)) { case 'h': // -hostname curArg++; hostname = argv[curArg]; break; case 'p': // -port curArg++; port = argv[curArg]; break; case 's': // -servername curArg++; servername = argv[curArg]; break; default: System.err.println("Bad parameter: " + argv[curArg]); break; } curArg++; } else { service = argv[curArg]; } } } //public void init() public static void main(String argv[]) { String message = null; Registry registry = null; Integer index = null; int retry; processArgs(argv); try { registry = LocateRegistry.getRegistry(hostname); } catch (Exception e) { System.out.println("Could not locate registry for " + hostname); System.out.println("reason: " + e.getMessage()); return; } System.out.println("Got registry for " + hostname); String reglist[] = null; try { reglist = registry.list(); } catch (RemoteException re) { re.printStackTrace(); } if (reglist.length == 0) { System.out.println("Nothing to connect to"); } else System.out.println("reglist length is " + reglist.length); for (retry = 0; retry < 10 && sdi == null; retry++) { try { sdi = getServiceDirectory(registry); } catch (Exception e) { System.out.println(e.getMessage()); break; } } if (sdi == null) { System.out.println("sdi is null"); return; } printTraceInfo(); try { Integer tid; Vector victor = sdi.getSolanoThreadIds(); for (int v = 0; victor != null && v < victor.size(); v++) { tid = (Integer) victor.elementAt(v); System.out.println(" thread id is " + tid); } } catch (Exception e) { System.out.println("Screen exception: " + e.getMessage()); e.printStackTrace(); } try { SolanoStatus s; Vector victor = sdi.listSolanoThreads(); for (int v = 0; victor != null && v < victor.size(); v++) { boolean res; s = (SolanoStatus) victor.elementAt(v); if (s == null) { System.out.println("Thread info is null"); continue; } System.out.println("Sol: id: " + s.getThreadId() + " isAlive: " + s.getThreadIsAlive() + " IsDaemon: " + s.getThreadIsDaemon()); System.out.println("Sol: getName: " + s.getThreadGetName()); System.out.println("Sol: ToString: " + s.getThreadToString()); //res = getYesNo(); res = true; if (res) { // kill the MT session and Connection //res = sdi.killSolanoConnection(s.getThreadId()); int id = s.getThreadId(); System.out.println(" thread id is " + id); res = sdi.askSolanoThreadToDie(id); System.out.println(" Ask returned " + res); if (!res) { System.out.println("Asking didn't work:" + " Kill Solano Connection"); // kill the MT session and Connection res = sdi.killSolanoConnection(s.getThreadId()); if (res) System.out.println("Closed connection OK"); else System.out.println("FAILED to Closed connection"); } else { System.out.println("Ask Solano to die"); if (res) System.out.println("Closed connection OK"); else System.out.println("FAILED to Closed connection"); } // kill the thread System.out.println(" Kill Solano Thread"); //sdi.killSolanoThread(id); } } } catch (Exception e) { System.out.println("Screen listSolanoThreads exception: " + e.getMessage()); e.printStackTrace(); } service = getServiceName(sdi); retry = 0; while (queue == null && sdi != null) { retry++; if (retry > 10) break; try { queue = getQueue(registry, service); } catch (Exception e) { System.out.println("Couldn't get queue: " + service); try { sdi = getServiceDirectory(registry); } catch (Exception ee) { System.out.println(ee.getMessage()); break; } } } if (queue == null || sdi == null) { System.out.println("Cannot find a ServiceDirectory or Queue"); return; } try { for ( ; (message = (String) queue.getNext()) != null; ) { System.out.println(message); } } catch (Exception e) { System.out.println("Screen getNext exception: " + e.getMessage()); e.printStackTrace(); } /* * unregister ourselves with the all powerful ServiceDirectory */ try { sdi.unregister(service, queue); } catch (Exception e) { System.out.println("Screen unregister exception: " + e.getMessage()); e.printStackTrace(); } } public static String getServiceNameByIndex(String numStr, String [] reglist) { int index = -1; String name = null, in = null; byte ba [] = new byte [20]; while ( index < 0 ) { System.out.println("Which do you wish? [" + numStr + "]"); try { System.in.read(ba); in = new String(ba); } catch (Exception e) { } in = in.trim(); try { index = (int) new Integer(in).intValue(); } catch (Exception e) { System.out.println("Invalid index number: " + e.getMessage()); e.printStackTrace(); index = -1; continue; } try { index = (int) new Integer(in).intValue(); if (index < 1 || index > reglist.length) { if (reglist.length == 1) System.out.println("Index can only be 1"); else System.out.println("Index must be between 1 and " + (reglist.length + 1)); index = -1; continue; } } catch (Exception e) { System.out.println("Invalid index number: " + e.getMessage()); index = -1; continue; } try { name = reglist[index - 1]; break; } catch (Exception e) { System.out.println("bad name reference: " + e.getMessage()); } } return name; } public static boolean getYesNo() { boolean ok = false, res = false; String name = null, in = null; byte ba [] = new byte [20]; while (!ok) { System.out.println("Do you wish to close this connection? [yn]"); try { System.in.read(ba); in = new String(ba); } catch (Exception e) { } in = in.trim(); if (in.charAt(0) == 'n') { res = false; ok = true; } else if (in.charAt(0) == 'y') { res = true; ok = true; } else System.out.println("Wrong answer, y or n?"); } return res; } public static String getRegistryList(Registry registry) { String servName = null; try { String reglist [] = registry.list(); String num = ""; if (reglist.length == 0) { System.out.println("Nothing to connect to"); return null; } for (int i = 0; i < reglist.length; i++) { if (num != "") num = num + ", "; num = num + (i+1); System.out.println((i+1) + " Entry " + reglist[i]); } servName = getServiceNameByIndex(num, reglist); return servName; } catch (Exception e) { System.out.println("getRegistry failed : " + e.getMessage()); e.printStackTrace(); return null; } } public static ServiceDirectory lookupService(Registry reg, String servName) { ServiceDirectory sdi = null; try { System.out.println("looking for: " + servName); sdi = (ServiceDirectory) reg.lookup(servName); } catch (Exception e) { System.out.println("Screen lookup exception: " + e.getMessage()); //e.printStackTrace(); } return sdi; } public static String getServiceName(ServiceDirectory sdi) { String service = null; String num = ""; try { String [] slist = sdi.getJVPServiceList(); for (int j=0; j < slist.length; j++) { System.out.println((j+1) + ") service " + slist[j]); if (num != "") num = num + ", "; num = num + (j+1); } service = getServiceNameByIndex(num, slist); } catch (Exception e) { System.out.println("Screen getJVPServiceList exception: " + e.getMessage()); e.printStackTrace(); } return service; } /** * Given a service name, e.g. Logger, Tracer, get its queue from * which to read messages * * If we get a java.net.ConnectException, there is no ServiceDirectory * for this possibly shut down JVP, unbind it and try from the start * again. */ public static JVPServiceQueue getQueue(Registry reg, String service) throws Exception { JVPServiceQueue queue = null; if (service == null) { System.out.println("no service to get queue for"); return null; } try { queue = sdi.register(service); } catch (Exception e) { System.out.println("Screen register exception: " + e.getMessage()); throw e; } if (queue == null) { System.out.println("queue is null"); return null; } return queue; } public static ServiceDirectory getServiceDirectory(Registry reg) throws Exception { if (servName != null) { System.out.println("1: Unbinding dead ServiceDirectory: " + servName); reg.unbind(servName); } servName = getRegistryList(reg); if (servName == null) throw new Exception("Cannot find any ServiceDirectory"); System.out.println("lookup Service for " + servName); sdi = lookupService(reg, servName); try { System.out.println("test Service"); // test to see if it is really there String zones = sdi.traceGetZoneTable(); } catch (ConnectException ce) { System.out.println("2: Unbinding dead ServiceDirectory: " + servName); reg.unbind(servName); return null; } return sdi; } public static void printTraceInfo() { try { String zones = sdi.traceGetZoneTable(); System.out.println("trace zones is " + zones); int tracelevel = sdi.traceLevel("JVP"); System.out.println("trace level is " + tracelevel); } catch (Exception e) { System.out.println("Screen traceGetZoneTable/traceLevel: " + e.getMessage()); } } }