【发布时间】:2016-09-24 15:43:38
【问题描述】:
我有两个无状态会话 Bean。调用层次结构就像:
MyClass-> UserManagerBean -> BookManagerBean
MyClass 正在通过 JNDI 查找远程获取 UserManagerBean。 反过来,UserManagerBean 通过 JNDI 查找远程获取 BookManagerBean。 BookManagerBean 正在抛出 BookException。
问题: 我可以在从 BookManagerBean 抛出异常之前看到日志,但是当我在 UserManagerBean 中捕获此异常时,线程会转到某个地方并且永远不会进入 UserManagerBean 的 catch 块。看起来容器吞下了这个异常。这会导致 STUCK 线程。
注意:令人惊讶的是,相同的代码可在其他 5 个 WLS 实例上运行,但仅在一台服务器上出现问题。你觉得围绕这个问题有什么 weblogic 配置吗?
public class MyClass {
public void findBook(Long bookId) throws Exception{
try{
UserManagerBean userManager = (UserManager) JNDIServiceLocator.getInstance().getRemoteObject(jndiName, 'UserManager' );
userManager.find(bookId);
}catch (Exception e){
Log.log("Exception in MyClass.findBook"); // Thread does not come back to this point. This logger is not getting printed
throw e;
}
UserManagerBean如下:
@Stateless(mappedName ="UserManager")
@Remote(UserManager.class)
public class UserManagerBean {
public Book findBook(Long bookId) throws Exception{
try{
BookManagerBean bookManager = (BookManagerBean) JNDIServiceLocator.getInstance().getRemoteObject(jndiName, 'BookManager' );
bookManager.find(bookId);
}catch (Exception e){
Log.log("Exception in UserManagerBean.findBook"); // **** Thread does not come back to this point. This logger is not getting printed
throw e;
}
}
BookManagerBean 类如下:
@Stateless(mappedName ="BookManager")
@Remote(BookManagerBean .class)
public class BookManagerBean {
public Book findBook(Long bookId) throws Exception{
try{
//Logic to find Book
}catch (Exception e){
Log.log("Exception");
throw e;
}
}
}
这行得通: 如果我更改 UserManagerBean 中的代码以使用 new 运算符创建 bean,则会收到 BookManagerBean 引发的异常。
BookManagerBean bookManager = new BookManagerBean();
bookManager.find(bookId);
【问题讨论】:
-
此代码在生产中的一个 WLS 实例上按原样运行,但在其他实例上不起作用。你能想到任何与此相关的 weblogic 配置吗?
标签: java exception ejb-3.0 rmi weblogic12c