在我们的应用程序中,我们使用2个模块中的2个数据库,每个模块都有自己的persistence.xml:
persistence.xml for first:
<persistence-unit name="first-databasePU">
<mapping-file>META-INF/dynamic_orm.xml</mapping-file>
<class>some.class.using.first.ASDF</class>
....
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.default_batch_fetch_size" value="100" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
</properties>
和第二个相似:
<persistence-unit name="second-databasePU">
<mapping-file>META-INF/dynamic_orm.xml</mapping-file>
<class>some.class.using.second.ASDF</class>
....
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.default_batch_fetch_size" value="100" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
</properties>
DAOBean的示例类:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class ASDF {
EntityManager entityManager;
@PersistenceContext(unitName="first-databasePU")
public void setEntityManager(EntityManager em) {
entityManager = em;
}
public void someFunction() {
entityManager.something();
}
}
通常我们的EntityManagers正确初始化。但是在Websphere调用方法上设置someFunction()会给我们NullPointerException。
进行了一些挖掘并找到this
但是在添加到我们的web.xml之后:
<persistence-context-ref>
<persistence-context-ref-name>some/name/first</persistence-context-ref-name>
<persistence-unit-name>first-databasePU</persistence-unit-name>
</persistence-context-ref>
<persistence-context-ref>
<persistence-context-ref-name>some/name/second</persistence-context-ref-name>
<persistence-unit-name>second-databasePU</persistence-unit-name>
</persistence-context-ref>
没有任何改变,所以接下来我试图直接从JNDI中拉出EntityManager,就像this一样,但它也失败了。
所以现在我正在寻找任何想法,为什么它不起作用。
其他信息: 我们的Websphere使用jthon脚本和wsadmin.sh配置为docker镜像。 两个DataSource都已设置完毕。应用程序配置可以看到它们。