0 down
Eu criei EJB para efetuar alguns testes e aprimorar meus conhecimentos a estrutura no momento está a seguinte.
Tenho um EJB chamado ClienteEJB, e a sua implementação chamada ClienteBean Tenho uma Action chamada ClienteAction.
Dentro da ClienteAction eu faço uma chamada a um método qualquer do EJB passando como parametro uma instância de Cliente.
Dentro desse método do EJB eu realizo algumas modificações nos atributos, por exemplo, altero o nome do cliente.
Após o método EJB ser processado, o processamento volta para minha Action, só que neste momento todas as alterações realizadas no EJB não estão lá. A minha instância de Cliente continua exatamente com os mesmos atributos que tinha antes de entrar no método EJB.
Porquê isso acontece?, Como posso contornar isso? Isso é de extrema importância
Código EJB:
[code]package br.com.ejb;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import br.com.entity.PreCadastroCliente;
import br.com.pine.ejb.dao.PineEntityDAO;
@Stateless(mappedName = “PreCadastroClienteEJB”)
@Remote(value = PreCadastroClienteEJB.class)
public class PreCadastroClienteBean extends PineEntityDAO implements PreCadastroClienteEJB {
public void foo(PreCadastroCliente pcc) {
pcc.setNmFantasia("PCC");
}
}
[/code]
[code]
package br.com.ejb.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import br.com.ejb.PreCadastroClienteEJB;
import br.com.entity.PreCadastroCliente;
import br.com.pine.ejb.PineServiceLocator;
import br.com.pine.struts.PineAction;
public class PreCadastroClienteAction extends PineAction {
public ActionForward cadPreCadastroCliente(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
PreCadastroClienteEJB preCadastroClienteEJB = (PreCadastroClienteEJB) PineServiceLocator.findEJB(PreCadastroClienteEJB.class);
PreCadastroCliente cliente = new PreCadastroCliente();
cliente.setNmFantasia("Nome fantasia");
preCadastroClienteEJB.foo(cliente);
System.out.println("Nm fantasia após ejb: " + cliente.getNmFantasia());
return mapping.findForward("cadCliente");
}[/code]
O objetivo dessa dúvida é que eu realizo inserts dentro do meu DAO, mas quem é responsável por chamar meus DAO é o EJB, lá dentro com JPA, eu insiro a nova entidade no banco de dados, a JPA cria um novo código sequencial pra essa entidade pra mim, e eu preciso que este código esteja disponível na minha Action.