Como instalar o ActiveMQ Artemis como um serviço do Windows?

Como instalar o ActiveMQ Artemis como um serviço do Windows?

O título é um pouco enganador já que sei instalar o artemis como um serviço windows, de acordo com a documentação basta rodar

artemis-service.exe install

Isso não funciona para mim. Tentei instalar e executar o serviço com ActiveMQ Artemis versões 2.31 e 2.29. Para ambas as versões, a execução do serviço produz o seguinte loginartemis-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

e o seguinte aviso aparece:

insira a descrição da imagem aqui

A única fonte que dá algum tipo de dica é o log de eventos do Windows com a seguinte entrada:

insira a descrição da imagem aqui

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)

Verifiquei todos os caminhos no comando executado, mas tudo parece bem.

A única coisa que notei foram as entradas

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

e

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

in artemis-service.xml, que então é resolvido para

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

o que parece meio errado, mas mudar isso (remover um /) não muda nada.

Como resolver isso?

Responder1

Graças ao comentário de Greg, consegui descobrir o problema. Usando o monitor de processo Sysinternals, após alguma filtragem encontrei as seguintes entradas:

insira a descrição da imagem aqui

Isso significa que a inicialização do serviço não conseguiu nem encontrar o executável Java para inicialização. Os caminhos mostram que a variável de ambiente %JAVA_HOME%de fato não pode ser encontrada (e o programa verifica PATH conectando a string do subcaminho).

Fiquei surpreso com isso, pois tinha certeza de ter definido a variável - meu erro foi defini-la como uma variável de usuário e não como uma variável de sistema. Aparentemente, o Windows inicia o serviço com outro usuário como o usuário com o qual estou logado, portanto a variável não pode ser encontrada.

A configuração %JAVA_HOME%como variável de ambiente do sistema resolveu esse problema.

informação relacionada