gpt4 book ai didi

multithreading - UserTransaction 中的 begin() 抛出空指针异常

转载 作者:行者123 更新时间:2023-12-03 13:19:35 25 4
gpt4 key购买 nike

Java中有一段代码(一个循环)使用UserTransaction用于处理交易。 userTransaction 对象在循环之前声明,该对象声明为,

private javax.ejb.SessionContext mySessionCtx;
UserTransaction utx=mySessionCtx.getUserTransaction();

现在我已经在“多线程”中实现了特定的代码块(循环)。我已经通过了对象 utx从启动线程的类到 UserTransaction我创建的线程中的对象(因为启动线程的类实现了 javax.ejb.SessionBean并且这个类是通过EJB调用的。)

此功能在 Windows 机器上运行良好。但是当部署在 Linux 服务器上时,它不起作用。

在 Linux 服务器中,在实现线程之前,声明 utx.begin()工作正常。但是在实现线程之后, utx.begin()抛出 NullPointerException .对象 utx有它的值(value)。它是 begin()语句,它抛出异常。

这个 UserTransaction在 Windows 和 Linux 服务器中表现不同?它取决于任何其他因素吗?它在 Windows 服务器中正常工作并在 Linux 服务器中引发异常的原因可能是什么?

P.S:我正在研究 Java Struts 1.2。并使用 IBM WebSphere

最佳答案

EJB UserTransaction 对象只能在 EJB 范围内工作。如果将对象传递给另一个线程,它将不起作用,如果将 UserTransaction 从 EJB 方法返回到 servlet,它将不起作用。在产品的更高版本中,NullPointerException 被 IllegalStateException 取代。

Java EE 不支持创建您自己的线程。您应该改为使用异步 EJB 方法、WebSphere Application Server asyncbeans、commonj API 或 JSR 236 API,具体取决于您使用的产品版本。所有这些 API 都会将组件上下文传播到外部线程,这将允许您 lookup("java:comp/UserTransaction") ,您应该改用它。

关于multithreading - UserTransaction 中的 begin() 抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com