Developer's Lab

By Diogo Pinto - DiØ

Using Jetty Plugin With Maven and ActiveMQ

Configurando plugin Jetty

Para utilizar e configurar o plugin do Jetty através do Maven, é necessário adicionar no pom.xml as seguintes entradas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<build>
 <plugins>
  <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>7.6.8.v20121106</version>
      <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
          <webApp>
            <contextPath>/test</contextPath>
          </webApp>
          <webAppConfig>
            <jettyEnvXml>
                  src/main/webapp/WEB-INF/jetty-env.xml
            </jettyEnvXml>
            <webXml>
                  src/main/webapp/WEB-INF/web.xml
            </webXml>
          </webAppConfig>
      </configuration>
  </plugin>
 <plugins>
</build>

Acima, além de adicionar o plugin a ser ativado, foi adicionado também, as configurações que serão lidas pelo WebContext.

Adicionando dependências dos artefatos para o ActiveMQ

Para o ActiveMQ, é necessário adicionar a entrada abaixo do core, que será utilizada como dependência:

1
2
3
4
5
<dependency>
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-core</artifactId>
       <version>5.0.0</version>
</dependency>

Essa entrada apenas disponibilizará as bibliotecas necessárias para criar as conexões e sessões.

Instalando binários do ActiveMQ Para instalar os binários do ActiveMQ:

1
2
3
wget http://activemq.apache.org/path/tofile/apache-activemq-x.x.x-bin.tar.gz
cd [diretorio_instalacao]
tar zxvf activemq-x.x.x-bin.tar.gz

Iniciando ActiveMQ Para iniciar o daemon após instalação:

1
2
cd [diretorio_instalacao]/bin
./activemq start

Para acessar o painel de administrador:

http://127.0.0.1:8161/admin/

Configurando recursos JNDI para o Jetty No caminho especificado nas configurações do Plugin do Jetty, no arquivo pom, é necessário configurar os recursos do JNDI para o específico webapp, exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure id='jms-webapp-wac' class="org.eclipse.jetty.webapp.WebAppContext">
  <New id="connectionFactory" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg>
      <Ref id='jms-webapp-wac' />
    </Arg>
    <Arg>jms/ConnectionFactory</Arg>
    <Arg>
      <New class="org.apache.activemq.ActiveMQConnectionFactory">
        <Arg>tcp://127.0.0.1:61616</Arg>
      </New>
    </Arg>
  </New>
  <New id="fooQueue" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg>jms/FooQueue</Arg>
    <Arg>
      <New class="org.apache.activemq.command.ActiveMQQueue">
        <Arg>FOO.QUEUE</Arg>
      </New>
    </Arg>
  </New>
</Configure>

Onde:

1
2
3
<New class="org.apache.activemq.ActiveMQConnectionFactory">
        <Arg>tcp://127.0.0.1:61616</Arg>
</New>

Deve ser o IP e porta onde o daemon do ActiveMQ está escutando.

E onde:

1
2
3
<New class="org.apache.activemq.command.ActiveMQQueue">
        <Arg>FOO.QUEUE</Arg>
</New>

É a fila configurada no painel ou linha de comando do ActiveMQ.

Mapeando os recursos do ActiveMQ dentro do Container No arquivo de configuração web.xml, dentro do WEB-INF da aplicação, deverá ser mapeado referências para utilização do ActiveMQ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<resource-ref id="ResourceRef_1291169365479">
        <description>JMS Connection</description>
        <res-ref-name>jms/ConnectionFactory</res-ref-name>
        <res-type>javax.jms.ConnectionFactory</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<message-destination-ref>
        <message-destination-ref-name>jms/FooQueue</message-destination-ref-name>
        <message-destination-type>javax.jms.Queue</message-destination-type>
        <message-destination-usage>Produces</message-destination-usage>
        <message-destination-link>jms/FooQueue</message-destination-link>
</message-destination-ref>

Comments