SeamFramework.orgCommunity Documentation

Capítulo 6. Iniciando com o Weld

6.1. Pré-requisitos
6.2. Implantando no JBoss AS
6.3. Implantando no GlassFish
6.4. Implantando no Apache Tomcat
6.4.1. Implantando com o Ant
6.4.2. Implantando com o Maven
6.5. Implantando no Jetty

O Weld vem com vários exemplos. Nós recomendamos que você inicie com examples/jsf/numberguess e examples/jsf/translator. O numberguess é um exemplo web (war) contendo somente managed beans não-transacionais. Este exemplo pode ser executado em uma ampla variedade de servidores, incluindo JBoss AS, GlassFish, Apache Tomcat, Jetty, Google App Engine, e qualquer contêiner Java EE 6 compatível. O translator é um exemplo corporativo (ear) que contém sessions beans. Este exemplo deve executar no JBoss AS 6.0, GlassFish 3.0 ou qualquer contêiner Java EE 6 compatível.

Ambos exemplos usam JSF 2.0 como framework web e podem ser encontrados no diretório examples/jsf da distribuição do Weld.

Para executar os exemplos com os scripts de construção fornecidos, você precisará dos seguintes itens:

Nas próximas seções, você usará o comando do Ant (ant) para invocar o script de construção do Ant em cada exemplo para compilar, montar e implantar o exemplo no JBoss AS e, para o exemplo war, no Apache Tomcat. Você também pode implantar o artefato produzido (war ou ear) em qualquer outro contêiner que suporte Java EE 6, como o GlassFish 3.

Se você tem o Maven instalado, você pode usar o comando do Maven (mvn) para compilar e montar o artefato autônomo (war ou ear) e, para o exemplo war, executá-lo em um contêiner embutido.

As seções abaixo cobrem os passos para implantar com Ant e Maven em detalhes. Vamos iniciar com o JBoss AS.

Para implantar os exemplos no JBoss AS, você precisará do JBoss AS 6.0.0 ou acima. Se uma versão da linha JBoss AS 6.0 ainda não estiver disponível, você pode baixar um nightly snapshot. A razão do JBoss AS 6.0.0 ou acima ser requerido é porque esta é a primeira versão que possui suporte embutido a CDI e Bean Validation, tornando-o próximo suficiente a Java EE 6 para executar os exemplos. A boa notícia é que não existem modificações adicionais que você tenha que fazer no servidor. Está pronto para funcionar!

Depois de ter baixado o JBoss AS, extrai-o. (Recomendamos renomear a pasta para incluir o qualificador as, assim fica claro que é o servidor de aplicação). Você pode mover a pasta extraída para qualquer lugar que você queira. Seja qual for o local, este é o que chamaremos de diretório de instalação do JBoss AS, ou JBOSS_HOME.

$
> unzip jboss-6.0.*.zip
$
> mv jboss-6.0.*/ jboss-as-6.0

Para que os scripts de construção saibam onde implantar o exemplo, você tem que dizer a eles onde encontrar sua instalação do JBoss AS (ou seja, JBOSS_HOME). Crie um novo arquivo com o nome local.build.properties no diretório dos exemplos do Weld obtido e atribua o caminho até sua instalação do JBoss AS para a propriedade jboss.home, como a seguir:

jboss.home=/path/to/jboss-as-6.0

Agora você está pronto para implantar seu primeiro exemplo!

Vá para o diretório examples/jsf/numberguess e execute o alvo deploy no Ant:

$
> cd examples/jsf/numberguess
$
> ant deploy

Se você já não estiver, inicie o JBoss AS. Você pode também iniciar o JBoss AS a partir de um shell Linux:

$
> cd /path/to/jboss-as-6.0
$
> ./bin/run.sh

uma janela de comandos do Windows:

$
> cd c:\path\to\jboss-as-6.0\bin
$
> run

ou você pode iniciar o servidor usando uma IDE, como o Eclipse.

Nota

Se você estiver usando o Eclipse, deve considerar seriamente instalar os add-ons do JBoss Tools, que inclui uma ampla variedade de ferramentas para desenvolvimento com JSR-299 e Java EE, bem como uma visão melhorada para o servidor JBoss AS.

Aguarde uns poucos segundos para a aplicação ser implantada (ou o servidor de aplicação iniciar) e veja se você pode determinar a abordagem mais eficiente para apontar o número aleatório na URL local http://localhost:8080/weld-numberguess.

Nota

O script de construção do Ant inclui alvos adicionais para o JBoss AS implantar e desimplantar o arquivo no formato explodido ou empacotado e deixar tudo certo.

  • ant restart - implanta o exemplo no formato explodido no JBoss AS

  • ant explode - atualiza o exemplo explodido, sem reiniciar a implantação

  • ant deploy - implanta o exemplo no formato jar compactado no JBoss AS

  • ant undeploy - remove o exemplo do JBoss AS

  • ant clean - limpa o exemplo

O segundo exemplo de partida, weld-translator, traduzirá seu texto para Latin. (Bem, não realmente, mas o mínimo está lá para você ao menos começar. Boa sorte!) Para testá-lo, mude para o diretório do exemplo de tradutor e execute o alvo deploy:

$
> cd examples/jsf/translator
$
> ant deploy

Nota

O tradutor utiliza session beans, os quais estão empacotados em um módulo EJB dentro de um ear. Java EE 6 permitirá que session beans sejam implantados em módulos war, mas isto é um tópico para um capítulo posterior.

Novamente, aguarde uns poucos segundos para a aplicação ser implantada (se você está realmente entediado, leia as mensagens de log), e visite http://localhost:8080/weld-translator para começar a pseudo-tradução.

Implantar no GlassFish deve ser fácil e familiar, certo? Afinal, é a implementação de referência da Java EE 6 e Weld é a implementação de referência da JSR-299, o que significa que o Weld vem integrado ao GlassFish. Então, sim, é tudo muito fácil e familiar.

Para implantar os exemplos no GlassFish, você precisará o versão final do GlassFish V3. Selecione a versão que termina com -unix.sh ou -windows.exe de acordo com sua plataforma. Após a conclusão do download, execute o instalador. Em Linux/Unix, primeiramente, você precisará tornar o script executável.

$
> chmod 755 glassfish-v3-unix.sh
$
> ./glassfish-v3-unix.sh

No Windows você pode simplesmente clicar sobre o executável. Siga as instruções no instalador. Ele criará um único domínio nomeado como domain1. Você usará este domínio para implantar os exemplos. Nós recomendamos que você escolha 7070 como a porta HTTP principal para evitar conflitos com uma instância em execução do JBoss AS (ou Apache Tomcat).

Se você tiver implantado um dos exemplos de partida, weld-numberguess ou weld-translator, no JBoss AS, então você já possui o artefato implantável que necessita. Se não, mude para qualquer um dos dois diretórios e mande construí-lo.

$
> cd examples/jsf/numberguess (or examples/jsf/translator)
$
> ant package

O artefato implantável para o exemplo weld-numberguess, com o nome weld-numberguess.war, é criado no diretório target do exemplo. O arquivo para o exemplo weld-translator, com o nome weld-translator.ear, é criado no diretório ear/target do exemplo. Tudo que você precisa fazer agora é implantá-lo no GlassFish.

Um modo para implantar aplicações no GlassFish é utilizando o GlassFish Admin Console. Para ter o Admin Console em executação, você precisa iniciar um domínio do GlassFish, em nosso caso domain1. Mude para a pasta bin no diretório onde você instalou o GlassFish e execute o seguinte comando:

$
> asadmin start-domain domain1

Após uns poucos segundos você pode visitar o Admin Console no navegador através da URL http://localhost:4848. Na árvore do lado esquerdo da página, clique em "Aplicações", depois no botão "Implantar..." abaixo do título "Aplicações" e selecione o artefato implantável para qualquer um dos dois exemplos. O implantador deve reconhecer que você selecionou um artefato Java EE e permite que você o inicie. Você pode ver os exemplos rodando em http://localhost:7070/weld-numberguess ou http://localhost:7070/weld-translator, dependendo de qual exemplo você implantou.

Alternativamente, você pode implantar a aplicação no GlassFish utilizando o comando asadmin:

$
> asadmin deploy target/weld-numberguess.war

A razão pela qual o mesmo artefato pode ser implantado tanto no JBoss AS quanto no GlassFish, sem qualquer modificação, é porque todas as funcionalidades utilizadas fazem parte da plataforma padrão. E o que uma plataforma competente é capaz de fazer!

Os contêineres servlet não são requeridos para suportar serviços Java EE como CDI. No entanto, você pode usar CDI em um contêiner servlet, como o Tomcat, incorporando uma implementação standalone de CDI, como o Weld.

O Weld vem com um servlet listener que inicializa o ambiente CDI, registra o BeanManager no JNDI e oferece injeção dentro de servlets. Basicamente, ele simula um pouco do trabalho realizado pelo contêiner Java EE. (Mas você não terá funcionalidades corporativas como session beans e transações gerenciadas pelo contêiner.)

Vamos colocar a extensão servlet do Weld para rodar no Apache Tomcat. Primeiro você precisará baixar o Tomcat 6.0.18 ou posterior em tomcat.apache.org, e o descompactar.

$
> unzip apache-tomcat-6.0.18.zip

Você possui duas opções para implantar a aplicação no Tomcat. Você pode implantá-la publicando o artefato no diretório de implantação automática usando o Ant ou você pode implantar no servidor via HTTP usando um plugin do Maven. A abordagem do Ant não requer que você tenha o Maven instalado, por isso começaremos por aí. Se você quer usar o Maven, você pode simplesmente pular esta seção.

Para que o Ant coloque o artefato no diretório de implantação automática do Tomcat, ele precisa saber onde a instalação do Tomcat está localizada. Novamente, precisamos definir uma propriedade no arquivo local.build.properties dentro do diretório de exemplos do Weld obtido. Se você ainda não tiver criado este arquivo, faça isso agora. Em seguida, atribua o caminho de sua instalação do Tomcat na propriedade tomcat.home.

tomcat.home=/path/to/apache-tomcat-6

Agora você está pronto para implantar o exemplo numberguess no Tomcat!

Mude para o diretório examples/jsf/numberguess novamente e execute o alvo deploy no Ant para o Tomcat:

$
> cd examples/jsf/numberguess
$
> ant tomcat.deploy

Se você já não estiver, inicie o Tomcat. Você pode também iniciar o Tomcat a partir de um shell Linux:

$
> cd /path/to/apache-tomcat-6
$
> ./bin/start.sh

uma janela de comandos do Windows:

$
> cd c:\path\to\apache-tomcat-6\bin
$
> start

ou você pode iniciar o servidor usando uma IDE, como o Eclipse.

Aguarde uns poucos segundos para a aplicação ser implantada (ou o servidor de aplicação iniciar) e veja se você pode calcular a abordagem mais eficiente para apontar o número aleatório na URL local http://localhost:8080/weld-numberguess!

Você também pode implantar a aplicação no Tomcat usando o Maven. Esta seção é um pouco mais avançada, portanto pule-a, a não ser que você esteja ansioso para usar o Maven nativamente. Claro, primeiro você precisará ter certeza que possui o Maven instalado em seu caminho, similar à forma que você configurou o Ant.

O plugin do Maven comunica com o Tomcat via HTTP, de modo que não importa onde você instalou o Tomcat. No entanto, a configuração do plugin assume que você está rodando o Tomcat com sua configuração padrão, como localhost e na porta 8080. O arquivo readme.txt no diretório do exemplo possui informações sobre como modificar as configurações do Maven para acomodar uma configuração diferente.

Para permitir que o Maven comunique com o Tomcat via HTTP, edite o arquivo conf/tomcat-users.xml em sua instalação do Tomcat e adicione a seguinte linha:


<user username="admin" password="" roles="manager"/>

Reinicie o Tomcat. Agora você pode implantar a aplicação no Tomcat com o Maven usando este comando:

$
> mvn compile war:exploded tomcat:exploded -Ptomcat

Uma vez que a aplicação está implantada, você pode reimplantá-la usando este comando:

$
> mvn tomcat:redeploy -Ptomcat

O argumento -Ptomcat ativa o profile tomcat definido no Maven POM (pom.xml). Entre outras coisas, este profile ativa o plugin do Tomcat.

Ao invés de enviar o contêiner para uma instalação standalone do Tomcat, você também pode executar a aplicação em um contêiner embutido do Tomcat 6:

$
> mvn war:inplace tomcat:run -Ptomcat

A vantagem de utilizar o servidor embutido é que as mudanças nos ativos em src/main/webapp entrar em vigor imediatamente. Se uma mudança em um arquivo de configuração da webapp é realizada, a aplicação pode automaticamente ser reimplantada (dependendo da configuração do plugin). Se você fizer uma alteração em um recurso do classpath, você precisa executar uma recompilação:

$
> mvn compile war:inplace -Ptomcat

Existem muitos outros goals do Maven que você pode usar se estiver dissecando o exemplo, o qual está documentado no arquivo readme.txt do exemplo.

O suporte ao Jetty nos exemplos é uma adição mais recente. Já que o Jetty é tradicionalmente usado com o Maven, não existem alvos do Ant para ele. Você deve invocar o Maven diretamente para implantar os exemplos no Jetty sem fazer mais nada. Além disso, somente o exemplo weld-numberguess está configurado para suportar o Jetty neste momento.

Se você leu toda a seção do Tomcat até o fim, então você está pronto para seguir. A execução do Maven assemelha-se à implantação embutida do Tomcat. Se não, não fique preocupado. Nós ainda iremos abordar tudo que você precisa saber novamente nesta seção.

O Maven POM (pom.xml) inclui um profile nomeado jetty que ativa o plugin Maven Jetty, que você pode usar para iniciar o Jetty no modo embutido e implantar a aplicação devidamente. Você não precisa de mais nada instalado, exceto ter o comando do Maven (mvn) em seu caminho. O restante será baixado da internet quando a construção for executada.

Para rodar o exemplo weld-numberguess no Jetty, vá para o diretório do exemplo e execute o goal inplace do plugin Maven war seguido pelo goal run do plugin Maven Jetty com o profile jetty habilitado, como a seguir:

$
> cd examples/jsf/numberguess
$
> mvn war:inplace jetty:run -Pjetty

A saída do log do Jetty será mostrada no console. Uma vez que o Jetty tenha reportado a implantação da aplicação, você pode acessá-la através da seguinte URL: http://localhost:9090/weld-numberguess. A porta está definida nas configurações do plugin Maven Jetty dentro do profile jetty.

Qualquer mudança nos recursos em src/main/webapp entra em vigor imediatamente. Se uma mudança em um arquivo de configuração da webapp é realizada, a aplicação pode ser reimplantada automaticamente. O comportamento de reimplantação pode ser sintonizado na configuração do plugin. Se você fizer uma mudança em um recurso do, você precisará executar um build e o goal inplace do plugin Maven war, novamente com o profile jetty habilitado.

$
> mvn compile war:inplace -Pjetty

O goal war:inplace copia as classes e jars compilados dentro de src/main/webapp, nos diretórios WEB-INF/classes e WEB-INF/lib, respectivamente, misturando arquivos fontes e compilados. No entanto, o build resolve estes arquivos temporários excluindo-os do war empacotado ou limpando-os durante a fase clean do Maven.

Você tem duas opções se quiser rodar o exemplo no Jetty a partir da IDE. Você pode instalar o plugin m2eclispe e executar os goals como descrito acima. Sua outra opção é iniciar o contêiner Jetty a partir de uma aplicação Java.

Primeiro, inicialize o projeto Eclipse:

$
> mvn clean eclipse:clean eclipse:eclipse -Pjetty-ide

Em seguida, monte todos os recursos necessários em src/main/webapp:

$
> mvn war:inplace -Pjetty-ide

Agora você está pronto para rodar o servidor no Eclipse. Importe o projeto para seu workspace do Eclipse usando "Import Existing Project into Workspace". Então, encontre a start class em src/jetty/java e execute seu método main como uma Java Application. O Jetty será executado. Você pode ver a aplicação através da seguinte URL: http://localhost:8080. Preste atenção especial na porta presente na URL e a ausência de um caminho de contexto à direita.

Agora que você possui as aplicações de partida implantadas no servidor de sua escolha, provavelmente vai querer saber um pouco sobre como eles realmente funcionam.