java - 如何对 EJB 客户端隐藏 RuntimeException 详细信息?

标签 java exception jboss ejb-3.0 java-ee-5

我有一个 JEE5 应用程序,它使用(本地) session Bean 公开服务。

当服务执行过程中发生内部错误时,JBoss(5.0.1)会抛出一个RuntimeException,并将其封装在javax.ejb.EJBTransactionRolledbackException中。

问题是接收此 EJBTransactionRolledbackException 的客户端应用程序可以访问有关导致运行时异常的详细信息,从而暴露我的应用程序的内部体系结构。我不希望这样。

相反,我希望 JBoss 始终将公开的 session bean 抛出的 RuntimeException 封装到单个(简单的)TechnicalException(没有原因)中。

实现这一目标的最佳方法是什么? (使用拦截器?使用 JBoss 配置?)

最佳答案

最后,根据之前的回答和我个人的研究,我保留了以下解决方案。

我创建了一个专门用于管理服务器故障的拦截器:

public class FaultBarrierInterceptor {

@AroundInvoke
public Object intercept(final InvocationContext invocationContext) throws Exception {
    try {
        return invocationContext.proceed();
    } catch (final RuntimeException e) {
        final Logger logger = Logger.getLogger(invocationContext.getMethod().getDeclaringClass());
        logger.error("A fault occured during service invocation:" +
                "\n-METHOD: " + invocationContext.getMethod() +
                "\n-PARAMS: " + Arrays.toString(invocationContext.getParameters()), e);
        throw new TechnicalException();
    }
}}

抛出的技术异常扩展了 EJBException,并且不公开原因 RuntimeException:

public class TechnicalException extends EJBException {}

我在所有公共(public)服务中使用这个拦截器:

@Stateless
@Interceptors({FaultBarrierInterceptor.class})
public class ShoppingCardServicesBean implements ShoppingCardServices { ...

这是 Fault Barrier pattern 的实现.

任何运行时异常都会被捕获、记录,并使用 TechnicalException 将错误信号发送给客户端(没有内部详细信息)。检查的异常将被忽略。

RuntimeException 处理是集中的,并且与任何业务方法分离。

关于java - 如何对 EJB 客户端隐藏 RuntimeException 详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037821/

相关文章:

c++ - 在 C++ 异常的 what() 中构建字符串

java - EJB 规范违规 : The message driven bean must declare one onMessage() method

java - 如何使用嵌入了WildFly 8.0.0的Arquillian?

java - 为什么某些 Java EE API 在 Java SE 中实现?

java - Postgres 串行非空约束

java - 如何使用 AngularJS 从 Java 的 JSONArray 填充 html 表格?

java - XmlPullParserException "expected: START_DOCUMENT {null}articles (position:START_TAG"

c++ - 在 C++ 或 C++11 中重新抛出类型化异常

java - 设置有向无环图中节点的最晚开始时间

java - Restful api GET 请求出现 504 错误的原因是什么?