|
|
Olá Thiago,
Escolhi a última opçõa, estou fazendo teste com um factory EJB injetanto o entity manager, passando como parametro do construtor de um DAO não EJB esse entity.
@Stateless public class DaoFactory {
@PersistenceContext private EntityManager entityManager; @Produces public DAO create(InjectionPoint injectionPoint) throws Exception { ParameterizedType type = (ParameterizedType) injectionPoint.getType();
Class classe = (Class) type.getActualTypeArguments()[0]; return new DAO(classe, entityManager); } }
Como acabei de mudar para o netbeans 7.0 estou tendo um probleminha quando importei o projeto .. pelo que vi é alguma configuração do JPA.
Object: br.com.webapp.entity.__EJB31_Generated__Livros__Intf___779868884 is not a known entity type Se alguém puder me ajudar quanto ao erro acima...
Obrigado Thiago, depois que testar tudo .. deixo meus comentários.
2011/8/18 thiago moraes <thiagoampj@xxxxxxxxx>
Correto, tem que ter construtor default.
Esse é um problema, criar um DAO EJB. Não é uma boa prática ter um DAO como EJB só para injetar o EntityManager.
Algumas pessoas o fazem, outras dizem que não é legal e utilizam o EntityManger direto no EJB.
Realmente é um desperdício de recurso. O ciclo de via deles é meio complexo.
Ainda existem alguns que criam factories de DAO como Stateless, então vc pode injetar o EntityManager na factory e ela criar seu Dao e passar a referencia do EntityManager.
Qual você prefere?2011/8/16 Carlos Eduardo Serpa <cadu.sousa@xxxxxxxxx>
Olá Thiago,
como faço para DAO ser gerenciado pelo container... tenho que adiconar a anotação @Stateless ou @Statefull ?
public class DAO<T> implements Serializable { private final Class<T> classe;
@PersistenceContext <-- não está injetando private EntityManager em;
public DAO(Class<T> classe) throws Exception{ this.classe = classe; }
public void adiciona(T obj) throws Exception{
em.persist(obj); } .. } para
(Tem um problema, pois alerta que o EJB tem que ter um construtor
default e acho que nao estão conseguindo implementá-lo pois diz que a
variavel não pode ser inicializada) @Stateless
public class DAO<T> implements Serializable { private final Class<T> classe;
@PersistenceContext <-- não está injetando
private EntityManager em;
public DAO(Class<T> classe) throws Exception{ this.classe = classe; }
public void adiciona(T obj) throws Exception{ em.persist(obj); } ...
}
2011/8/11 thiago moraes <thiagoampj@xxxxxxxxx>
Fala aí,
Seguinte,
1- Sua exception pode ser checked,
2- No container você só poder utilizar as injeções nos caras que são gerenciados por ele. Otherwise você terá que fazer lookup.
Olá,
Tenho algumas dúvidas quanto a uma estrutura que estou usando.
Meu BackingBean(JSF) chama um método da camada de negocio onde estou usando EJB.
@Stateless @TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED) public class LivroService implements IService<Livro>{ @Inject DAO<Livro> daoLivro; @Override public void adiciona(Livro obj) throws Exception {
daoLivro.adiciona(obj); } ... }
1º - rollback com exceptions em EJB ... sempre terei que lançar um RuntimeException como exceções de aplicações, pois é a unica forma que vi que funciona
o rollback.
O daoLivro é injetado através de um factory
public class DaoFactory { @Produces public DAO create(InjectionPoint injectionPoint) { ParameterizedType type = (ParameterizedType) injectionPoint.getType();
Class classe = (Class) type.getActualTypeArguments()[0]; return new DAO(classe); } }
A seguir o 2º problema, no DAO o EntityManager está vindo nulo. Se injeto ele no Service ele funciona no Dao não... Alguém poderia me ajudar ?
Tem algo a ver com Contexto.. ???
public class DAO<T> implements Serializable { private final Class<T> classe; @PersistenceContext(name = "webj2eePU") private EntityManager entityManager;
public DAO(Class<T> classe) { this.classe = classe; }
public void adiciona(T entity) throws Exception { entityManager.persist(entity); } ... }
-- My best regards
Carlos Eduardo Serpa de Sousa Systems Analyst Sun Certified Programmer for Java 2 Platform, Standard Edition 5.0 - SCJP
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
-- Thiago Alves de Moraes thiagoampj@xxxxxxxxx
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
-- My best regards Carlos Eduardo Serpa de Sousa Systems Analyst Sun Certified Programmer for Java 2 Platform, Standard Edition 5.0 - SCJP
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
-- Thiago Alves de Moraes thiagoampj@xxxxxxxxx
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
-- My best regards Carlos Eduardo Serpa de Sousa Systems Analyst Sun Certified Programmer for Java 2 Platform, Standard Edition 5.0 - SCJP
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
|
|