diff options
author | Austin Henriksen <austin.r.henriksen79@gmail.com> | 2018-12-05 14:20:48 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2018-12-05 14:20:48 -0500 |
commit | cfd671290ca684fea36263ea5a01cf1307f86643 (patch) | |
tree | 1225e193b0ac9237bfb0dea35a82a4eb741342c4 /java-compat/src | |
parent | More TOC fixes (diff) | |
download | ice-cfd671290ca684fea36263ea5a01cf1307f86643.tar.bz2 ice-cfd671290ca684fea36263ea5a01cf1307f86643.tar.xz ice-cfd671290ca684fea36263ea5a01cf1307f86643.zip |
Removes Ice.Application from IceBox in Java, Java-Compat, and C# (#314)
Diffstat (limited to 'java-compat/src')
3 files changed, 232 insertions, 167 deletions
diff --git a/java-compat/src/IceBox/src/main/java/IceBox/Admin.java b/java-compat/src/IceBox/src/main/java/IceBox/Admin.java index 515cf8055f1..4701f24f495 100644 --- a/java-compat/src/IceBox/src/main/java/IceBox/Admin.java +++ b/java-compat/src/IceBox/src/main/java/IceBox/Admin.java @@ -11,174 +11,192 @@ package IceBox; public final class Admin { - private static class Client extends Ice.Application + static class ShutdownHook implements Runnable { - private void - usage() + private Ice.Communicator communicator; + + ShutdownHook(Ice.Communicator communicator) { - System.err.println( - "Usage: " + appName() + " [options] [command...]\n" + - "Options:\n" + - "-h, --help Show this message.\n" + - "\n" + - "Commands:\n" + - "start SERVICE Start a service.\n" + - "stop SERVICE Stop a service.\n" + - "shutdown Shutdown the server."); + this.communicator = communicator; } @Override - public int - run(String[] args) + public void + run() { - java.util.List<String> commands = new java.util.ArrayList<String>(); + communicator.destroy(); + } + } - int idx = 0; - while(idx < args.length) + private static void + usage() + { + System.err.println( + "Usage: IceBox.Admin [options] [command...]\n" + + "Options:\n" + + "-h, --help Show this message.\n" + + "\n" + + "Commands:\n" + + "start SERVICE Start a service.\n" + + "stop SERVICE Stop a service.\n" + + "shutdown Shutdown the server."); + } + + public static void + main(String[] args) + { + int status = 0; + Ice.StringSeqHolder argHolder = new Ice.StringSeqHolder(args); + + try(Ice.Communicator communicator = Ice.Util.initialize(argHolder)) + { + Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownHook(communicator))); + + java.util.List<String> commands = new java.util.ArrayList<String>(java.util.Arrays.asList(argHolder.value)); + + for(String command : commands) { - if(args[idx].equals("-h") || args[idx].equals("--help")) + if(command.equals("-h") || command.equals("--help")) { usage(); - return 1; + status = 1; + break; } - else if(args[idx].charAt(0) == '-') + else if(command.charAt(0) == '-') { - System.err.println(appName() + ": unknown option `" + args[idx] + "'"); + System.err.println("IceBox.Admin: unknown option `" + command + "'"); usage(); - return 1; - } - else - { - commands.add(args[idx]); - ++idx; + status = 1; + break; } } if(commands.isEmpty()) { usage(); - return 0; + status = 0; } + else if(status == 0) + { + status = run(communicator, commands); + } + } + + System.exit(status); + } - Ice.ObjectPrx base = communicator().propertyToProxy("IceBoxAdmin.ServiceManager.Proxy"); + public static int + run(Ice.Communicator communicator, java.util.List<String> commands) + { + Ice.ObjectPrx base = communicator.propertyToProxy("IceBoxAdmin.ServiceManager.Proxy"); - if(base == null) - { - // - // The old deprecated way to retrieve the service manager proxy - // + if(base == null) + { + // + // The old deprecated way to retrieve the service manager proxy + // - Ice.Properties properties = communicator().getProperties(); + Ice.Properties properties = communicator.getProperties(); - Ice.Identity managerIdentity = new Ice.Identity(); - managerIdentity.category = properties.getPropertyWithDefault("IceBox.InstanceName", "IceBox"); - managerIdentity.name = "ServiceManager"; + Ice.Identity managerIdentity = new Ice.Identity(); + managerIdentity.category = properties.getPropertyWithDefault("IceBox.InstanceName", "IceBox"); + managerIdentity.name = "ServiceManager"; - String managerProxy; - if(properties.getProperty("Ice.Default.Locator").length() == 0) + String managerProxy; + if(properties.getProperty("Ice.Default.Locator").length() == 0) + { + String managerEndpoints = properties.getProperty("IceBox.ServiceManager.Endpoints"); + if(managerEndpoints.length() == 0) { - String managerEndpoints = properties.getProperty("IceBox.ServiceManager.Endpoints"); - if(managerEndpoints.length() == 0) - { - System.err.println(appName() + ": property `IceBoxAdmin.ServiceManager.Proxy' is not set"); - return 1; - } - - managerProxy = "\"" + communicator().identityToString(managerIdentity) + "\" :" + managerEndpoints; + System.err.println("IceBox.Admin: property `IceBoxAdmin.ServiceManager.Proxy' is not set"); + return 1; } - else + + managerProxy = "\"" + communicator.identityToString(managerIdentity) + "\" :" + managerEndpoints; + } + else + { + String managerAdapterId = properties.getProperty("IceBox.ServiceManager.AdapterId"); + if(managerAdapterId.length() == 0) { - String managerAdapterId = properties.getProperty("IceBox.ServiceManager.AdapterId"); - if(managerAdapterId.length() == 0) - { - System.err.println(appName() + ": property `IceBoxAdmin.ServiceManager.Proxy' is not set"); - return 1; - } - - managerProxy = "\"" + communicator().identityToString(managerIdentity) + "\" @" + managerAdapterId; + System.err.println("IceBox.Admin: property `IceBoxAdmin.ServiceManager.Proxy' is not set"); + return 1; } - base = communicator().stringToProxy(managerProxy); + managerProxy = "\"" + communicator.identityToString(managerIdentity) + "\" @" + managerAdapterId; } - IceBox.ServiceManagerPrx manager = IceBox.ServiceManagerPrxHelper.checkedCast(base); - if(manager == null) + base = communicator.stringToProxy(managerProxy); + } + + IceBox.ServiceManagerPrx manager = IceBox.ServiceManagerPrxHelper.checkedCast(base); + if(manager == null) + { + System.err.println("IceBox.Admin: `" + base.toString() + "' is not an IceBox::ServiceManager"); + return 1; + } + + for(int i = 0; i < commands.size(); i++) + { + String command = commands.get(i); + if(command.equals("shutdown")) { - System.err.println(appName() + ": `" + base.toString() + "' is not an IceBox::ServiceManager"); - return 1; + manager.shutdown(); } - - for(int i = 0; i < commands.size(); i++) + else if(command.equals("start")) { - String command = commands.get(i); - if(command.equals("shutdown")) + if(++i >= commands.size()) + { + System.err.println("IceBox.Admin: no service name specified."); + return 1; + } + + String service = commands.get(i); + try { - manager.shutdown(); + manager.startService(service); } - else if(command.equals("start")) + catch(IceBox.NoSuchServiceException ex) { - if(++i >= commands.size()) - { - System.err.println(appName() + ": no service name specified."); - return 1; - } - - String service = commands.get(i); - try - { - manager.startService(service); - } - catch(IceBox.NoSuchServiceException ex) - { - System.err.println(appName() + ": unknown service `" + service + "'"); - return 1; - } - catch(IceBox.AlreadyStartedException ex) - { - System.err.println(appName() + "service already started."); - } + System.err.println("IceBox.Admin: unknown service `" + service + "'"); + return 1; } - else if(command.equals("stop")) + catch(IceBox.AlreadyStartedException ex) { - if(++i >= commands.size()) - { - System.err.println(appName() + ": no service name specified."); - return 1; - } - - String service = commands.get(i); - try - { - manager.stopService(service); - } - catch(IceBox.NoSuchServiceException ex) - { - System.err.println(appName() + ": unknown service `" + service + "'"); - return 1; - } - catch(IceBox.AlreadyStoppedException ex) - { - System.err.println(appName() + "service already stopped."); - } + System.err.println("IceBox.Admin: service already started."); } - else + } + else if(command.equals("stop")) + { + if(++i >= commands.size()) { - System.err.println(appName() + ": unknown command `" + command + "'"); - usage(); + System.err.println("IceBox.Admin: no service name specified."); return 1; } - } - return 0; + String service = commands.get(i); + try + { + manager.stopService(service); + } + catch(IceBox.NoSuchServiceException ex) + { + System.err.println("IceBox.Admin: unknown service `" + service + "'"); + return 1; + } + catch(IceBox.AlreadyStoppedException ex) + { + System.err.println("IceBox.Admin: service already stopped."); + } + } + else + { + System.err.println("IceBox.Admin: unknown command `" + command + "'"); + usage(); + return 1; + } } - } - - public static void - main(String[] args) - { - Client app = new Client(); - int rc = app.main("IceBox.Admin", args); - System.exit(rc); + return 0; } } diff --git a/java-compat/src/IceBox/src/main/java/IceBox/Server.java b/java-compat/src/IceBox/src/main/java/IceBox/Server.java index 06f4996c7b7..0a129f82797 100644 --- a/java-compat/src/IceBox/src/main/java/IceBox/Server.java +++ b/java-compat/src/IceBox/src/main/java/IceBox/Server.java @@ -9,8 +9,56 @@ package IceBox; -public final class Server extends Ice.Application +public final class Server { + static class ShutdownHook extends Thread + { + private Ice.Communicator _communicator; + private final java.lang.Object _doneMutex = new java.lang.Object(); + private boolean _done = false; + + ShutdownHook(Ice.Communicator communicator) + { + _communicator = communicator; + } + + @Override + public void + run() + { + _communicator.shutdown(); + + synchronized(_doneMutex) + { + // + // Wait on the server to finish shutting down before exiting the ShutdownHook. This ensures + // that all IceBox services have had a chance to shutdown cleanly before the JVM terminates. + // + while(!_done) + { + try + { + _doneMutex.wait(); + } + catch(InterruptedException ex) + { + break; + } + } + } + } + + public void + done() + { + synchronized(_doneMutex) + { + _done = true; + _doneMutex.notify(); + } + } + } + private static void usage() { @@ -24,56 +72,64 @@ public final class Server extends Ice.Application public static void main(String[] args) { + int status = 0; + Ice.StringSeqHolder argHolder = new Ice.StringSeqHolder(args); + Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Admin.DelayCreation", "1"); + ShutdownHook shutdownHook = null; - Server server = new Server(); - System.exit(server.main("IceBox.Server", args, initData)); - } - - @Override - public int - run(String[] args) - { - final String prefix = "IceBox.Service."; - Ice.Properties properties = communicator().getProperties(); - java.util.Map<String, String> services = properties.getPropertiesForPrefix(prefix); - java.util.List<String> argSeq = new java.util.ArrayList<String>(args.length); - for(String s : args) + try(Ice.Communicator communicator = Ice.Util.initialize(argHolder, initData)) { - argSeq.add(s); - } + shutdownHook = new ShutdownHook(communicator); + Runtime.getRuntime().addShutdownHook(shutdownHook); - for(java.util.Map.Entry<String, String> entry : services.entrySet()) - { - String name = entry.getKey().substring(prefix.length()); - for(int i = 0; i < argSeq.size(); ++i) + final String prefix = "IceBox.Service."; + Ice.Properties properties = communicator.getProperties(); + java.util.Map<String, String> services = properties.getPropertiesForPrefix(prefix); + + for(String arg : argHolder.value) { - if(argSeq.get(i).startsWith("--" + name)) + boolean valid = false; + for(java.util.Map.Entry<String, String> entry : services.entrySet()) + { + String name = entry.getKey().substring(prefix.length()); + if(arg.startsWith("--" + name)) + { + valid = true; + break; + } + } + if(!valid) { - argSeq.remove(i); - i--; + if(arg.equals("-h") || arg.equals("--help")) + { + usage(); + status = 1; + break; + } + else + { + System.err.println("IceBox.Server: unknown option `" + arg + "'"); + usage(); + status = 1; + break; + } } } - } - for(String arg : argSeq) + ServiceManagerI serviceManagerImpl = new ServiceManagerI(communicator, argHolder.value); + status = serviceManagerImpl.run(); + } + finally { - if(arg.equals("-h") || arg.equals("--help")) - { - usage(); - return 0; - } - else + if(shutdownHook != null) { - System.err.println("Server: unknown option `" + arg + "'"); - usage(); - return 1; + shutdownHook.done(); } } - ServiceManagerI serviceManagerImpl = new ServiceManagerI(communicator(), args); - return serviceManagerImpl.run(); + System.exit(status); } } diff --git a/java-compat/src/IceBox/src/main/java/IceBox/ServiceManagerI.java b/java-compat/src/IceBox/src/main/java/IceBox/ServiceManagerI.java index 670a63f1909..42eedb3d490 100644 --- a/java-compat/src/IceBox/src/main/java/IceBox/ServiceManagerI.java +++ b/java-compat/src/IceBox/src/main/java/IceBox/ServiceManagerI.java @@ -430,14 +430,6 @@ public class ServiceManagerI extends _ServiceManagerDisp } // - // Don't move after the adapter activation. This allows - // applications to wait for the service manager to be - // reachable before sending a signal to shutdown the - // IceBox. - // - Ice.Application.shutdownOnInterrupt(); - - // // Register "this" as a facet to the Admin object and // create Admin object // @@ -471,7 +463,6 @@ public class ServiceManagerI extends _ServiceManagerDisp } _communicator.waitForShutdown(); - Ice.Application.defaultInterrupt(); } catch(FailureException ex) { |