我有一个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服务器正确处理,但我不知道如何修复它。
如果有人能帮助我,我会感激不尽。 如果需要,请向我询问更多代码/配置/上下文。