Jean-Louis, This change breaks compilation on a Java 5 JDK (but works fine with a Java 6 JDK). Here are the errors on Java 5:
[INFO] Compiling 33 source files to /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/target/classes [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Compilation failure /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[33,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[37,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[83,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[88,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[92,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[96,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[101,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java:[106,5] method does not override a method from its superclass /Users/kevan/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java:[54,5] method does not override a method from its superclass On Java 5, @Override is not supported on interface methods. --kevan On Jul 15, 2010, at 5:37 AM, [email protected] wrote: > Author: jlmonteiro > Date: Thu Jul 15 09:37:38 2010 > New Revision: 964353 > > URL: http://svn.apache.org/viewvc?rev=964353&view=rev > Log: > OPENEJB-1305: patch from Andy. Hook standalone shutdown process. > Cool patch! Thanks Andy > > Modified: > > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Main.java > > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java > > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java > > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java > > Modified: > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Main.java > URL: > http://svn.apache.org/viewvc/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Main.java?rev=964353&r1=964352&r2=964353&view=diff > ============================================================================== > --- > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Main.java > (original) > +++ > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Main.java > Thu Jul 15 09:37:38 2010 > @@ -64,8 +64,8 @@ public class Main { > Map<String, Properties> serviceEntries = > finder.mapAvailableProperties(ServerService.class.getName()); > services = serviceEntries.keySet(); > for (String service : services) { > - options.addOption(option(null, service+"-port", "int", > "cmd.start.opt.port", service)); > - options.addOption(option(null, service+"-bind", "host", > "cmd.start.opt.bind", service)); > + options.addOption(option(null, service + "-port", "int", > "cmd.start.opt.port", service)); > + options.addOption(option(null, service + "-bind", "host", > "cmd.start.opt.bind", service)); > } > } catch (IOException e) { > services = Collections.EMPTY_SET; > @@ -115,17 +115,17 @@ public class Main { > String[] opts = {"port", "bind"}; > for (String opt : opts) { > String option = service + "-" + opt; > - if (line.hasOption(option)){ > - props.setProperty(service+"."+opt, > line.getOptionValue(option)); > + if (line.hasOption(option)) { > + props.setProperty(service + "." + opt, > line.getOptionValue(option)); > } > } > } > > try { > - SystemInstance system = SystemInstance.get(); > + final SystemInstance system = SystemInstance.get(); > File libs = system.getHome().getDirectory("lib"); > system.getClassPath().addJarsToPath(libs); > - initServer(); > + initServer(system); > } catch (DontStartServerException ignored) { > } catch (Exception e) { > e.printStackTrace(); > @@ -134,7 +134,7 @@ public class Main { > > private static void help(Options options) { > HelpFormatter formatter = new HelpFormatter(); > - formatter.printHelp("start [options]", > "\n"+i18n("cmd.start.description"), options, "\n"); > + formatter.printHelp("start [options]", "\n" + > i18n("cmd.start.description"), options, "\n"); > } > > private static Option option(String shortOpt, String longOpt, String > description) { > @@ -142,21 +142,23 @@ public class Main { > } > > private static Option option(String shortOpt, String longOpt, String > argName, String description, Object... details) { > - return > OptionBuilder.withLongOpt(longOpt).withArgName(argName).hasArg().withDescription(i18n(description,details)).create(shortOpt); > + return > OptionBuilder.withLongOpt(longOpt).withArgName(argName).hasArg().withDescription(i18n(description, > details)).create(shortOpt); > } > > private static String i18n(String key, Object... details) { > return messages.format(key, details); > } > > + private static void initServer(final SystemInstance system) throws > Exception { > + Server server = Server.getInstance(); > + server.init(system.getProperties()); > > - private static void initServer() throws Exception { > - Server server = new Server(); > - server.init(SystemInstance.get().getProperties()); > + system.setComponent(Server.class, server); > server.start(); > } > } > > class DontStartServerException extends Exception { > + > private static final long serialVersionUID = 1L; > } > > Modified: > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java > URL: > http://svn.apache.org/viewvc/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java?rev=964353&r1=964352&r2=964353&view=diff > ============================================================================== > --- > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java > (original) > +++ > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/Server.java > Thu Jul 15 09:37:38 2010 > @@ -35,14 +35,14 @@ import org.apache.openejb.util.Propertie > */ > public class Server implements Service { > // FIXME: Remove it completely once we ensure PropertiesService (below) > works well > + > Properties props; > - > private PropertiesService propertiesService; > + private static Server server; > + private static ServiceManager manager; > > - static Server server; > - private ServiceManager manager; > + public static Server getInstance() { > > - public static Server getServer() { > if (server == null) { > server = new Server(); > } > @@ -51,12 +51,13 @@ public class Server implements Service { > } > > // TODO: Remove it once init() suits our (initialisation) needs > + @Override > public void init(Properties props) throws Exception { > this.props = props; > > SystemInstance system = SystemInstance.get(); > File home = system.getHome().getDirectory(); > - system.setProperty("openejb.deployments.classpath.include", > ".*/"+home.getName()+"/lib/.*"); > + system.setProperty("openejb.deployments.classpath.include", ".*/" + > home.getName() + "/lib/.*"); > > system.setProperty("openejb.deployments.classpath.require.descriptor", > "true"); > system.setProperty("openejb.deployments.classpath.filter.systemapps", > "false"); > > @@ -66,9 +67,10 @@ public class Server implements Service { > System.out.println("[init] OpenEJB Remote Server"); > } > > - if (manager == null){ > + if (manager == null) { > manager = ServiceManager.getManager(); > } > + > manager.init(); > } > > @@ -85,7 +87,7 @@ public class Server implements Service { > System.out.println("[init] OpenEJB Remote Server"); > } > > - manager.init(); > + manager.init(); > } > > public void start() throws Exception { > @@ -93,26 +95,25 @@ public class Server implements Service { > } > > public void stop() throws Exception { > - manager.stop(); > OpenEJB.destroy(); > + manager.stop(); > } > > public void addService(URI uri) { > - > } > > public static class ServerServiceFactory { > + > public ServerService createService(URI location) throws IOException { > return null; > } > } > > public void setServiceManager(ServiceManager serviceManager) { > - this.manager = serviceManager; > + manager = serviceManager; > } > - > + > public void setPropertiesService(PropertiesService propertiesService) { > this.propertiesService = propertiesService; > } > } > - > > Modified: > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java > URL: > http://svn.apache.org/viewvc/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java?rev=964353&r1=964352&r2=964353&view=diff > ============================================================================== > --- > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java > (original) > +++ > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java > Thu Jul 15 09:37:38 2010 > @@ -23,13 +23,8 @@ import java.util.List; > import java.util.Map; > import java.util.Properties; > > -import javax.naming.Binding; > -import javax.naming.NamingEnumeration; > -import javax.naming.NamingException; > -import javax.resource.spi.ResourceAdapter; > > import org.apache.openejb.loader.SystemInstance; > -import org.apache.openejb.spi.ContainerSystem; > import org.apache.xbean.finder.ResourceFinder; > > /** > @@ -39,7 +34,6 @@ import org.apache.xbean.finder.ResourceF > public class SimpleServiceManager extends ServiceManager { > > private ServerService[] daemons; > - > private boolean stop = false; > > public SimpleServiceManager() { > @@ -61,9 +55,9 @@ public class SimpleServiceManager extend > // Each contains the class name of the daemon implamentation > // The port to use > // whether it's turned on > - > // May be reusable elsewhere, move if another use occurs > public static class ServiceFinder { > + > private final ResourceFinder resourceFinder; > private ClassLoader classLoader; > > @@ -141,7 +135,7 @@ public class SimpleServiceManager extend > printRow(d.getName(), d.getIP(), d.getPort() + ""); > } > } catch (Exception e) { > - logger.fatal("Service Start Failed: "+d.getName() + " " + > d.getIP() + " " + d.getPort() + ": " + e.getMessage()); > + logger.fatal("Service Start Failed: " + d.getName() + " " + > d.getIP() + " " + d.getPort() + ": " + e.getMessage()); > if (display) { > printRow(d.getName(), "----", "FAILED"); > } > @@ -151,17 +145,19 @@ public class SimpleServiceManager extend > System.out.println("-------"); > System.out.println("Ready!"); > } > - if (!block) return; > + if (!block) { > + return; > + } > > /* > - * This will cause the user thread (the thread that keeps the > - * vm alive) to go into a state of constant waiting. > - * Each time the thread is woken up, it checks to see if > - * it should continue waiting. > - * > - * To stop the thread (and the VM), just call the stop method > - * which will set 'stop' to true and notify the user thread. > - */ > + * This will cause the user thread (the thread that keeps the > + * vm alive) to go into a state of constant waiting. > + * Each time the thread is woken up, it checks to see if > + * it should continue waiting. > + * > + * To stop the thread (and the VM), just call the stop method > + * which will set 'stop' to true and notify the user thread. > + */ > try { > while (!stop) { > > @@ -175,36 +171,14 @@ public class SimpleServiceManager extend > > @Override > public synchronized void stop() throws ServiceException { > - logger.info("Received stop signal"); > + logger.info("Stopping server services"); > stop = true; > > - try { > - ContainerSystem containerSystem = > SystemInstance.get().getComponent(ContainerSystem.class); > - NamingEnumeration<Binding> namingEnumeration = null; > - try { > - namingEnumeration = > containerSystem.getJNDIContext().listBindings("openejb/resourceAdapter"); > - } catch (NamingException ignored) { > - // no resource adapters were created > - } > - while (namingEnumeration != null && > namingEnumeration.hasMoreElements()) { > - Binding binding = namingEnumeration.nextElement(); > - Object object = binding.getObject(); > - ResourceAdapter resourceAdapter = (ResourceAdapter) object; > - try { > - resourceAdapter.stop(); > - } catch (Exception e) { > - logger.fatal("ResourceAdapter Shutdown Failed: > "+binding.getName(), e); > - } > - } > - } catch (Throwable e) { > - logger.fatal("Unable to get ResourceAdapters from JNDI. Stop > must be called on them for proper vm shutdown.", e); > - } > - > for (int i = 0; i < daemons.length; i++) { > try { > daemons[i].stop(); > } catch (ServiceException e) { > - logger.fatal("Service Shutdown Failed: > "+daemons[i].getName()+". Exception: "+e.getMessage(), e); > + logger.fatal("Service Shutdown Failed: " + > daemons[i].getName() + ". Exception: " + e.getMessage(), e); > } > } > notifyAll(); > > Modified: > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java > URL: > http://svn.apache.org/viewvc/openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java?rev=964353&r1=964352&r2=964353&view=diff > ============================================================================== > --- > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java > (original) > +++ > openejb/branches/openejb-3.1.x/server/openejb-server/src/main/java/org/apache/openejb/server/admin/AdminDaemon.java > Thu Jul 15 09:37:38 2010 > @@ -25,12 +25,16 @@ import org.apache.openejb.server.Service > import org.apache.openejb.server.Server; > import org.apache.openejb.client.RequestMethodConstants; > import org.apache.openejb.loader.SystemInstance; > +import org.apache.openejb.util.LogCategory; > +import org.apache.openejb.util.Logger; > > public class AdminDaemon implements ServerService { > > + @Override > public void init(Properties props) throws Exception { > } > > + @Override > public void service(Socket socket) throws ServiceException, IOException { > InputStream in = null; > > @@ -39,54 +43,68 @@ public class AdminDaemon implements Serv > > byte requestType = (byte) in.read(); > > - if (requestType == -1) { > - return; > - } > - > switch (requestType) { > + case -1: > + return; > case RequestMethodConstants.STOP_REQUEST_Quit: > case RequestMethodConstants.STOP_REQUEST_quit: > case RequestMethodConstants.STOP_REQUEST_Stop: > case RequestMethodConstants.STOP_REQUEST_stop: > Server server = > SystemInstance.get().getComponent(Server.class); > server.stop(); > - > + break; > + default: > + //If this turns up in the logs then it is time to take > action > + Logger.getInstance(LogCategory.OPENEJB_SERVER, > AdminDaemon.class).warning("Invalid Server Socket request: " + requestType); > + break; > } > > - } catch (SecurityException e) { > - > } catch (Throwable e) { > - > + Logger.getInstance(LogCategory.OPENEJB_SERVER, > AdminDaemon.class).warning("Server Socket request failed", e); > } finally { > - try { > - if (in != null) in.close(); > - if (socket != null) socket.close(); > - } catch (Throwable t) { > + if (null != in) { > + try { > + in.close(); > + } catch (Throwable t) { > + //Ignore > + } > + } > > + if (null != socket) { > + try { > + socket.close(); > + } catch (Throwable t) { > + //Ignore > + } > } > } > } > > + @Override > public void service(InputStream in, OutputStream out) throws > ServiceException, IOException { > throw new UnsupportedOperationException("Method not implemented: > service(InputStream in, OutputStream out)"); > } > - > + > + @Override > public void start() throws ServiceException { > } > > + @Override > public void stop() throws ServiceException { > } > > + @Override > public int getPort() { > return 0; > } > > + @Override > public String getIP() { > return ""; > } > > + @Override > public String getName() { > return "admin thread"; > } > - > } > >
