O que causa "Could not resolve a persistence unit" exception?

Olá pessoal,

Eu tinha um projeto web que funcionava muito bem quando eu usava apenas um persistence unit. Quando houve a necessidade de utilizar outro (acessar outro banco de dados) comecou a dar problemas. Não consigo fazer o deploy no servidor pois ele alega que ele não encontra esta nova persistence unit! (“Runtime Exception - Could not resolve a persistence unit corresponding to the persistence-context-ref-name []”)

Porque este erro ocorre? Criei a persistence unit pelo Netbeans e “sei” que sua configuração está adequada. Na minha classe eu possuia apenas um EntityManager marcado com @PersistenceContext. Agora que são dois, o segundo (na ordem de inserção do Persistence.xml) não é encontrado - se eu trocar a ordem no XML ele dará erro porém apontando para a outra unidade de persistencia.

Porque? O que devo fazer para que ele encontre as duas unidades de persistencia?

Estou com a seguinte notação no meu entity manager:

@PersistenceContext(name="ASN", unitName="ASN") EntityManager em;

@PersistenceContext(name="SIMET_MAIN", unitName="SIMET_MAIN") EntityManager emMain;

Sendo que o nome da unidade de persistência no XML são estes que estão escritos acima!

Muito obrigado,

Ricardo

Acredito eu que você deva criar o outro persistence.xml num jar separado, como se fosse um projeto à parte, e depois fazer referência a ele no classpath do projeto “principal”.

Como devo fazer isso?

Pq ele permite adicionar outras persistence units em um mesmo xml, inclusive sendo possível acessar outro banco se eu tenho que usar um arquivo separado?

Resolvi em parte trocando em todas as minhas classes a anotation.

Agora elas são apenas:

Tive de trocar até nas classes de testes, agora ele está compilando porém estou com outro problema:

Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: java.lang.IllegalStateException: Local transaction already has 1 non-XA Resource: cannot add more resources. Error Code: 0

Estou procurando no google qualquer coisa aviso.

Resolvi o problema. Criei outra classe que acessava esta outra persistence unit. Conclui que realmente não seria possível fazer isso sem um driver XA do sql. Agora as “querys” são feitas depois que a outra já acabou.