email = ""; @Column(name="SENHA", nullable=false) protected String senha = ""; @Column(name="TELEFONE", nullable=true) protected String telefone = ""; @Embedded protected Endereco endereco; public Cliente() { this.endereco = new Endereco(); } //getters, setters e outros metodos }Varias anotacoes (como @Table, @ID e @Column) dao importantes informacoes ao JPA de como deve ser feito o mapeamento objeto-relacional de uma maneira facil e segura. O mais interessante e que as anotacoes sao ignoradas pela JVM fora do contexto do container EJB e do controlador de entidades JPA. Em outras palavras, podemos testar tudo sem a necessidade de um aparato complicado que certamente prejudicaria a testabilidade dos componentes (conceito caro para quem trabalha com TDD).Com tudo isso pronto, poderiamos ter um servlet controlador com um codigo parecido com esse:public class GerenciarClienteServlet extends HttpServlet { @EJB Repositorio repositorio; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cliente cliente = new Cliente(); RequestDispatcher rd = null; try { //validacoes excluidas para melhorar a legibilidade cliente.setNome(request.getParameter("nome")); cliente.setLogin(request.getParameter("login")); //dados de endereco cliente.getEndereco().setRua(request.getParameter("rua")); cliente.getEndereco().setBairro(request.getParameter("bairro")); cliente.getEndereco().setCidade(request.getParameter("cidade")); cliente.getEndereco().setEstado(request.getParameter("estado")); cliente.setSenha(request.getParameter("senha")); cliente.setTelefone(request.getParameter("fone")); cliente.setEmail(request.getParameter("email")); repositorio.add(cliente); request.setAttribute("cliente", cliente); request.setAttribute("mensagem", "Cliente cadastrado com sucesso!"); rd = request.getRequestDispatcher("/cadastroCliente.jsp"); rd.forward(request, response); } catch (Exception e) { //gero log, direciono para pagina de erro, etc } }A anotacao @EJB injeta uma instancia de RepositorioDeClientes e passa a controlar o seu ciclo de vida, facilitando muito o trabalho do desenvolvedor. Quem fica responsavel pela criacao do objeto e o proprio container, que tambem se encarrega de sua destruicao. O container ira criar um pool de objetos para otimizar o desempenho da aplicacao. E importante observar que um servlet compartilha a mesma instancia com varios clientes e por isso nao devemos injetar um session bean @Stateful pois esse mantera o estado do objeto entre todas as requisicoes. Como nosso EJB do exemplo e anotado com @Stateless podemos injeta-lo sem problemas.Concluindo, nessa breve introducao, vimos como e viavel trabalhar com um design limpo (orientado ao dominio e utilizando POJOs) e utilizar os recursos oferecidos pelo EJB de maneira facil e descomplicada. A maior parte da "magia negra" do EJB e devida aos recursos oferecidos pelas anotacoes Java. Transformar uma classe em um poderoso enterprise bean apenas usando uma anotacao @Stateless e simplesmente bom demais para ser ignorado.Para saber mais: http://www.amazon.com/EJB-3-Action-Debu-Panda/dp/1933988347http://www.amazon.com/Enterprise-JavaBeans-3-1-Andrew-Rubinger/dp/0596158025 (previsao 09/2010)