Websphere 8.0.0.10 - 未注入EntityManager(NullPointerException)

时间:2017-07-25 13:04:06

标签: java spring jpa websphere openjpa

在我们的应用程序中,我们使用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都已设置完毕。应用程序配置可以看到它们。

0 个答案:

没有答案