Hibernate: PersistenceContext Annotation

4 respostas
M

Bom dia pessoal!

Eu tenho um problema num projecto onde eu quero implementar session conversations, mas existe uma coisa que não estou a compreender

Tenho um projecto EAR. Um dos projectos diz respeito aos EJB’s, os outros 2 são webpapplications que dependem do projecto EJB’s No projecto EJB tenho vários beans onde eu injecto o PersistenceContext desta maneira:

@PersistenceContext
private EntityManager entityManager;

e funciona lindamente.

O meu problema é que a hibernate session é local à class e eu quero que existam unidades de trabalho mais longas para evitar LazyInitializationExceptions. Numa class de um dos projectos web não consigo injectar o persistence context, o entityManater permanece a null. Como poderei injectar o PersistenceContext neste caso? o que não estou a fazer ou estou a fazer de errado?

Obrigado pessoal!

–Marco Santos

4 Respostas

A
Vc está utilizando o Spring?

Se tiver pode utiliza-lo para injetar através de um filtro (inteceptador)

existe um filtro para ser colocado no web.xml para que este acesse o entitymanager:

pode ser mapeado assim>

filtername>openEntityManager

filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter

url-pattern>/*
M

Nao, estou só a usar EJB’s e Hibernate. não entendo msm é porque não consigo apanhar o EntityManager, mesmo passando o nome do persistence unit:

<persistence>
	<persistence-unit name="rnbpManager">
		<jta-data-source>java:jdbc/rnbp</jta-data-source>
		<properties>
			<property name="hibernate.show_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>
@PersistenceContext(unitName="rnbpManager")
private EntityManager em;

No projecto EJB nem preciso de passar parametros, ele é injectado automaticamente.

Obrigado

R

E se tentar assim:

EntityManagerFactory factory = Persistence.createEntityManagerFactory(UNIT_NAME);
EntityManager manager = factory.createEntityManager();

Resolve ?

M

por acaso já tinha experimentado. dá a seguinte excepção:

javax.persistence.PersistenceException: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager

será que tenho q criar outro persistence unit diferente para este projecto? faz algum sentido?

Criado 5 de novembro de 2009
Ultima resposta 5 de nov. de 2009
Respostas 4
Participantes 3