Comparando a plataforma Java EE 5 e a plataforma J2EE 1.4
Este documento compara o processo de desenvolvimento na plataforma JavaTM, Enterprise Edition 5 ("Java EE 5"), com o processo de desenvolvimento na plataforma Java 2, Enterprise Edition 1.4 ("J2EE 1.4"), e demonstra como a tecnologia Java EE 5 simplifica o desenvolvimento de aplicativos Java. Para comparar o grau de facilidade do novo modelo de desenvolvimento, usaremos o NetBeans IDE 5.5 para criar o mesmo aplicativo criado no Guia de início rápido do NetBeans IDE 5.0 para aplicativos J2EE.
Neste documento, você criará um aplicativo da Web que irá acessar um banco de dados. No aplicativo da Web, você usará o IDE para gerar classes de entidade de um banco de dados. Em seguida criará um servlet para exibir as informações.
Duração prevista: 15 minutos
Pré-requisitos
Este tutorial pressupõe que você tenha algum conhecimento básico das tecnologias a seguir, ou alguma experiência de programação com elas:
- Programação em Java
- NetBeans IDE
Software necessário para este tutorial
Para este tutorial, você precisa ter instalados no computador os seguintes softwares:
Exercícios do tutorial
Configurando o IDE para usar o servidor de aplicativos
Para este tutorial, é necessário ter uma instância do Sun Java System Application Server Platform Edition 9 registrado com o IDE. Neste exercício, registraremos o servidor de aplicativos Sun Java System no IDE.
- No menu principal, escolha Ferramentas > Gerenciador de servidores.
- Clique em Adicionar servidor. Selecione o servidor de aplicativos Sun Java System e dê um nome à instância. Em seguida clique em Próximo.
- Especifique o diretório de instalação do servidor de aplicativos (por exemplo, C:\Sun\Appserver).
- Deixe marcado o botão de opção Registrar domínio local padrão e selecione um domínio.
- Opcionalmente, clique em Próximo e insira o nome de usuário e a senha de administrador. Se não desejar armazenar o nome de usuário e a senha no diretório de usuário do IDE, deixe estes campos vazios. Você terá de fornecer informações toda vez que o IDE as solicitar.
Observação: A senha de administração padrão é adminadmin.
- Clique em Finalizar. O IDE registra o servidor e o lista no nó Servidores na janela Tempo de execução.
Resumo
Neste exercício, registramos o servidor de aplicativos Sun Java System no IDE.
Configurando o projeto de aplicativo da Web
No Guia de início rápido do NetBeans IDE 5.0, criamos um aplicativo empresarial completo com um módulo EJB e um módulo da Web. Fizemos isso porque tivemos de colocar a entidade e os Beans de sessão no módulo EJB quando desenvolvemos para a plataforma J2EE 1.4. Para acessar os Beans de entidade a partir do módulo da Web, tivemos de adicionar um código de pesquisa.
Neste exemplo de desenvolvimento para a plataforma Java EE 5, não é necessário um aplicativo empresarial completo porque não precisamos de um módulo EJB nem de Beans de sessão. Em vez disso, podemos criar um aplicativo da Web simples e colocar as classes de entidade diretamente no aplicativo da Web.
- Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Na categoria Web, selecione Aplicativo da Web.
- Nomeie o projeto CustomerBook, defina o servidor como servidor de aplicativos Sun Java System, defina a versão do Java EE como Java EE 5 e clique em Finalizar.
Resumo
Neste exercício, criamos um aplicativo da Web Java EE 5 que irá conter classes de entidade.
Codificando o aplicativo da Web
A codificação de um aplicativo da Web para a plataforma Java EE 5 é muito mais rápida e mais fácil do que a criação de uma para a plataforma J2EE 1.4. Ainda temos de fazer algumas configurações básicas, como estabelecer uma conexão com nosso banco de dados, mas assim que o agrupamento de conexões e a fonte de dados forem criados o desenvolvimento será muito mais fácil, porque, quando desenvolvemos para a plataforma Java EE 5, o recipiente executa a maior parte do trabalho.
Uma vez que o recipiente é uma persistência gerencial, não precisamos editar os descritores de implantação para configurar os mapeamentos de CMP ou especificar os métodos localizadores. De fato, neste exemplo, não precisamos de quaisquer descritores de desenvolvimento. Na plataforma Java EE 5, a persistência não se limita mais a um componente EJB. Java EE 5 introduz a API da Persistência Java, que pode ser usada por componentes que não sejam EJB, como um aplicativo da Web.
A tecnologia Java EE 5 também elimina a necessidade de uma grande quantidade de códigos de timbre necessários no desenvolvimento de J2EE 1.4. O desenvolvimento do EJB foi simplificado, de maneira que um menor número de interfaces é necessário, a pesquisa é mais simples, as anotações tornam mais simples e claras a definição do componente e a injeção de recursos.
Persistência gerencial
No Guia de início rápido do NetBeans IDE 5.0, criamos Beans de entidade de CMP e definimos descritores de implantação no ejb-jar.xml para gerenciar persistência e o mapeamento relacional de objeto. Quando desenvolvemos para a plataforma Java EE 5, não é mais necessário usar descritores de desenvolvimento para fornecer informações ao recipiente para gerenciar persistência. Em vez disso, é necessário somente criar uma unidade de persistência, especificar a fonte de dados e o gerenciador de entidades a serem utilizados e em seguida deixar o recipiente realizar o trabalho de gerenciar entidades e persistência. O recipiente descobre os Beans de entidade no tempo de execução.
Criamos uma unidade de persistência definindo-a em persistence.xml. Se não houver persistence.xml em nosso projeto ou módulo, temos de criá-lo. Podemos adicionar uma unidade de persistência a nosso projeto com o assistente para Nova unidade de persistência, que irá nos ajudar a criar o persistence.xml e a definir as propriedades da unidade de persistência. Observação: Podemos também criar uma unidade de persistência no assistente para Nova entidade de classe. Ao criar uma classe de entidade, o assistente solicitará a criação de uma unidade de persistência, se uma não existir.
- Selecione Novo arquivo (Ctrl-N) para abrir o assistente para Novo arquivo.
- Na categoria Persistência, selecione Unidade de persistência e clique em Próximo.
- Deixe o nome padrão da unidade de persistência sugerido pelo assistente.
- Use o TopLink (default) listado na lista suspensa Provedor de persistências.
O provedor padrão é o TopLink Essential.jar. O TopLink Essential.jar contém as bibliotecas para a persistência de Java. O gerenciador de entidades está localizado no TopLink Essential.jar.
- Use a fonte de dados padrão jdbc/sample listada na lista suspensa Fonte de dados.
A fonte de dados padrão jdbc/sample é usada para se conectar ao banco de dados Java DB que é fornecido com o servidor de aplicativos Sun Java System.
- Clique em Finalizar.
Ao clicar em Finalizar, persistence.xml é criado para o projeto e se abre no Editor de fontes. Você pode também clicar em XML na barra de ferramentas do Editor de fontes para ver a visualização em XML de persistence.xml. Este arquivo contém todas as informações de que o recipiente de Java EE 5 precisa para gerenciar as entidades e a persistência do aplicativo.
Criando as classes de entidade
Ao desenvolver para a plataforma J2EE 1.4, quando criou os Beans de entidade você os colocou em um módulo EJB mesmo quando o aplicativo era um aplicativo da Web simples. Cada Bean de entidade precisou de diversas interfaces e você teve de configurar os descritores de desenvolvimento no ejb-jar.xml para definir os Beans de entidade, as interfaces, as persistências e as consultas do localizador para cada Bean de entidade.
No Java EE 5, em vez de criar Beans de entidade e colocá-los no módulo EJB, podemos usar classes de entidade simples, e estas podem ser colocadas em qualquer lugar em um aplicativo Java EE 5. Escrever classes para aplicativos Java EE 5 é também mais fácil do que era para a plataforma J2EE 1.4, porque você pode usar anotações para definir componentes e injetar recursos.
Agora usaremos as classes de entidade do assistente para Banco de dados para criar as classes de entidade baseadas em nosso banco de dados relacional.
- Inicie o banco de dados Java DB escolhendo Ferramentas > Banco de dados Java DB > Iniciar servidor Java DB a partir do menu principal.
- Selecione Novo arquivo (Ctrl-N) para abrir o assistente para Novo arquivo. Selecione Classes de entidade do banco de dados na categoria Persistência e clique em Próximo.
- Nas Classes de entidade do assistente para Banco de dados, selecione a fonte de dados jdbc/sample para o banco de dados a partir da lista suspensa Fonte de dados e forneça a senha, se necessário. (A senha deve ser "app".) Após você selecionar a fonte de dados, é exibida uma lista de tabelas disponíveis no painel Tabelas disponíveis.
- Selecione a tabela CUSTOMER em Tabelas disponíveis e clique em Adicionar.
Ao clicar em Adicionar, quaisquer tabelas relacionadas à tabela selecionada também serão adicionadas. Neste exemplo, a tabela DISCOUNT_CODE também é adicionada. A tabela DISCOUNT_CODE fica acinzentada (desativada) porque a tabela CUSTOMER faz referência a ela e uma classe de entidade deve ser gerada para ela para gerar a classe de entidade Customer. Para ver como a tabela acinzentada está relacionada à tabela selecionada, passe o cursor do mouse sobre o nome da tabela no painel Tabelas selecionadas.
- Clique em Próximo.
O assistente exibe a tabela selecionada e quaisquer tabelas relacionadas. O assistente também exibe as classes de entidade que serão criadas com base nas tabelas selecionadas. Se desejar modificar o nome da classe que será gerada, digite o nome no campo Nome da classe.
- Especifique ejb como o pacote para as classes geradas e clique em Finalizar.

Quando você clica em Finalizar, o IDE gera classes de entidade para a tabela CUSTOMER e as tabelas relacionadas à tabela CUSTOMER. Se expandir o pacote de fontes ejb na janela Projetos, você verá que o IDE criou as classes Java Customer.java e DiscountCode.java no pacote ejb no projeto do aplicativo da Web.
Você verá que o IDE criou somente duas classes, uma para cada uma das tabelas do banco de dados. Quando você usou o Beans de entidade de CMP do DB no Guia de início rápido do NetBeans IDE 5.0 para aplicativos J2EE, o IDE criou quatro classes para cada tabela.
Se examinar Customer.java no Editor de fontes, você notará que a anotação @Entity é usada para declarar que a classe é uma classe de entidade. Outras anotações fornecem informações adicionais, como a tabela do banco de dados e as colunas para as quais a classe de entidade e suas propriedades estão mapeadas.
Você também notará que boa parte do código de timbre geralmente encontrado nos Beans de entidade desapareceu. Métodos como ejbRemove, setMessage, setSessionContext, ejbActivate e ejbPassivate não são mais necessários na classe de entidade no Java EE 5.
Codificando o servlet
Agora precisamos adicionar um servlet ao aplicativo da Web. Em vez de adicionar a criação de recursos e o código de pesquisa ao servlet, com o Java EE 5 podemos usar a injeção de recursos para transferir esse trabalho para o recipiente. Podemos usar anotações para injetar recursos diretamente no servlet, e o recipiente irá gerenciar a criação e a pesquisa do recurso solicitado. Neste caso, desejamos usar um gerencidor de entidades, como especificado na unidade de persistência.
- Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Novo > Servlet.
- No assistente para Novo servlet, nomeie o servlet CustomerDetails e coloque-o em um pacote nomeado web. Clique em Finalizar. Ao clicar em Finalizar, CustomerDetails.java se abre no Editor de fontes.
- No Editor de fontes, clique com o botão direito do mouse em CustomerDetails.java e escolha Persistência > Usar o gerenciador de entidades para injetar PersistenceContext na classe. O IDE adiciona a anotação abaixo que especifica a unidade de persistência usada pelo servlet. A anotação é adicionada acima da declaração da classe.
@PersistenceContext(name = "persistence/LogicalName", unitName = "CustomerBookPU")
O IDE também adiciona a seguinte anotação ao injetar um recurso para gerenciar os limites de transação:
@Resource
private UserTransaction utx;
O IDE adiciona o seguinte código padrão ao servlet:
public void persist(Object object) {
try {
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");
utx.begin();
// TODO:
// em.persist(object); utx.commit();
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);
throw new RuntimeException(e);
}
}
Este código pesquisa a unidade de persistência definida por @PersistenceContext e uma instância do gerenciador de entidades.
- Em CustomerDetails.java, modifique o código de pesquisa gerado, mostrado acima, para fazer referência ao objeto de entidade. Quando tiver terminado, o código modificado terá esta aparência (o código mostrado em negrito indica as linhas alteradas):
public Customer findByID(Integer customerNr) {
Customer customer = null;
try {
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");
utx.begin();
customer = em.find(Customer.class, customerNr);
utx.commit();
} catch(Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);
throw new RuntimeException(e);
}
return customer;
}
- Não comente o código no método processRequest e adicione o seguinte código em negrito:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet CustomerDetails</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Search Customer Information</h1>");
String customerNr = request.getParameter("customer_nr");
if((customerNr != null) && !(customerNr.equals(""))) {
Customer customer = findByID(new Integer(customerNr));
if(customer != null){
out.println("Customer's info for nr. " + customerNr + ": " + customer.getName());
}else{
out.println("Customer not found.");
}
}
out.println("<form>");
out.println("Customer number: <input type='text' name='customer_nr' />");
out.println("<input type=submit value=Select />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();
}
- Pressione Alt-Shift-F para gerar instruções de importação ausentes.
Executando o projeto
- Na janela Projetos, clique com o botão direito do mouse no nó do projeto CustomerBook e escolha Propriedades. No painel Executar da caixa de diálogo Propriedades do projeto, digite /CustomerDetails no campo URL relativo e clique em OK.
- Clique com o botão direito do mouse no nó do projeto e escolha Executar projeto. O IDE inicia o servidor de aplicativos, constrói o projeto e abre a página CustomerDetails no navegador.
- Insira um número para o ID (por exemplo, "1") no campo de número Cliente e clique em Enviar. O servlet mostra o nome do cliente com o número do ID.
Resumo
Neste exercício, você construiu o aplicativo CustomerBook usando a tecnologia Java EE 5. Em seguida implantou o projeto e testou o aplicativo da Web.
Próximas etapas
Para obter mais informações sobre o uso do NetBeans IDE 5.5 para desenvolver aplicativos Java EE, consulte os seguintes recursos:
Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos dos recursos de desenvolvimento de Java EE do NetBeans IDE, inscreva-se na lista de endereçamento de nbj2ee.