【问题标题】:Generic logging of all calls to an EJB (2.1)?对 EJB (2.1) 的所有调用的通用日志记录?
【发布时间】:2009-10-16 22:15:45
【问题描述】:

我正在修改作为 2.1 无状态 EJB 实现的现有应用程序。我想对对 EJB 的所有调用进行某种通用的、详细的记录。

我想记录的东西:

  • 被调用方法的名称
  • 所有传递参数的序列化副本
  • 返回值的序列化副本

我之前为 asp.net REST Web 服务实现了类似的东西,方法是在处理请求之前简单地放置一个钩子,然后在发送回响应之前放置一个钩子。它会产生大量数据,但对于调试长时间运行的系统来说非常值得。

我不确定如何对 EJB 进行同样的操作。我想避免 AOP,因为该应用程序当前不使用 AOP。拦截器不起作用,因为它不是 EJB 3.0。

有没有人知道一种方法可以连接到 EJB 处理管道以在请求进入时查看请求?有没有其他方法可以做到这一点?

谢谢

【问题讨论】:

  • 我对 AOP 不是很熟悉,但我认为仅仅因为应用程序当前不使用 AOP 而不使用 AOP 并不是一个好的借口,如果 AOP 确实可以解决您的问题的话。如果每项技术都因为“我们不在这个应用程序中使用它”而被搁置一旁,我们仍然会用汇编或 C 语言编写所有内容,而不需要面向对象或函数式编程。
  • 我想避免 AOP,因为感觉添加 AOP 会对整个系统产生很大的影响。由于我不熟悉java中的AOP,我不确定它会对系统产生什么样的副作用(如果有的话)。不幸的是,该应用程序没有经过很好的单元测试,所以我必须弄清楚 QA 团队需要做多少回归测试。任何人都可以阐明这些担忧吗?如果只是为了好玩,我最想加入 AOP。

标签: java ejb


【解决方案1】:

我认为只有两种方法可以知道何时调用 EJB(或任何其他类)的方法:

  • 糟糕的解决方案:使用 Java 调试接口 (JDI),您可以知道执行了哪一行,正如您在使用 IDE 调试 Java 时所知道的那样。这很复杂,当您在运行 JDI 的同一个 JVM 中调试应用程序时会出现一些问题。

  • 好的解决方案:正如 Thomas Owens 所说,AOP 是推荐的解决方案。如果您现在没有在项目中使用它,这是使用它的一个很好的理由。

【讨论】:

  • 如果没有更多建议,我会将其标记为答案并开始研究 AspectJ。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多