domingo, 5 de agosto de 2007

Exemplo completo com EJB 3

Criando o Entity Bean

package teste;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Cliente implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   private int codigo;
   private String nome;
   private String endereco;
   private String telefone;

   public String toString() {
      return String
            .format("%20s%20s%20s%20s", codigo, nome, endereco, telefone);
   }

   public int getCodigo() {
      return codigo;
   }

   public void setCodigo(int codigo) {
      this.codigo = codigo;
   }

   public String getNome() {
      return nome;
   }

   public void setNome(String nome) {
      this.nome = nome;
   }

   public String getEndereco() {
      return endereco;
   }

   public void setEndereco(String endereco) {
      this.endereco = endereco;
   }

   public String getTelefone() {
      return telefone;
   }

   public void setTelefone(String telefone) {
      this.telefone = telefone;
   }
}


Criando o Session Bean
Interface Remota
package teste;

import java.util.List;

import javax.ejb.Remote;

@Remote
public interface ClienteBean {
   void inserir(Cliente cliente);

   List<Cliente> listar();
}


Implementação
package teste;

import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "cli", mappedName = "ejb/ClienteBean")
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class ClienteBeanImpl implements ClienteBean {
   @PersistenceContext(unitName = "bean1")
   private EntityManager em;

   public void inserir(Cliente cliente) {
      em.persist(cliente);
   }

   @TransactionAttribute(TransactionAttributeType.NEVER)
   public List<Cliente> listar() {
      Query query = em.createQuery("select c from Cliente c");
      return query.getResultList();
   }
}


Cliente do EJB
import java.util.List;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import teste.Cliente;
import teste.ClienteBean;

public class Consumo {
   public static void main(String[] args) {
      if (args.length == 0) {
         System.out.println("Qtd de parametros incorreta");
         System.exit(0);
      }
      int codigo = new Integer(args[0]);
      try {
         Properties props = new Properties();
         props.setProperty("java.naming.factory.initial",
               "com.sun.enterprise.naming.SerialInitContextFactory");
         props.setProperty("java.naming.factory.url.pkgs",
               "com.sun.enterprise.naming");
         props.setProperty("java.naming.factory.state",
               "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
         // optional. Defaults to localhost. Only needed if web server is
         // running
         // on a different host than the appserver
         props.setProperty("org.omg.CORBA.ORBInitialHost""10.0.0.100");
         // optional. Defaults to 3700. Only needed if target orb port is not
         // 3700.
         props.setProperty("org.omg.CORBA.ORBInitialPort""3700");
         InitialContext ctx = new InitialContext(props);
         ClienteBean bean = (ClienteBeanctx.lookup("ejb/ClienteBean");
         Cliente cliente = new Cliente();
         cliente.setCodigo(codigo);
         cliente.setNome("antonio");
         cliente.setEndereco("Rua 2");
         cliente.setTelefone("6363-5252");
         bean.inserir(cliente);
         List<Cliente> lista = bean.listar();
         for (Cliente c : lista) {
            System.out.println(c);
         }
      catch (NamingException e) {
         e.printStackTrace();
      }
   }
}


Relação de .jar
Arquivos .jar necessários:

No ejb:
  • appserv-rt.jar
  • javaee.jar

No cliente:
  • appserv-rt.jar
  • javaee.jar
  • appserv-deployment-client.jar

Nenhum comentário: