Nesse tutorial você vai aprender como criar um serviço no windows utilizando o plugin do maven chamado appassembler.
Para que possamos criar um Serviço e registrá-lo no Painel de Serviços do Windows, precisamos criar um programa que se comporte de tal forma, para isso vamos criar um exemplo de um Servidor de Datas feito em java e utilizando a api de Sockets do Java.
Abaixo o código da classe que será o nosso serviço, ficando responsável por retorna a data e hora corrente do Sistema:
package br.com.javadev.appassembler; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; public class TimerServer { public static void main(String[] args) { try { start(); } catch (IOException ioe) { System.out.println("Error: " + ioe.getMessage()); } } public static void start() throws IOException { ServerSocket listener = new ServerSocket(5000); try { while (true) { Socket socket = listener.accept(); try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println(new Date().toString()); } finally { socket.close(); } } } finally { listener.close(); } } }
Feito isso, vamos configurar o plugin appassembler dentro do pom.xml do projeto
O próximo passo é configurar no pom do projeto o plugin, para isso vamos adicionar o trecho abaixo na sessão build / plugins
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>generate-daemons</goal> </goals> </execution> </executions> <configuration> <daemons> <daemon> <id>timer-service</id> <mainClass>br.com.javadev.appassembler.TimerServer</mainClass> <platforms> <platform>jsw</platform> </platforms> </daemon> </daemons> </configuration> </plugin>
Configuramos a versão 1.4 do plugin, em seguida configurarmos para que ao executar a fase package do build seja executada a goal generate-daemons do plugin, que é responsável por gerar a estrutura para configuração do serviço. A parte mais importante fica dentro da tag configuration, referente a configuração dos daemons (Serviços), a tag id indica o nome da instalação do serviço, a tag mainClass define qual é a Classe que inicializa o serviço e configura o Daemon baseado no Java Service Wrapper e gera o script para administração do serviço.
Para gerar o daemon é bem simples, como configuramos no plugin que ele fosse executado na fase package do build, basta digitar o seguinte comando:
mvn package
Será gerado dentro da pasta target a seguinte estrutura:
--generated-resources |--appassembler |--jsw |-- timer-service | |-- bin | | |-- timer-service | | |-- timer-service.bat | | |-- wrapper-linux-x86-32 | | |-- wrapper-macosx-universal-32 | | |-- wrapper-solaris-x86-32 | | |-- wrapper-windows-x86-32.exe | | |-- wrapper.jar | | `-- wrapper-windows-x86-32.dll | |-- conf | | `-- wrapper.conf | `-- lib | |-- libwrapper-linux-x86-32.so | |-- libwrapper-macosx-universal-32.jnilib | |-- libwrapper-solaris-x86-32.so | |-- br | | `-- com | | `-- javadev | | `-- appassembler | | `-- appassembler | | |-- 1.0 | | | `-- appassembler-1.0.jar
Para finalizar, vamos instalar o serviço, iniciar e fazer um teste usando a ferramenta Telnet, se quiser você pode criar um client em java que acesse esse serviço (porta 5000) para obter a data e hora do sistema.
Vamos acessar dentro da pasta target o seguinte caminho:
cd target\generated-resources\appassembler\jsw\timer-service\bin
Em seguida digitar o seguinte comando:
timer-service.bat install
Será exibida a mensagem:
wrapper | Timer Service installed.
Acessar o Painel de Controle \ Ferramentas Administrativas \ Serviços e procurar por Timer Service
O nome é definido na tag name do pom.xml do projeto
<name>Timer Service</name>
O serviço será instalado no Painel de Serviço do Windows, você pode iniciar através do Painel de Serviços ou por linha de comando:
timer-service.bat start
Uma vez que o serviço esteja inicializado, podemos fazer um teste, para isso vamos utilizar a ferramenta telnet, digitando o comando:
telnet localhost 5000
Será exibida no prompt do DOS como resultado o timestamp
Para fazer o download do exemplo de uso do plugin appassembler, clique em: Exemplo do tutorial.