JPA实体经理未正确注入 - Weblogic

时间:2015-07-10 14:17:54

标签: java jpa ejb weblogic ear

我有一个EAR应用程序(部署在Weblogic 12c上),它有一个“持久”组件。 “persist”组件使用JPA(实现:EclipseLink)来持久保存对象。

使用entityManager的bean声明为@Stateless,实体管理器通过@PersistenceContext注释注入。

问题是,每次我尝试访问entityManager时都有NullPointerException(意思是,他没有被正确注入)。

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class MyBean implements MyBeanLocal {    

    @PersistenceContext(unitName = "MyPersistenceUnit", type = PersistenceContextType.EXTENDED)
    EntityManager entityManager;

    public void insert(MyObject object) {
        try {
            entityManager.persist(object); //NullPointerException here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

的persistence.xml

<?xml version="1.0"  encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
              http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="MyPersistenceUnit"
        transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>MyDataSource</jta-data-source>
        <class>com.myclasses.MyObject</class>>
    </persistence-unit>

</persistence>

我使用工厂获取MyBean的实例:

public class MyBeanFactory
{
    public static MyBean create()
    {
        return new MyBean();
    }
}

我在常规代码中使用它:

MyBeanLocal bean = MyBeanFactory.create();

MyBeanLocal是MyBean的界面,它就像那样

@Local(MyBeanLocal.class)
public interface MyBeanLocal {
    public void insert(MyObject object);
}

我试图通过MyBean注释注入@EJB实例,并且它失败了(每当我尝试使用MyBean假设注入的实例时,NullPointerException)

当我的应用程序部署在Weblogic服务器上时,我既看不到MyBean,也看不到MyPersistenceUnit(我看到其他组件的MDB),虽然我可以看到{{1在部署&gt;下“MyDomain”&gt;配置/设置&gt;持久性MyPersistenceUnit没关系。

weblogic服务器有启动日志。

MyDataSource

我怀疑问题是这个bean没有被weblogic服务器正确处理,但我不知道如何修复它。

如果有人能帮助我,我会感激不尽。 如果需要,请向我询问更多代码/配置/上下文。

0 个答案:

没有答案