java - 无状态EJB、异常处理问题、容器吞咽异常

标签 java exception ejb-3.0 rmi weblogic12c

我有两个无状态 session Bean。调用层次结构如下:

MyClass->UserManagerBean->BookManagerBean

MyClass 正在通过 JNDI 查找远程获取 UserManagerBean。 反过来,UserManagerBean 通过 JNDI 查找远程获取 BookManagerBean。 BookManagerBean 正在抛出 BookException。

问题: 我能够在从 BookManagerBean 抛出异常之前看到日志,但是当我在 UserManagerBean 中捕获此异常时,线程会转到某个地方并且永远不会进入 UserManagerBean 的 catch block 。看起来容器吞下了这个异常。这会导致线程卡住。

注意: 令人惊讶的是,相同的代码可以在其他 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);  

最佳答案

您可能必须创建自己的自定义异常并用

对其进行注释

javax.ejb.ApplicationException.

-阿米特

关于java - 无状态EJB、异常处理问题、容器吞咽异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37464198/

相关文章:

java - OpenCV java 从标量中获取值

c# - 如何获取有关异常的更多信息

python - 如何捕获 ctypes 中抛出的异常?

java - 服务器启动时的调用方法

javax.命名.NameNotFoundException : Name ejb/com not found in context "java:comp/env"

dependency-injection - JBoss 6 : Injecting EJB into servlet

java - 我收到 System.out.printf() 错误

java - 在 Kotlin 中重写私有(private)方法

java - maven-assembly-plugin 给出 java 堆空间错误

python - Python方式不打印错误消息