Appassembler


Appassembler Maven Plugin


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.

Criando o código para o serviço

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

Configurando o appassembler maven plugin

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.

Gerando o Daemon

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

Instalando e Testando

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

appassembler plugin

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

appassembler result

Removendo o serviço

Para remover o serviço para digitar o seguinte comando

timer-service.bat remove


Downloads

Para fazer o download do exemplo de uso do plugin appassembler, clique em: Exemplo do tutorial.