Why not use GShell here? ie. just put lib/boot/gshell-bootstrap.jar on your classpath?

--jason


On Dec 4, 2008, at 4:54 PM, Jack Cai wrote:

I have been working on enabling Geronimo to run as a Windows service using Apache Commons Deamon procrun utility. I have been making good progress. Now I have some problems and would like to hear your opinions.

1. I have gone through all the open JIRAs of that project and are fixing some of them. I have also reported and fixed several found by myself, and a few improvements too. But nobody is helping to commit my patches. Will it be OK that Geronimo just use the binary code built by me without maintaining the latest code (I mean, which includes my patches)? Tomcat only include procrun's binary today (as tomcat6.exe and tomcat6w.exe) which is probably built with the latest code from Apache Commons.

2. Currently procrun need the starter class and stopper class to be on the same classpath. Unfortunately our server.jar and shutdown.jar contains different config.ser, which screws things up. So I tried various ways to work around this problem before I change procrun's design -

A. write a wrapper, which use a URLClassloader to load different jar for startup and shutdown. To do so, I had to first remove the jpa agent, as the system classloader (parent of my URLClassloader) will load the config.ser in jpa.jar. After that Geronimo starts to boot, until the below exception occurs:

17:43:19,421 WARN [1/car,j2eeType=GBean,name=JMXService] Failure in JMXConnector service:jmx:rmi://0.0.0.0:9999/jndi/rmi://0.0.0.0:1099/ JMXConnector 17:43:19,421 ERROR [GBeanInstanceState] Error while starting; GBean is now in the FAILED state: abstractName="org.apache.geronimo.framework/j2ee-security/2.1.1/car? ServiceModule=org.apache.geronimo.framework/j2ee-security/2.1.1/ car,j2eeType=GBean,name=JMXService" java.lang.NoClassDefFoundError: org.apache.geronimo.kernel.rmi.RMIClassLoaderSpiImpl at java .rmi.server.RMIClassLoader.initializeProvider(RMIClassLoader.java:680)

B. so I rewrite the wrapper and use (dirty) reflections to add jar file to system classloader's classpath based on the action (start/ stop). Sadly, the jpa.jar again gets into the way. Obviously the jpa.jar is searched before the newly added jar. If I remove the jpa agent, then things go smoothly. I could do more hack with the classloader to work around the jpa.jar. But this hacking does not sound right to me in the first place.

C. Use procrun's jvm mode (instead of java command line), and only put server.jar in classpath. Write a simple class which calls "System.exit(0)" for stopping Geronimo. This works, but only that procrun does not clean up properly.

Are there other better options? Appreciate your help!

-Jack Cai


Reply via email to