Salve, Salve GUJ,
Estou percebendo uma característica do EJB3 SessionBean, e gostaria de enteder se é um erro ou não.
Tenho esse SessionBean e suas interfaces como manda a regra.
@Stateless
public class FinanceSession implements IFinanceLocal, IFinanceRemote {
@PersistenceContext
EntityManager em;
public void updateAccount(Account account) {
//TEM QUE FAZER O MERGE AQUI SE NAO DAH EXCEPTION !!!!
em.persist(em.merge(account));
}
public Account getAccount(Integer id) {
Query query = em.createQuery("SELECT a from Account a where id = " + id);
return (Account) query.getSingleResult();
}
// mais codigo aqui...
}
Quando realizado um lookup em um Servlet no próprio contexto, ex:
IFinanceLocal local = (IFinanceLocal) context.lookup("jboss-dev/FinanceSession/local");
Account account = local.getAccount(1);
account.setDescription("Nova descricao");
local.updateAccount(account);
Sou forçado a usar no SessionBean o merge(), para reintegrar na seção de persistência a Entity.
Estou fazendo algo errado ou é isso mesmo? Toda vez que eu enviar via interface Local/Remota uma Entity, e mesmo que eu mantenha a instancia da interface (o SessionBean) existente, lá dentro, quando devolver a Entity para o Session, preciso realizar o merge(). Seria problema se eu criar no SessionBean um getPersistenceManager() e usar o PersistenceManager no Servlet? (eca!)
Valew, forte abraço,
Davi.