Admin.java
// Copyright (c) ZeroC, Inc.
package com.zeroc.IceBox;
import com.zeroc.Ice.Communicator;
import com.zeroc.Ice.InitializationData;
import com.zeroc.Ice.ObjectPrx;
import com.zeroc.Ice.Properties;
import com.zeroc.Ice.Util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
final class Admin {
private static void usage() {
System.err.println(
"Usage: com.zeroc.IceBox.Admin [options] [command...]\n"
+ "Options:\n"
+ "-h, --help Show this message.\n"
+ "-v, --version Display the Ice version.\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;
List<String> commands = new ArrayList<>();
InitializationData initData = new InitializationData();
initData.properties = new Properties(args, new Properties(Collections.singletonList("IceBoxAdmin")), commands);
try (Communicator communicator = Util.initialize(initData)) {
Runtime.getRuntime()
.addShutdownHook(
new Thread(
() -> {
communicator.destroy();
}));
status = run(communicator, commands);
}
System.exit(status);
}
private static int run(
Communicator communicator, List<String> commands) {
if (commands.isEmpty()) {
usage();
return 0;
}
for (String command : commands) {
if ("-h".equals(command) || "--help".equals(command)) {
usage();
return 0;
} else if ("-v".equals(command) || "--version".equals(command)) {
System.out.println(Util.stringVersion());
return 0;
} else if (command.startsWith("-")) {
System.err.println("IceBox.Admin: unknown option `" + command + "'");
usage();
return 1;
}
}
ObjectPrx base =
communicator.propertyToProxy("IceBoxAdmin.ServiceManager.Proxy");
if (base == null) {
System.err.println(
"IceBox.Admin: property 'IceBoxAdmin.ServiceManager.Proxy' is not set");
return 1;
}
ServiceManagerPrx manager =
ServiceManagerPrx.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 ("shutdown".equals(command)) {
manager.shutdown();
} else if ("start".equals(command)) {
if (++i >= commands.size()) {
System.err.println("IceBox.Admin: no service name specified.");
return 1;
}
String service = commands.get(i);
try {
manager.startService(service);
} catch (NoSuchServiceException ex) {
System.err.println("IceBox.Admin: unknown service `" + service + "'");
return 1;
} catch (AlreadyStartedException ex) {
System.err.println("IceBox.Admin: service already started.");
}
} else if ("stop".equals(command)) {
if (++i >= commands.size()) {
System.err.println("IceBox.Admin: no service name specified.");
return 1;
}
String service = commands.get(i);
try {
manager.stopService(service);
} catch (NoSuchServiceException ex) {
System.err.println("IceBox.Admin: unknown service `" + service + "'");
return 1;
} catch (AlreadyStoppedException ex) {
System.err.println("IceBox.Admin: service already stopped.");
}
} else {
System.err.println("IceBox.Admin: unknown command `" + command + "'");
usage();
return 1;
}
}
return 0;
}
}