Criando um aplicativo corporativo com o Maven
Este tutorial, demonstra como criar um aplicativo corporativo simples utilizando arquétipos Maven e NetBeans IDE. O tutorial fornece também algumas explicações e dicas sobre o uso do IDE para criar e construir aplicativos Maven.
Neste tutorial, é criado um aplicativo corporativo que é empacotado como um arquivo EAR e implantado no GlassFish Server Open Source Edition 3. Você cria o aplicativo utilizando o arquétipo de aplicativo corporativo Maven no assistente Novo projeto. O aplicativo contém um projeto EJB que contém uma classe de entidade persistente, um Bean controlado por mensagem e uma fachada de Bean de sessão para a entidade. O aplicativo também contém um projeto Web que contém dois servlets.
Exercícios do tutorial
Para seguir este tutorial, são necessários os seguintes recursos e softwares.
Nota. NetBeans IDE 6.9 e o servidor GlassFish 3.x requer o Java Development Kit (JDK) 6.
Pré-requisitos
Este tutorial pressupõe que você tenha alguma experiência com programação ou algum conhecimento básico das tecnologias a seguir:
- Programação em Java
- NetBeans IDE
Antes de começar este tutorial, talvez você queira se familiarizar com a documentação a seguir.
É possível baixar um arquivo zip do projeto acabado.
Utilizando o Maven no IDE
O suporte ao Maven está totalmente integrado no NetBeans IDE. Desenvolver um projeto que utiliza a estrutura Maven é quase igual a desenvolver um projeto no Ant. No entanto, há algumas diferenças relacionadas ao modo como o Maven constrói os projetos e trabalha com as dependências. As dicas a seguir podem ajudá-lo a evitar alguns problemas caso esteja criando um aplicativo Maven pela primeira vez.
Verificar as configurações do Maven
Se este for seu primeiro Projeto Maven, talvez você queira verificar as definições de configurações do Maven na janela Opções. A partir do NetBeans IDE 7.0, o Maven está incorporado no IDE e é instalado quando você instala o IDE. Se você estiver usando o NetBeans IDE 6.9 uma versão anterior, é possível efetuar o download do instalador do site do Maven.
- Abra a janela Opções no IDE.
- Selecione a categoria Miscelâneos na janela Opções e clique na aba Maven.
- Confirme se um Maven Home está especificado.
É possível usar a versão do Maven incorporada no IDE ou especificar a localização de uma instalação local do Maven (requer versão 2.0.9 ou posterior).
- Clique em OK para fechar a janela Opções.
Anotações. Se você ainda não criou um projeto Maven no IDE, é preciso primeiro ativar o módulo Maven no IDE. Isso pode ser feito ao selecionar um arquétipo de projeto Maven no assistente Novo Projeto. Quando você seleciona o arquétipo, o IDE ativará automaticamente o módulo. Não é preciso finalizar o assistente para ativar o Maven no IDE.
Atualização dos repositórios Maven
Os repositórios remotos e locais do Maven são utilizados para o autocompletar de código e para construir projetos. É necessário atualizar os índices dos repositórios remotos do Maven para garantir que os artefatos necessários estejam prontamente disponíveis no momento de desenvolver o projeto. É possível configurar com a mesma frequência que o IDE verifica as atualizações na aba Maven da janela Opções. Também é possível executar uma verificação imediata das atualizações e explorar os repositórios remotos e locais do Maven no navegador do repositório Maven.
- Selecione Janela > Outro > Navegador do repositório Maven.
- Clique em Atualizar índices (
) na parte superior da janela Navegador do repositório Maven.
Ao clicar em Atualizar índices, o IDE verificará e fará o download do índice mais recente de cada um dos repositórios remotos do Maven. Um índice representa o estado atual dos artefatos localizados no repositório e é utilizado para proporcionar referências aos artefatos que estão disponíveis no aplicativo. Por padrão, o IDE não baixa um artefato de um repositório até que o artefato seja explicitamente necessário.
Nota: os índices são bem grandes e podem levar mais tempo para serem atualizados.
Para obter mais detalhes sobre o uso do Maven no NetBeans IDE, consulte a seção Configurando o Maven no tutorial Criando um aplicativo Maven Swing utilizando Hibernate e também Melhores práticas para o Apache Maven no NetBeans IDE.
Criando o projeto de aplicativo corporativo Maven
O objetivo deste exercício é criar um projeto de aplicativo corporativo utilizando o arquétipo de aplicativo corporativo Maven incorporado no IDE. O arquétipo de aplicativo corporativo também criará um projeto EJB e um projeto de aplicação Web.
O IDE inclui vários arquétipos Maven no assistente Novo projeto a fim de ajudá-lo a criar rapidamente tipos de projetos NetBeans comuns, como projetos de aplicativos corporativos (EAR), projetos de aplicativos Web (WAR) e projetos de módulo EJB (JAR). O assistente também permite criar projetos dos arquétipos de repositórios remotos registrados.
- Escolha Arquivo > Novo projeto (Ctrl-Shift-N; ⌘-Shift-N no Mac) no menu principal.
- Selecione Aplicativo corporativo na categoria Maven. Clique em Próximo.
- Digite MavenEnterpriseApp como nome do projeto e defina a sua localização.
- (Opcional) Modifique os detalhes do artefato. Clique em Avançar.
- Selecione GlassFish Server 3.1.1 como o servidor.
- Defina a versão do Java EE como Java EE 6.
- Selecione Criar módulo EJB e Criar módulo da aplicação Web. Clique em Terminar.
Ao clicar em Terminar, o IDE cria os projetos seguintes a partir do arquétipo de aplicativo corporativo Maven.
- EJB. (MavenEnterpriseApp-ejb) O projeto EJB geralmente contém o código-fonte com a lógica corporativa do aplicativo. O projeto EJB é empacotado como um arquivo JAR EJB.
- Webapp. (MavenEnterpriseApp-web) O projeto Webapp geralmente contém a camada de apresentação do aplicativo, como servlets e páginas JSF e JSP. O projeto Webapp também pode conter código-fonte com lógica corporativa. O projeto Webapp é empacotado como um arquivo WAR.
- Assembly. O projeto Assembly é utilizado para montar um arquivo EAR a partir dos arquivos EJB e WAR. O projeto Assembly não contém nenhuma origem.
- Aplicativo corporativo. (MavenEnterpriseApp-ear) O projeto de aplicativo corporativo não contém nenhuma origem. O aplicativo corporativo contém somente um arquivo POM (pom.xml) com detalhes sobre os módulos contidos no aplicativo corporativo.
Depois de criar o projeto de aplicativo corporativo, o projeto do aplicativo da empresa é identificado porque algumas dependências não estão disponíveis. Se você expandir o nó Dependências do projeto MavenEnterpriseApp-ear, será possível observar que o projeto exigirá as bibliotecas que estão faltando ou as que não estão no classpath.
Na janela Projetos, é possível clicar com o botão direito do mouse o item “dependência sem classpath” no nó Dependências e selecionar Expandir dependências para ver as dependências que estão faltando.
O projeto do aplicativo de empresa possui dependências em JAR e WAR, que serão empacotadas e estarão disponíveis depois que os projetos EJB e web forem compilados. É possível observar que os artefatos MavenEnterpriseApp-ejb-1.0-SNAPSHOT e MavenEnterpriseApp-web-1.0-SNAPSHOT estão listados como dependências.
É possível clicar no ícone Marven na barra de status para executar uma construção de aceleração e resolver as dependências restantes.
Especificar o servidor de destino.
No NetBeans IDE 7.1, é possível definir o servidor-alvo no Assistente de novo projeto. Nas versões anteriores do IDE, é preciso definir o servidor de destino na janela Propriedades do projeto.
Ao desenvolver aplicativos Maven, normalmente não é necessário especificar um servidor de aplicativos até que o aplicativo seja construído. No entanto, neste tutorial, o servidor de destino é definido antes de começar a escrever o seu código, para obter benefícios de alguns dos recursos de geração de código no IDE. Com a configuração do servidor de deployment, o IDE pode reconhecer as tecnologias suportadas pelo servidor e permite que várias opções de alguns assistentes gerem código otimizados para tal servidor.
- Inicie o servidor GlassFish.
- Clique com o botão direito do mouse no nó do projeto EJB na janela Projetos e selecione Propriedades.
- Selecione a categoria Executar e selecione o servidor GlassFish. Clique em OK.
Ao especificar o GlassFish como servidor de deployment antes de criar o código, o IDE oferecerá a opção de selecionar JTA no assistente para a criação da unidade de persistência. Você também pode optar por usar qualquer uma das fontes de dados registradas no servidor.
Nota. Se o GlassFish Server 3 não for especificado, o tipo de transação padrão ao criar a unidade de persistência será RESOURCE-LOCAL. Será necessário editar o arquivo persistence.xml manualmente para especificar a JTA se quiser que o contêiner gerencie as transações. Também será necessário especificar uma conexão de banco de dados em vez de uma fonte de dados registrada no assistente Nova unidade de persistência.
Codificando o projeto EJB
O projeto EJB contém a lógica corporativa do aplicativo. Neste aplicativo, o contêiner GlassFish gerenciará as transações utilizando a API de transação Java (JTA). Neste tutorial, você criará uma classe de entidade, um bean controlado por mensagem e uma fachada de sessão para a classe de entidade no projeto EJB.
Criando a unidade de persistência
Neste exercício, será criada uma unidade de persistência no projeto EJB. A unidade de persistência especifica os detalhes da conexão de banco de dados e como as transações são gerenciadas. Para este aplicativo, você especificará a JTA no assistente Nova unidade de persistência, já que deseja que o servidor GlassFish gerencie as transações.
Para criar a unidade de persistência, execute as seguintes etapas.
- Clique com o botão direito do mouse no nó do projeto EJB e selecione Novo > Outro no menu pop-up para abrir o assistente Novo arquivo.
- Selecione Unidade de persistência na categoria Persistência. Clique em Avançar.
- Selecione EclipseLink como o Provedor de persistência na caixa de diálogo Nova unidade de persistência.
- Selecione uma fonte de dados (por exemplo, selecione jdbc/sample se desejar utilizar o JavaDB).
A fonte de dados jdbc/sample é incorporada ao IDE na sua instalação e do servidor GlassFish, mas é possível especificar uma fonte de dados diferente se quiser utilizar um outro banco de dados.
É possível manter as outras opções padrão (nome da unidade de persistência, provedor da persistência EclipseLink).
- Certifique-se de que a opção Utilizar APIs de transação Java esteja selecionada e que Estratégia de geração de tabela esteja definida como Criar, para que as tabelas baseadas nas classes de entidade sejam criadas quando o aplicativo for implantado. Clique em Terminar.
Quando você clica em Terminar, o IDE cria o arquivo XML persistence.xml e o abre no editor. Na janela Projetos, é possível observar que o arquivo foi criado no diretório Outras origens > src/main/resources > META-INF. O arquivo contém detalhes sobre a conexão ao banco de dados e como as transações são gerenciadas. No editor, clique na guia Código-fonte para ver os seguintes detalhes acerca da unidade de persistência.
...
<persistence-unit name="com.mycompany_MavenEnterpriseApp-ejb_ejb_1.0-SNAPSHOTPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/sample</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
É possível observar que a JTA está especificada como o tipo de transação e que o aplicativo utilizará a fonte de dados registrada jdbc/sample.
Criando a classe de entidade
Neste exercício, será criada uma classe de entidade no projeto EJB para representar os objetos que serão persistentes no banco de dados. Para criar a classe de entidade NewsEntity, execute as etapas a seguir.
- Clique com o botão direito do mouse no módulo EJB na janela Projetos e selecione Novo > Outro para abrir o assistente Novo arquivo.
- Selecione Classe de entidade na categoria Persistência. Clique em Avançar.
- Digite NewsEntity para nome da classe.
- Digite ejb em Pacote e deixe Tipo de chave primária como Longa. Clique em Terminar.
Ao clicar em Terminar, a classe de entidade NewsEntity.java se abrirá no Editor de código-fonte. No Editor de código-fonte, adicione alguns campos executando as etapas a seguir.
- Adicione as seguintes instruções de campo à classe.
private String title;
private String body;
- Clique com o botão direito do mouse no Editor de código-fonte entre a definição de classes e selecione Inserir código (Alt-Insert; Ctrl-I no Mac) e selecione Getter e Setter.
- Na caixa de diálogo Gerar getters e setters, selecione os campos body e title. Clique em Gerar.
- Salve as alterações feitas na classe.
Criando o bean controlado por mensagem
Neste exercício, será criado um Bean controlado por mensagem no projeto EJB. Um bean controlado por mensagem é um enterprise bean que permite a troca assíncrona de mensagens. O aplicativo NewsApp utiliza um bean controlado por mensagem para receber e processar mensagens enviadas à fila por um servlet no módulo da Web.
Para utilizar um bean controlado por mensagem em um aplicativo, os recursos de conector utilizados pelo bean precisam estar registrados no servidor. Enquanto estiver implantando no servidor GlassFish, você poderá criar os recursos diretamente no servidor através do Console administrativo ou poderá criá-los no deployment pela especificação de detalhes no arquivo resources.xml. Quando o aplicativo é implantado no servidor, o servidor registra os recursos com base no arquivo descritor. Ao usar o assistente para novo arquivo no IDE para criar um Bean controlado por mensagem, o IDE gerará os elementos no arquivo descritor para você.
Em um projeto Maven, o arquivo glassfish-resources.xml está no diretório src/main/setup no nó do projeto na janela Arquivos.
- Clique com o botão direito do mouse no módulo EJB na janela Projetos e selecione Novo > Outro para abrir o assistente Novo arquivo.
- Na categoria Corporativo JavaBeans, selecione Bean controlado por mensagem. Clique em Próximo.
- Digite NewMessage para Nome EJB.
- Selecione ejb na lista suspensa Pacote.
- Clique no botão Adicionar ao lado do campo Destino do projeto para abrir a caixa de diálogo Adicionar destino da mensagem.
- Na caixa de diálogo Adicionar destino da mensagem, digite jms/NewMessage e selecione Fila como o tipo de destino. Clique em OK.
- Certifique-se de que o destino do projeto esteja correto. Clique em Terminar.
Ao clicar em Terminar, o IDE gera a classe de bean e adiciona as anotações seguintes que identificam a classe como um bean controlado por mensagem e as propriedades de configuração.
@MessageDriven(mappedName = "jms/NewMessage", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class NewMessage implements MessageListener {
public NewMessage() {
}
public void onMessage(Message message) {
}
}
- Introduza o recurso MessageDrivenContext na classe, adicionando o seguinte campo anotado à classe.
public class NewMessage implements MessageListener {
@Resource
private MessageDrivenContext mdc;
- Introduza o gerenciador de entidade na classe, adicionando o seguinte campo anotado (em negrito).
public class NewMessage implements MessageListener {
@Resource
private MessageDrivenContext mdc;
@PersistenceContext(unitName="com.mycompany_MavenEnterpriseApp-ejb_ejb_1.0-SNAPSHOTPU")
private EntityManager em;
A anotação @PersistenceContext especifica o contexto ao declarar a unidade de persistência. O valor de unitName é o nome da unidade de persistência.
- Adicione o seguinte método save (em negrito).
public NewMessage() {
}
public void onMessage(Message message) {
}
private void save(Object object) {
em.persist(object);
}
- Modifique o método onMessage, adicionando o seguinte (em negrito) ao corpo:
public void onMessage(Message message) {
ObjectMessage msg = null;
try {
if (message instanceof ObjectMessage) {
msg = (ObjectMessage) message;
NewsEntity e = (NewsEntity) msg.getObject();
save(e);
}
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
} catch (Throwable te) {
te.printStackTrace();
}
}
- Corrija as instruções de importação (Ctrl-Shift-I; ⌘-Shift-I no Mac) e salve as alterações.
Nota: quando geramos as instruções de importação, queremos garantir a importação das bibliotecas jms e javax.annotation.Resource.
Para obter mais detalhes sobre beans controlados por mensagem, consulte o capítulo O que é um Bean controlado por mensagem? no Tutorial do Java EE 6 , Parte I.
Criando o Bean de sessão
Neste exercício, será utilizado o assistente para criar uma fachada de sessão para a classe de entidade NewsEntity. O assistente gerará alguns métodos comuns para criar, editar e localizar os métodos que podem ser acessados a partir dos servlets no projeto webapp.
- Clique com o botão direito do mouse no módulo EJB e selecione Novo > Outro.
- Na categoria Persistência, selecione Beans de sessão para Classe de entidade e clique em Avançar.
- Selecione ejb.NewsEntity na lista de classes de entidades disponíveis e clique em Adicionar para mover a classe para o painel Classes de entidades selecionadas. Clique em Próximo.
- Insira ejb como Pacote.
- Não é necessário criar uma interface. Clique em Terminar.
Ao clicar em Terminar, o IDE gera duas classes de fachada de sessão: AbstractFacade.java e NewsEntityFacade.java que estente a classe de fachada abstrata. A classe de fachada abstrata define vários métodos que são usados comummente com classes de entidade.
No Java EE 6, as interfaces são opcionais. No Java EE 5, era necessário criar uma interface local para o bean de sessão e, em seguida, chamá-lo através da interface. No Java EE 6, a interface local é opcional e o servlet do módulo da Web pode acessar o bean de sessão diretamente através da fachada sem interface.
Codificando o aplicativo Web
Nesta seção, serão criados dois servlets no projeto webapp.
Criando o servlet ListNews
Neste exercício, você criará o servlet ListNews que será utilizado para exibir uma lista de mensagens enviadas. As anotações serão utilizadas para introduzir a fachada de sessão, acessar o método findAll e recuperar as mensagens enviadas.
- Clique com o botão direito do mouse em um projeto de módulo e selecione Novo > Servlet.
- Digite ListNews para o nome da classe.
- Digite web para o Nome do pacote. Clique em Terminar.
Ao clicar em Terminar, a classe persistence.xml irá se abrir no Editor de código-fonte.
- Clique com o botão direito do mouse no Editor de código-fonte entre a definição de classes e selecione Inserir código (Alt-Insert; Ctrl-I no Mac) e selecione Chamar bean corporativo.
- Na caixa de diálogo Chamar bean corporativo, expanda o nó MavenEnterpriseApp-ejb e selecione NewEntityFacade. Clique em OK.
Ao clicar em OK, o recurso EJB é introduzido no servlet utilizando a anotação @EJB.
@WebServlet(name = "ListNews", urlPatterns = {"/ListNews"})
public class ListNews extends HttpServlet {
@EJB
private NewsEntityFacade newsEntityFacade;
- No método processRequest, modifique o método adicionando o seguinte código (em negrito) ao corpo do método:
out.println("<h1>Servlet ListNews at " + request.getContextPath () + "</h1>");
List news = newsEntityFacade.findAll();
for (Iterator it = news.iterator(); it.hasNext();) {
NewsEntity elem = (NewsEntity) it.next();
out.println(" <b>"+elem.getTitle()+" </b><br />");
out.println(elem.getBody()+"<br /> ");
}
out.println("<a href='PostMessage'>Add new message</a>");
out.println("</body>");
Nota. Pode ser preciso retirar o comentário do código se você estiver usando uma versão anterior do IDE.
- Corrija as importações (Ctrl-Shift-I; ⌘-Shift-I no Mac) e salve as alterações.
Ao gerar as instruções de importação, você deseja importar as bibliotecas java.util.
Criação do servlet PostMessage
Neste exercício, será criado o servlet PostMessage que será utilizado para enviar mensagens. Utilizaremos anotações para injetar os recursos JMS que criamos diretamente no servlet, especificando o nome variável e o nome para o qual é mapeado. Em seguida, adicionaremos o código para enviar a mensagem JMS e o código para o formulário HTML para adicionar uma mensagem.
- Clique com o botão direito do mouse em um projeto de módulo e selecione Novo > Servlet.
- Digite PostMessage para nome da classe.
- Selecione web em nome do pacote. Clique em Terminar.
Ao clicar em Terminar, a classe PostMessage.java se abrirá no Editor de código-fonte.
- No Editor de código-fonte, utilize anotações para introduzir os recursos ConnectionFactory e Queue, adicionando as seguintes declarações de campo.
@WebServlet(name="PostMessage", urlPatterns={"/PostMessage"})
public class PostMessage extends HttpServlet {
@Resource(mappedName="jms/NewMessageFactory")
private ConnectionFactory connectionFactory;
@Resource(mappedName="jms/NewMessage")
private Queue queue;
- Corrija as importações para importar as bibliotecas javax.jms.
Nota. Se o IDE não oferecer o javax.jms como opção, é possível pesquisar os repositórios em busca do artefato correto clicando no ícone de sugestão da margem ao lado de private ConnectionFactory connectionFactory; e selecionando Pesquisar dependência nos repositórios Maven.
É possível utilizar a caixa de diálogo Pesquisar nos repositórios Maven para localizar o artefato javaee-api-6.0 que contém ConnectionFactory.
- Adicione o código a seguir para enviar as mensagens JMS ao método processRequest.
response.setContentType("text/html;charset=UTF-8");
// Adicione o código a seguir para enviar a mensagem JMS
String title=request.getParameter("title");
String body=request.getParameter("body");
if ((title!=null) && (body!=null)) {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage message = session.createObjectMessage();
// aqui criamos a NewsEntity, que será enviada em mensagem JMS
NewsEntity e = new NewsEntity();
e.setTitle(title);
e.setBody(body);
message.setObject(e);
messageProducer.send(message);
messageProducer.close();
connection.close();
response.sendRedirect("ListNews");
} catch (JMSException ex) {
ex.printStackTrace();
}
}
- Adicione as linhas a seguir (em negrito) ao formulário web para adicionar uma mensagem.
out.println("Servlet PostMessage at " + request.getContextPath() + "</h1>");
// O código a seguir adiciona o formulário para a página da web
out.println("<form>");
out.println("Title: <input type='text' name='title'><br/>");
out.println("Message: <textarea name='body'></textarea><br/>");
out.println("<input type='submit'><br/>");
out.println("</form>");
out.println("</body>");
Nota. Pode ser preciso retirar o comentário do código se você estiver usando uma versão anterior do IDE.
- Corrija as importações e salve as alterações.
Nota. Você quer importar as bibliotecas javax.jms de Connection, ConnectionFactory, Session e Queue.
Construindo o aplicativo com Maven
Agora que terminou de criar o código do aplicativo, é possível utilizar o Maven para construir o aplicativo corporativo. Nesta seção, você construirá e empacotará os projetos em um arquivo EAR. O arquivo EAR conterá um arquivo JAR EJB e um arquivo WAR. Depois de criar o arquivo EAR, é possível implantá-lo no servidor de destino.
Trabalhando com dependências do projeto
Neste exercício, você examinará o POM pom.xml do projeto Web e modificar o POM para impedir que sejam incluídos artefatos desnecessários no WAR durante o empacotamento.
Cada projeto Maven contém um arquivo pom.xml que contém os detalhes sobre o conteúdo dos arquivos. Todas as bibliotecas externas que sejam necessárias para o projeto estão listadas como dependências no POM. É possível modificar o POM para especificar as dependências que precisam estar incluídas durante o empacotamento do arquivo.
Neste aplicativo, os arquivos JAR EJB e WAR serão empacotados em um arquivo EAR. Se observar o pom.xml do projeto MavenEnterpriseApp-ear, poderá notar que o EJB e o WAR estão declarados como dependências.
Se observar o pom.xml do projeto Web, poderá notar que o arquivo EJB está declarado como uma dependência e o escopo está especificado como fornecido. Quando o valor do elemento do escopo de um artefato é fornecido, o artefato não será incluso durante a embalagem. O projeto web precisa do arquivo EJB como uma dependência, mas neste aplicativo não se deseja incluir o arquivo EJB no WAR durante o empacotamento porque o arquivo EJB estará disponível e fornecido como parte do arquivo EAR.
É possível clicar com o botão direito do mouse no pom.xml e selecionar Mostrar gráfico de dependência para ver uma representação visual das dependências do projeto. É possível colocar o cursor sobre um artefato para exibir uma dica de ferramenta com os detalhes do artefato.
Execute as etapas a seguir para modificar o POM do projeto web para adicionar um elemento escopo à dependência no artefato javaee-api.
- Expanda o nó Arquivos do projeto no projeto web.
- Clique duas vezes em pom.xml para abrir o arquivo no editor.
- Modifique a dependência no artefato javaee-api editando o POM a fim de adicionar o seguinte elemento <scope>provided</scope>.
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
É possível utilizar o autocompletar de código no editor POM para ajudá-lo a editar o arquivo.
Ao declarar que a dependência é fornecida, o Maven não empacotará o artefato ao construir o arquivo WAR.
Nota. Se você estiver usando o NetBeans IDE 6.9, é preciso modificar pom.xml para também adicionar o elemento <scope>provided</scope> à dependência no arquivo EJB.
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>MavenEnterpriseApp-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
- Salve as alterações.
Construindo com dependências
A estrutura de construção Maven percorre uma sequência específica de fases, e cada fase compreende uma ou mais metas e pode ser configurada para utilizar vários plug-ins Maven. O item de menu Construir com dependências é mapeado para a fase instalar do ciclo de vida de construção do Maven e é configurado para utilizar o plug-in Reactor. Ao selecionar Construir com dependências no menu pop-up, o Maven constrói o aplicativo e as dependências necessárias, bem como copia os artefatos construídos no repositório local.
É possível modificar como as fases e as metas do Maven são mapeados para as ações do menu no painel Ações da caixa de diálogo Propriedades do projeto.
Para construir o arquivo EAR, execute os passos a seguir.
- Clique com o botão direito do mouse no nó do projeto MavenEnterpriseApp-ear e selecione Construir com dependências.
Quando você constrói o projeto EAR utilizando o plug-in Reactor, os subprojetos que são dependências do projeto EAR são compilados antes da compilação do projeto Assembly. A janela Saída exibe a ordem de construção.
Os resultados da construção também são exibidos na janela Saída.
Após construir o projeto EAR, é possível ver o arquivo EAR final dentro do diretório target no nó do projeto EAR na janela Arquivos.
Se o nome de artefato padrão com.mycompany foi utilizado, é possível utilizar o Navegador do repositório Maven para visualizar os artefatos de construção expandindo com.mycompany no Repositório local.
Para obter mais detalhes sobre a construção de projetos Maven, consulte Maven: Introdução ao ciclo de vida de construção em maven.apache.org.
Implantando e executando o aplicativo
Esta seção descreve dois métodos para a implantação do arquivo EAR no servidor. É possível implantar o aplicativo no servidor GlassFish utilizando uma ação do menu no IDE ou a ferramenta Implantar no Console administrativo GlassFish.
Implantando e executando o aplicativo a partir do IDE
Neste exercício, você usará a ação Executar para implantar o arquivo EAR no servidor GlassFish. Após a implementação do aplicativo, você abrirá a página ListNews do aplicativo no navegador e adicionará uma mensagem.
- Clique com o botão direito do mouse no nó do projeto EAR na janela Projetos e selecione Executar.
Quando se clica em Executar, o IDE implementará o arquivo EAR e criará os recursos JMS no servidor. O IDE abre a página padrão de índice do projeto (http://localhost:8080/MavenEnterpriseApp-web/) no navegador.
- Abra o navegador na URL a seguir para exibir a página ListNews.
http://localhost:8080/MavenEnterpriseApp-web/ListNews.
Ao executar o projeto pela primeira vez, o banco de dados está vazio e não há mensagens a serem exibidas.

- Clique em Adicionar nova mensagem.
- Digite uma mensagem no formulário no servlet PostMessage. Clique em Submeter consulta.
Ao adicionar uma mensagem com o servlet PostMessage, a mensagem é enviada para o bean controlado por mensagem para escrita no armazenamento persistente e o servlet ListNews é chamado para exibir as mensagens no banco de dados. A lista de mensagens no banco de dados recuperada pela ListNews, em geral, ainda não contém a nova mensagem, porque o serviço de mensagem é assíncrono.
Compilar no Salvamento e Organizar no Salvamento são habilitados por padrão nos projetos Maven que especificam o servidor GlassFish como o servidor de destino. Por exemplo, caso um salvamento seja modificado como servlet, é possível recarregá-lo no navegador e visualizar as alterações sem ter que realizar deployment novamente no aplicativo.
Veja se você está usando o NetBeans IDE 7.0.
No NetBeans IDE 7.0, é necessário executar as etapas a seguir para modificar as metas do Maven que são mapeadas para a ação Executar. Após modificar a ação, é possível utilizar a ação Executar para implantar o EAR no servidor. Quando se seleciona a ação Executar, pode ser necessário selecionar servidor GlassFish na caixa de diálogo Selecionar servidor de implementação.
- Clique com o botão direito do mouse no nó do projeto EAR na janela Projetos e escolha Propriedades).
- Selecione Ações na lista Categorias no painel esquerdo da janela Propriedades.
- Selecione Executar projeto na lista Ações no painel direito.
- No campo de texto Executar metas, exclua a meta package e digite install. Clique em OK.

Implantando a partir do console de administração do GlassFish
Neste exercício, o arquivo EAR será implantado utilizando a ferramenta de implantação do console de administração do GlassFish.
- Expanda o nó Servidores na janela Serviços.
- Inicie o servidor GlassFish.
- Clique com o botão direito do mouse no nó Servidor GlassFish e selecione Visualizar console Admin para abrir o console Admin do GlassFish no navegador.
- Clique no nó Aplicativos no painel esquerdo do console Admin.
- Clique no botão Implantar no painel principal do console Admin.
- Clique em Procurar para localizar o arquivo EAR do aplicativo corporativo.
O arquivo EAR está localizado no diretório target dentro do diretório do aplicativo corporativo no sistema local.
- Clique em OK.
Ao clicar em OK, a ferramenta de implantação do GlassFish implanta o aplicativo.
Nota. Se implantar o aplicativo utilizando a ferramenta de implantação no GlassFish Admin Console, você também precisará criar manualmente os recursos necessários para o aplicativo, caso estes não existam.
Baixando o projeto da solução
É possível fazer o download da solução para este tutorial como um projeto, das seguintes formas:
Consulte também
Para obter mais informações sobre o uso do NetBeans IDE para desenvolver aplicativos Java EE, consulte recursos a seguir:
Para mais informações sobre o uso do Enterprise Beans consulte o Tutorial do Java EE 6.
Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos dos recursos de desenvolvimento do Java EE do NetBeans IDE, inscreva-se na lista de endereçamento de nbj2ee.