Re: [OpenJMS 0.7.6.1] How to Shutdown Server Programatically?
Tim Anderson <[email protected]> Sat, 16 Sep 2006 17:28:51 +1000
| Newsgroups | gmane.comp.java.openjms.user |
|---|---|
| Message-ID | <[email protected]> |
A simpler approach would be to edit
src/main/org/exolab/jms/server/AdminConnection.java
and change the stopServer() method so that it doesn't invoke
System.exit(1) if an embedded
connector is present.
This is the approach taken 0.7.7.
-Tim
Edwin Lee wrote:
> Hi guys,
>
> i have an application which uses OpenJMS 0.7.6.1, and i want to be
> able to start up and shutdown the OpenJMS server from within my
> application programatically.
>
> i start up the server as follows:
>
> // Configuration object (configuration) is created and populated here
> JmsServer jmsServer = new JmsServer(configuration);
> jmsServer.init();
>
> The starting up is great. The server is up and running. i can send
> messages, receive messages, etc.
>
> Now for the shutting down of the server. i can't seem to find any API
> to shutdown the server.
>
> i tried to trace what shutdown.bat (or shutdown.sh) does, and arrived at this:
>
> AbstractAdminConnection onlineConnection = new OnlineConnection(u, p);
> onlineConnection.stopServer();
>
> which *does* shutdown the server, but it also shuts down the rest of
> my application, due to an eventual call to System.exit(0). So i can't
> really use this, as i need the rest of my application to continue
> running.
>
> So i tried to hack together something which required reflection to
> gain access to some of the private fields:
>
> Class jmsServerClass = jmsServer.getClass();
>
> Field servicesField = jmsServerClass.getDeclaredField("_services");
> servicesField.setAccessible(true);
> ServiceManager services = (ServiceManager) servicesField.get(jmsServer);
>
> services.stopAll();
>
> Field interfacesField = jmsServerClass.getDeclaredField("_interfaces");
> interfacesField.setAccessible(true);
> JmsServerIfc[] interfaces = (JmsServerIfc[]) interfacesField.get(jmsServer);
> if (interfaces != null)
> {
> for (int i = 0; i < interfaces.length; i++)
> {
> if (interfaces[i] instanceof IpcJmsServer)
> {
> ((IpcJmsServer) interfaces[i]).removeAllConnections();
>
> Class ipcJmsServerClass = interfaces[i].getClass();
> Field serverField = ipcJmsServerClass.getDeclaredField("_server");
> serverField.setAccessible(true);
> MultiplexConnectionServerIfc server =
> (MultiplexConnectionServerIfc) serverField.get(interfaces[i]);
> server.shutdownAll();
> }
> }
> }
>
> Field jndiInterfacesField = jmsServerClass.getDeclaredField("_jndiInterfaces");
> jndiInterfacesField.setAccessible(true);
> JndiServerIfc[] jndiInterfaces = (JndiServerIfc[])
> jndiInterfacesField.get(jmsServer);
> if (jndiInterfaces != null)
> {
> for (int i = 0; i < jndiInterfaces.length; i++)
> {
> if (jndiInterfaces[i] instanceof IpcJndiServer)
> {
> Class ipcJndiServerClass = jndiInterfaces[i].getClass();
> Field serverField = ipcJndiServerClass.getDeclaredField("_server");
> serverField.setAccessible(true);
> Server server = (Server) serverField.get(jndiInterfaces[i]);
> server.stop();
> }
> }
> }
>
> jmsServer = null;
>
> but i ran into a ClassCastException at the point server.shutdownAll().
>
> The stack trace of the CCE points to line 185 of
> org.exolab.core.mipc.MultiplexConnectionServer, which is
> ((MultiplexConnectionIfc) connections[i]).finish();
>
> i figure i must have done something wrongly here as well.
>
> Any advice on how to shutdown the server programatically?
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> openjms-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/openjms-user
>
>
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642