我有一个完美的应用程序客户端部署到一个带有一些EJB,实体等的耳朵内的GlassFish v2服务器。我正在使用eclipselink。
目前我的persistence.xml中有:
<persistence-unit name="mysource">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/mysource</jta-data-source>
<class>entities.one</class>
<class>entities.two</class>
...
<properties>
<property name="eclipselink.target-server" value="SunAS9"/>
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
当我将EntityManager
注入EJB时,这很好用。
@PersistenceContext(unitName="mysource")
private EntityManager em;
现在我需要动态切换持久性单元/数据库。
我想我可以以编程方式获得EntityManager
:
em = Persistence.createEntityManagerFactory("mysource").createEntityManager();
但是我收到以下错误:
Unable to acquire a connection from driver [null], user [null] and URL [null]
甚至在Map
中“覆盖”javax.persistence.jtaDataSource“到”jdbc / mysource“并且调用createEntityManagerFactory("mysource", map)
并没有什么区别。
我错过了什么?
答案 0 :(得分:1)
您正试图以编程方式创建实体管理器来规避容器,这意味着您很可能会创建非JTA数据源(因为它位于容器外部,事务类型应为RESOURCE_LOCAL),因此您的原始配置是没用的。
尝试使用不同的unitName属性注入实体管理器或创建RESOURCE_LOCAL事务类型持久性单元。