¿Cómo instalar ActiveMQ Artemis como servicio de Windows?

¿Cómo instalar ActiveMQ Artemis como servicio de Windows?

El título es un poco engañoso ya que sé cómo instalar artemis como un servicio de Windows, según la documentación solo hay que ejecutarlo.

artemis-service.exe install

Esto no funciona para mi. Intenté instalar y ejecutar el servicio con ActiveMQ Artemis versiones 2.31 y 2.29. Para ambas versiones, la ejecución del servicio produce el siguiente inicio de sesiónartemis-service.wrapper.log

2023-10-23 10:19:50,116 DEBUG - Starting WinSW in the service mode
2023-10-23 10:19:50,147 INFO  - Starting %JAVA_HOME%\bin\java.exe  -XX:+UseParallelGC -Xms512M -Xmx1024M -classpath "C:\Program Files (x86)\apache-artemis-2.31.0\lib\artemis-boot.jar" "-Dartemis.home=C:\Program Files (x86)\apache-artemis-2.31.0" -Dartemis.instance=C:\ArtemisBroker -Ddata.dir=C:\ArtemisBroker\data -Dartemis.instance.etc=C:\ArtemisBroker\etc -Djava.security.auth.login.config=C:\ArtemisBroker\etc\login.config -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=file:/C:/ArtemisBroker/etc/jolokia-access.xml org.apache.activemq.artemis.boot.Artemis run 
2023-10-23 10:19:50,178 DEBUG - Completed. Exit code is 0

y aparece la siguiente advertencia:

ingrese la descripción de la imagen aquí

La única fuente que da algún tipo de pista es el registro de eventos de Windows con la siguiente entrada:

ingrese la descripción de la imagen aquí

Service cannot be started. System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at winsw.Util.ProcessHelper.StartProcessAndCallbackForExit(Process processToStart, String executable, String arguments, Dictionary`2 envVars, String workingDirectory, Nullable`1 priority, ProcessCompletionCallback callback, Boolean redirectStdin, LogHandler logHandler, Boolean hideWindow)
   at winsw.WrapperService.StartProcess(Process processToStart, String arguments, String executable, LogHandler logHandler, Boolean redirectStdin)
   at winsw.WrapperService.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

Revisé todas las rutas en el comando ejecutado pero todo parece estar bien.

Lo único que noté son las entradas.

<startargument>-Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%/jolokia-access.xml</startargument>

y

<env name="ARTEMIS_INSTANCE_ETC_URI" value="file:/C:/ArtemisBroker/etc/"/>

en artemis-service.xml, que luego se resuelve en

-Djolokia.policyLocation=file:/C:/ArtemisBroker/etc//jolokia-access.xml org.apache.activemq.artemis.boot.Artemis

lo cual parece un poco incorrecto, pero cambiar esto (eliminar uno /) no cambia nada.

¿Cómo resolver esto?

Respuesta1

Gracias al comentario de Greg pude resolver el problema. Usando el monitor de procesos Sysinternals, después de algunos filtrados encontré las siguientes entradas:

ingrese la descripción de la imagen aquí

Esto significa que el inicio del servicio ni siquiera pudo encontrar el ejecutable de Java para el inicio. Las rutas muestran que, de hecho, la variable de entorno %JAVA_HOME%no se puede encontrar (y el programa escanea PATH conectando la cadena de subruta).

Eso me sorprendió porque estaba bastante seguro de haber configurado la variable; mi error fue que la configuré como una variable de usuario y no como una variable del sistema. Aparentemente, Windows inicia el servicio con otro usuario como el usuario con el que inicié sesión, por lo que no se puede encontrar la variable.

La configuración %JAVA_HOME%como variable de entorno del sistema resolvió este problema.

información relacionada