
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:
La única fuente que da algún tipo de pista es el registro de eventos de Windows con la siguiente entrada:
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:
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.