Bom dia galera, estou com a seguinte dúvida ao usar um bean gerenciado pelo servidor Glassfish 3.1, se eu tenho um bean como abaixo:
@ManagedBean(name="meuBean")@ViewScopedpublicclassMeuBeanimplementsSerializable{@PersistenceContextprivateEntityManagerentityManager;privateMinhaEntidademinhaEntidade;publicMeuBean(){}publicvoidinserir(){entityManager.persist(minhaEntidade);}//getters e setters}
Quando eu chamo o método inserir() na minha view a seguinte exceção é lançada:
javax.persistence.TransactionRequiredException
no meu persistence.xml está configurado para usar JTA, estou usando o eclipselink, mas se eu adicionar a anotação @Stateless nesse mesmo bean sem fazer mais nenhuma alteração a entidade é persistida normalmente para o banco de dados, a dúvida é: Eu sou obrigado a anotar meu bean com @Stateless para que o servidor controle a transação com a JTA?
evite fazer isso PersistenceContext nos ManagedBean, sugiro criar uma estrutura em camadas, MVC por exemplo, e esta injeção de dependência vc coloca na camada de acesso aos dados. existem vários exemplo na net sobre isso, procura por exemplo jsf mvc com ejb, algo assim…
Flavio_Almeida
Um JSF managed bean não é transacional. Você pode resolver isso de várias formas:
Abraçamos CDI aqui na empresa desde a sua concepção.
Abraço
G
geraldo.vec
Olá fdcrli, então eu estou usando sim uma estrutura em camadas, não faço a injeção do EntityManager nos meus beans, coloquei dessa forma aqui por questões de simplificar o exemplo que quis dar, eu preciso mesmo anotar o bean com @Stateless para que a transação seja controlado pelo servidor?