我的 persistenceManager 为空

Posted

技术标签:

【中文标题】我的 persistenceManager 为空【英文标题】:My persistenceManager is null 【发布时间】:2011-01-22 13:29:59 【问题描述】:

我有定义为

的接口
@Local
public interface MyPersistenceManagerLocal 

  public List<PropertyList> getPropertyList(int id);


上述接口的实现类是

@Stateless
public class MyPersistenceManagerBean implements MyPersistenceManagerLocal 

  @PersistenceContext(unitName = PersistentSettings.PERSIST_NAME)
  private EntityManager entityManager;

  @Override
  public List<PropertyList> getPropertyList(int id) 
    System.out.println("inside MyPersistenceManagerBean.getPropertyList()");
    ......
    ......
    ......
  

我会在另一个电话中调用它

@Stateless
public class ClientImpl implements Client 

  @EJB
  MyPersistenceManagerLocal persistenceManager;

  final List<PropertyList> dbList = persistenceManager.getPropertyList(id);


我在

上收到 NullPointerException
final List<PropertyList> dbList = persistenceManager.getPropertyList(id);

在调试模式下,我得到 persistenceManager 为空。

我是 EJB 的新手,JPA 无法解决这个问题。任何帮助为什么我将 persistenceManager 设为 null

【问题讨论】:

【参考方案1】:

您正在获得 NPE,因为容器尚未注入所需的 bean。 您需要在 @PostConstruct 方法中设置它,即

@Stateless public class ClientImpl implements Client 

   @EJB MyPersistenceManagerLocal persistenceManager;

   private List dbList;
   @PostConstruct
   public void init()
        dblist = persistenceManager.getDbList();
   

【讨论】:

感谢 Marcin,我已经编写了最终列表 dbList = persistenceManager.getPropertyList(id);在我在课堂上的一个方法中,所以我不能将它保留在 init() 中,并且这个方法是从其他方法调用的还有什么我应该尝试的吗? 然后根据答案更改它..?删除 final 并添加一个 @PostConstruct 方法,您可以在其中初始化列表。 我也试过了,但它不起作用(我的意思是在我的方法定义中添加了@PostConstruct) remamber 如果您使用 @PostConstruct 注释来注释方法,则此方法需要具有以下签名 void methodName()。不允许使用任何参数

以上是关于我的 persistenceManager 为空的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine (Java) + Spring 管理的 PersistenceManager

如果循环为空,则显示消息

tomcat session漏洞反序列化详解

tomcat session漏洞反序列化详解

c# 的lamda表达式怎么判断是不是为空

Application.Current 和 App.Current 为空