JBoss - Serviço do Windows

O JBoss é sem dúvida um dos melhores servidores de aplicação que existem para Java, porém, eu achei algo em que ele pecou muito em ser claro na hora de por exemplo, se criar um serviço no windows (foi a minha necessidade em um projeto) para o mesmo.

Então, pesquisei muito e encontrei três alternativas:

  1. JavaService - Lí em um dos documentos do site do jboss.org que não é recomendado pelo jboss (não era um documento oficial e sim um documento da comunidade que ajuda o JBoss)
  2. Poderia utilizar o JavaServiceWrapper (não é o JavaService, apesar do nome) - Apesar de ser bem recomendado, e fácil de utilizar (testei para verificar como funcionava) quis utilizar em último caso, pois, não se trata de um serviço criado pela equipe do JBoss.
  3. Um serviço próprio do JBoss.org - É um serviço do JBoss, porém, não possui muita documentação para o mesmo.

Apesar de todas as dificuldades, quis investir neste item.

Verifiquei que a facilidade não é tão diferente quanto ao uso do JSW(Java Service Wrapper), porém, quando se quer fazer algo diferente do uso da instance default (é dificílimo, onde encontrei apenas em um site em ingles) ou rodar duas instances ao mesmo tempo (simplesmente não achei - o que não significa que não existe).

Para fazer rodar o serviço do JBoss no windows, basta baixar a última versão do JBoss Native (http://www.jboss.org/jbossweb/downloads/jboss-native/?action=a&windowstate=maximized), e seguir as instruções abaixo ou do site do JBoss (http://www.jboss.org/community/docs/DOC-11932).

Copiar os arquivos da pasta bin do zip baixado:

  • jbosssvc.exe
  • service.bat

para a pasta %JBOSS_HOME%\bin do servidor

Executar os seguintes passos:

  1. Clicar em iniciar > executar > digitar "cmd".
  2. Digitar "cd %JBOSS_HOME%\bin"
  3. Digitar "service.bat install"
  4. Fechar a janela do cmd digitando "exit"
  5. Clicar em iniciar > painel de controle > ferramentas administrativas > serviços
  6. Na lista terá o serviço "Jboss Alguma coisa"
  7. Clicar com o botão direito do mouse e selecionar no combo "Tipo de inicialização" como "Automático" e apertar o botão "Iniciar"

    O serviço agora esta configurado, pronto e rodando.

Para se certificar que o serviço está rodando, na tela de serviços verificar se os dois serviços estão com a coluna "Status" como "Iniciado" e em "Tipo de Inicialização" como "Automático". Após isto, basta acessar a URL do seu serviço JBoss como se você tivesse iniciado manualmente.

Pode ser que o serviço demore 20 ~ 30 segundos para iniciar.

Para quem preferir, eu editei o arquivo service.bat para facilitar sua parametrização via variáveis. E para facilitar sua vida, destaquei as linhas em que você deve editar para parametrizar o serviço:


@echo off
REM JBoss, the OpenSource webOS
REM
REM Distributable under LGPL license.
REM See terms of license at gnu.org.
REM
REM -------------------------------------------------------------------------
REM JBoss Service Script for Windows
REM -------------------------------------------------------------------------


@if not "%ECHO%" == "" echo %ECHO%
@if "%OS%" == "Windows_NT" setlocal
set DIRNAME=%CD%

REM
REM VERSION, VERSION_MAJOR and VERSION_MINOR are populated
REM during the build with ant filter.
REM
set SVCNAME=JBAS[versaojboss]SVC[site] Ex: JBAS442SVCPORTAL
set SVCDISP=JBoss Application Server 4.2.2 GA Portal Escovando Bytes
set SVCDESC=JBoss Application Server 4.2.2 GA Portal Escovando Bytes/Platform: Windows x86
set NOPAUSE=Y
set LOGNAMEUP=run[site].log Ex: runPortal.log
set LOGNAMEDOWN=shutdown[site]Portal.log Ex: shutdownPortal.log
set LOCKNAMEUP=.r[site].lock Ex: .rPortal.lock
set LOCKNAMEDOWN=.s[site].lock Ex: .sPortal.lock
set FILENAME=[nomedoseuarquivo].bat Ex: service.bat
set INSTANCENAME=[instância] Ex: admin

REM Suppress killing service on logoff event
set JAVA_OPTS=-Xrs

REM Figure out the running mode

if /I "%1" == "install" goto cmdInstall
if /I "%1" == "uninstall" goto cmdUninstall
if /I "%1" == "start" goto cmdStart
if /I "%1" == "stop" goto cmdStop
if /I "%1" == "restart" goto cmdRestart
if /I "%1" == "signal" goto cmdSignal
echo Usage: service install^uninstall^start^stop^restart^signal
goto cmdEnd

REM jbosssvc retun values
REM ERR_RET_USAGE 1
REM ERR_RET_VERSION 2
REM ERR_RET_INSTALL 3
REM ERR_RET_REMOVE 4
REM ERR_RET_PARAMS 5
REM ERR_RET_MODE 6

:errExplain
if errorlevel 1 echo Invalid command line parameters
if errorlevel 2 echo Failed installing %SVCDISP%
if errorlevel 4 echo Failed removing %SVCDISP%
if errorlevel 6 echo Unknown service mode for %SVCDISP%
goto cmdEnd

:cmdInstall
jbosssvc.exe -imwdc %SVCNAME% "%DIRNAME%" "%SVCDISP%" "%SVCDESC%" %FILENAME%
if not errorlevel 0 goto errExplain
echo Service %SVCDISP% installed
goto cmdEnd

:cmdUninstall
jbosssvc.exe -u %SVCNAME%
if not errorlevel 0 goto errExplain
echo Service %SVCDISP% removed
goto cmdEnd

:cmdStart
REM Executed on service start
del %LOCKNAMEUP% 2>&1 findstr /C:"being used" > nul
if not errorlevel 1 (
echo Could not continue. Locking file already in use.
goto cmdEnd
)
echo Y > %LOCKNAMEUP%
jbosssvc.exe -p 1 "Starting %SVCDISP%" > %LOGNAMEUP%
call run.bat -c %INSTANCENAME% -b 0.0.0.0 < %LOCKNAMEUP% >> %LOGNAMEUP% 2>&1
jbosssvc.exe -p 1 "Shutdown %SVCDISP% service" >> %LOGNAMEUP%
del %LOCKNAMEUP%
goto cmdEnd

:cmdStop
REM Executed on service stop
echo Y > %LOCKNAMEDOWN%
jbosssvc.exe -p 1 "Shutting down %SVCDISP%" > %LOGNAMEDOWN%
call shutdown -S < %LOCKNAMEDOWN% >> %LOGNAMEDOWN% 2>&1
jbosssvc.exe -p 1 "Shutdown %SVCDISP% service" >> %LOGNAMEDOWN%
del %LOCKNAMEDOWN%
goto cmdEnd

:cmdRestart
REM Executed manually from command line
REM Note: We can only stop and start
echo Y > %LOCKNAMEDOWN%
jbosssvc.exe -p 1 "Shutting down %SVCDISP%" >> %LOGNAMEDOWN%
call shutdown -S < %LOCKNAMEDOWN% >> %LOGNAMEDOWN% 2>&1
del %LOCKNAMEDOWN%
:waitRun
REM Delete lock file
del %LOCKNAMEUP% > nul 2>&1
REM Wait one second if lock file exist
jbosssvc.exe -s 1
if exist "%LOCKNAMEUP%" goto waitRun
echo Y > %LOCKNAMEUP%
jbosssvc.exe -p 1 "Restarting %SVCDISP%" >> %LOGNAMEUP%
call run.bat -c %INSTANCENAME% -b 0.0.0.0 < %LOCKNAMEUP% >> %LOGNAMEUP% 2>&1
jbosssvc.exe -p 1 "Shutdown %SVCDISP% service" >> %LOGNAMEUP%
del %LOCKNAMEUP%
goto cmdEnd

:cmdSignal
REM Send signal to the service.
REM Requires jbosssch.dll to be loaded in JVM
@if not ""%2"" == """" goto execSignal
echo Missing signal parameter.
echo Usage: service signal [0...9]
goto cmdEnd
:execSignal
jbosssvc.exe -k%2 %SVCNAME%
goto cmdEnd

:cmdEnd


Para quem não entendeu o que fazer com o código acima, basta copiar, abrir o notepad, colar, e salvar como service.bat (ou o nome de sua preferência) dentro da pasta bin do seu JBoss.

É possível observar que é possível parametrizar melhor este arquivo.

É importante verificar que todos os pontos marcados entre "[" "]" devem ser alterados para poder rodar em paralelo com outras instâncias.

É importante ressaltar também, que cada instância deve possuir seu próprio arquivo ".bat" para criar seu serviço e que este mesmo nome deve ser colocado no lugar de [nomedoseuarquivo] no código.

Seguindo os passos da instalação acima e utilizando o arquivo que eu editei o código, fica mais fácil. Espero que eu tenha sido claro.

0 comentários:

 

©2007 - 2010 Escovando Bytes | Template Blue by TNB