-
1. Re: Running JBoss as windows service with procrun
peterj Jul 20, 2009 12:54 PM (in response to tw)I haven't used procrun (JBoss AS 5.1 comes with the necessary files to run it as a service (well, supposedly 5.0.x also comes with those files but they are broke)). For loading the jvm.dll directly, have you specified to correct JVM option? Did you examine the exact command line options passed to java.exe within run.bat? And are you configuring those exact same options for runproc?
-
2. Re: Running JBoss as windows service with procrun
tw Jul 20, 2009 1:14 PM (in response to tw)Yes, I'm able to launch JBoss through procrun when using the standalone java mode with the options that are otherwise produced by run.bat. But when switching to the jvm.dll mode, these same options yield different behavior and JBoss fails to load.
The two advantages I see for using procrun are:
(1) Service manager with icon in system tray to configure/stop/start.
(2) Distinct process name in task manager (when launched through jvm.dll).
Is there any other wrapper available that provides the same and is known to work with JBoss? -
3. Re: Running JBoss as windows service with procrun
peterj Jul 20, 2009 1:32 PM (in response to tw)I think that JavaSevice (http://javaservice.objectweb.org/) loads the JVM directly, but it has fallen out of favor: http://www.jboss.org/community/wiki/RunJBossAsAServiceOnWindows
Here is one more thing you can try. Set _JAVA_LAUNCHER_DEBUG and run run.bat. This option causes java.exe to print out, among other things, the exact parameters passed to the JVM.
If that doesn't help you, then could you provide details on how you configured procrun?
One other thought - to meet objective 2, you could always copy java.exe as jboss.exe and change run.bat to use jboss.exe. I've done something similar before. -
4. Re: Running JBoss as windows service with procrun
peterj Jul 20, 2009 1:33 PM (in response to tw)Bah, forgot about the two-url-tags-won't-work-in-a-single-paragraph bug:
http://javaservice.objectweb.org/
http://www.jboss.org/community/wiki/RunJBossAsAServiceOnWindows -
5. Re: Running JBoss as windows service with procrun
tw Jul 20, 2009 7:02 PM (in response to tw)Yes, copying java.exe would be the method of last resort, if nothing else helps.
So far I know that the JBoss startup via org.jboss.Main shows a different class loading behavior, depending on whether it is runs through java.exe or procrun.
Using my own main class and jconsole I have verified that the JVM arguments are identical in both cases and so are the system properties.
I get the _JAVA_LAUNCHER_DEBUG output only through java.exe, so I would assume it is produced by the launcher and not by jvm.dll?
Here are the procrun commands to register the service for either case:set JBOSS_DIR=c:\JBoss5 set JAVA_HOME="C:\Program Files (x86)\Java\jdk1.6.0_12" rem delete existing service "%JBOSS_DIR%\bin\jboss5.exe" //DS//jboss5 rem register service "%JBOSS_DIR%\bin\jboss5.exe" //IS//jboss5 --DisplayName "jboss5" --Description "jboss5 service test" --LogPath "%JBOSS_DIR%\server\default\log" --Install "%JBOSS_DIR%\bin\jboss5.exe" --Jvm %JAVA_HOME%\jre\bin\server\jvm.dll --StartPath "%JBOSS_DIR%" --StopPath "%JBOSS_DIR%" --StdOutput auto --StdError auto rem jvm.dll mode "%JBOSS_DIR%\bin\jboss5.exe" //US//jboss5 --Classpath "%JBOSS_DIR%\bin\run.jar" --StartClass org.jboss.Main --StopClass org.jboss.Shutdown --StartParams "-c#default#-b#0.0.0.0" --StopParams TBD --StartMode jvm --StopMode jvm "%JBOSS_DIR%\bin\jboss5.exe" //US//jboss5 --JvmOptions "-Dprogram.name=run.bat#-Xms128m#-Xmx512m#-XX:MaxPermSize=256m#-Dorg.jboss.resolver.warning=true#-Dsun.rmi.dgc.client.gcInterval=3600000#-Dsun.rmi.dgc.server.gcInterval=3600000#-Djboss.platform.mbeanserver#-Djava.endorsed.dirs=%JBOSS_DIR%\lib\endorsed#-Djava.class.path=%JBOSS_DIR%\bin\run.jar#-Dsun.java.command=org.jboss.Main#-Dsun.java.launcher=SUN_STANDARD" rem java.exe mode rem "%JBOSS_DIR%\bin\jboss5.exe" //US//jboss5 --StartParams "-Dprogram.name=run.bat#-Xms128m#-Xmx512m#-XX:MaxPermSize=256m#-Dorg.jboss.resolver.warning=true#-Dsun.rmi.dgc.client.gcInterval=3600000#-Dsun.rmi.dgc.server.gcInterval=3600000#-Djboss.platform.mbeanserver#-Djava.endorsed.dirs=%JBOSS_DIR%\lib\endorsed#-Djava.class.path=%JBOSS_DIR%\bin\run.jar#-Dsun.java.command=org.jboss.Main#-Dsun.java.launcher=SUN_STANDARD#org.jboss.Main#-c#default#-b#0.0.0.0" --StopParams TBD --StartImage=%JAVA_HOME%\bin\java.exe --StopImage=%JAVA_HOME%\bin\java.exe --StartMode exe --StopMode exe
-
6. Re: Running JBoss as windows service with procrun
tw Jul 20, 2009 7:09 PM (in response to tw)And here is the error for JBoss5:
Failed to boot JBoss: java.lang.ClassCastException: org.jboss.bootstrap.microcontainer.ServerImpl cannot be cast to org.jboss.bootstrap.spi.Server at org.jboss.system.server.ServerLoader.createServer(ServerLoader.java:358) at org.jboss.system.server.ServerLoader.load(ServerLoader.java:332) at org.jboss.Main.boot(Main.java:203) at org.jboss.Main$1.run(Main.java:547) at java.lang.Thread.run(Thread.java:619)
procrun/jvm.dll loads org.jboss.bootstrap.spi.Server first from bootstrap.jar and later again from run.jar, with java.exe it loads only from run.jar[2009-07-20 14:35:42] [info] [Loaded org.jboss.system.NoAnnotationURLClassLoader from file:/C:/JBoss5/bin/run.jar] [2009-07-20 14:35:42] [info] [Loaded org.jboss.bootstrap.spi.Server from file:/C:/JBoss5/lib/jboss-bootstrap.jar]
-
7. Re: Running JBoss as windows service with procrun
tw Jul 21, 2009 10:50 AM (in response to tw)There are two integration issues between procrun and JBoss bootstrap process after further investigation:
1) With procrun launcher, the initial context class loader is null, causing JBoss to set a null parent class loader on its URL bootstrap class loader - this explains why subsequently classes from run.jar are not visible within the bootstrap process. Setting the context class loader to the class loader of org.jboss.Main when it is null solves this problem. This is the setup found when running through java.exe
2) Termination of the main thread (which does nothing but spawning the bootstrap thread) causes the JVM to exit with procrun while the bootstrap thread is loading the server. With java.exe, termination of the main thread does not have any effect, the JVM will continue to run.
Does anybody have insight into or any info regarding these two issues and what the best fix would be? -
8. Re: Running JBoss as windows service with procrun
peterj Jul 21, 2009 1:28 PM (in response to tw)#2 sounds like a defect in procrun - I don't think that JVM launchers are supposed to exit until all threads exit. Have you looked to see if there is some procrun option related to this?
-
9. Re: Running JBoss as windows service with procrun
jacklty Nov 16, 2011 6:44 PM (in response to peterj)Even though it is silly to resurrect this thread, I think it will be helpful for people who also end up here without a clue.
For #2: Since JBoss has a shutdown hook installed to do the clean-up, we can make use of System.exit(0) to invoke it.
--StopMode=jvm --StopPath=%WORKING_DIR% --StopClass=java.lang.System --StopMethod=exit --StopParams=1 --StopTimeout=45
Here is my entire script for installing my JBoss 64-bit Windows Service
* I assume that both environment variables (JAVA_HOME & JBOSS_HOME) are well defined.
{code}
set DAEMON_DIR=C:/jboss/commons-daemon-1.0.7/windows
set DAEMON_IMG=%DAEMON_DIR%/amd64/prunsrv.exe
set JAVA_HOME=C:/Java/64bit/jdk1.6.0_27
set Jvm=%JAVA_HOME%/jre/bin/server/jvm.dll
set NAME=jbossserverservice
set DISPLAY="JBoss Server"
set WORKING_DIR=%JBOSS_HOME%/bin
rem =================================JBoss Runtime Configuration ===================================
set JAVA=%JAVA_HOME%\bin\java
set JAVAC_JAR=%JAVA_HOME%\lib\tools.jar
set XMS=1024
set XMX=3096
set VM_OPTS=-XX:+UseCompressedOops
rem --- JVM memory non-heap allocation pool parameters. Modify as appropriate. ---
set VM_OPTS=%VM_OPTS%;-XX:PermSize=64m;-XX:MaxPermSize=128m
rem With Sun JVMs reduce the RMI GCs to once per hour
set VM_OPTS=%VM_OPTS%;-Dsun.rmi.dgc.client.gcInterval=3600000;-Dsun.rmi.dgc.server.gcInterval=3600000
rem --- Enable the jconsole agent locally with integration of the jboss MBeans ---
set VM_OPTS=%VM_OPTS%;-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl
set VM_OPTS=%VM_OPTS%;-Djboss.platform.mbeanserver
set VM_OPTS=%VM_OPTS%;-Dcom.sun.management.jmxremote
rem --- JPDA options. Uncomment and modify as appropriate to enable remote debugging. ---
rem set VM_OPTS=-Xdebug;-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n;%VM_OPTS%
rem --- Setup the java endorsed dirs ---
set JBOSS_ENDORSED_DIRS=%JBOSS_HOME%\lib\endorsed
set VM_OPTS=%VM_OPTS%;-Djava.endorsed.dirs=%JBOSS_ENDORSED_DIRS%
rem --- Find run.jar, or we can't continue ---
set RUN_JAR=%JBOSS_HOME%\bin\run.jar
rem !!! set STOP_MAIN=org.jboss.Shutdown
rem !!! set STOP_JAR=%JBOSS_HOME%\bin\shutdown.jar
rem !!! set STOP_LIB=%STOP_JAR%;%JBOSS_HOME%/client/jbossall-client.jar
rem !!! set STOP_MAIN=org.jboss.Shutdown
rem !!! set STOP_PARAM=
rem =================================================================================================
set LIB=%JAVAC_JAR%;%RUN_JAR%
set START_MAIN=org.jboss.Main
set START_PARAM=
set LogPath=%JBOSS_HOME%/server/default/log/
set LogPrefix=service
rem --- Shut down JBoss System with System.exit(0), so JBoss build-in ShutDownHook will have a chance to do some clean up before exit. (Time-out in 45 seconds)
set SHUT_DOWN_HOOK=--StopMode=jvm --StopPath=%WORKING_DIR% --StopClass=java.lang.System --StopMethod=exit --StopParams=1 --StopTimeout=45
%DAEMON_DIR%/prunsrv //IS/JBossServer --DisplayName=%NAME% --Description=%DISPLAY% --Install=%DAEMON_IMG% --Jvm=%Jvm% --JvmMs=%XMS% --JvmMx=%XMX% --JvmOptions=%VM_OPTS% --Classpath=%LIB% --StartMode=jvm --StartPath=%WORKING_DIR% --StartClass=%START_MAIN% --StartParams=%START_PARAM% %SHUT_DOWN_HOOK% --Startup=auto --LogLevel=DEBUG --LogPath=%LogPath% --LogPrefix=%LogPrefix%
{code}