一个无状态会话EJB实用程序功能?

时间:2016-01-15 13:57:40

标签: java java-ee transactions ejb utility-method

我有一些可以从多个无状态会话EJB调用的实用程序函数。这些实用程序函数需要位于新事务(RequiresNew)中。

为所有这些函数创建一个无状态会话EJB是否有意义可以将其称为Utility

或者我应该尝试按功能组织它们,在这种情况下,我将最终使用多个无状态会话EJB?如果我有很多这样的无状态会话EJB,会对系统性能产生什么影响?

实用功能的一些例子:

  • 我有一个用Id存储消息的表。 创建实用程序函数以检索特定Id的消息。 创建实用程序功能以更新特定Id的消息。

  • 我有一张表,可以跟踪某些进程的状态。 创建实用程序函数以提供特定进程的状态。 创建实用程序功能以更新特定进程的状态。

等。

1 个答案:

答案 0 :(得分:1)

从性能的角度来看,对于每个无状态EJB,容器必须实例化并管理包含该bean实例的bean池。 (这通常不大,因为无状态bean可以互换使用。我相信JBoss AS中的默认值是20 instances/pool) 如果将这些组合成一个bean,则只需要一个池,但它可能需要更多实例,因为它们必须提供所有类型的调用。所以表现不会受到显着影响。

我更大的问题是封装 - 有一个"实用程序"会话bean完全违反了关注点的分离,它会让你有一个具有许多不同目的和依赖关系的类。它有可能变成Ball of Mud,会混合所有方法的依赖关系,并且会使你的代码难以维护,因为在这些函数的位置上更难找到它。

我强烈建议更多地思考是否有有意义的功能单元将这些方法分开,即使它们都非常小。正如其他评论者所建议的那样,您的两个示例听起来像是ProcessServiceMessageService的合适人选。您可能会发现,当您查看要添加的功能集时,这些并不是分解内容的最佳方式,但它可能是一个很好的起点。 如果您现在努力确定系统中的不同逻辑服务,那么您将在以后获得可扩展性和可维护性的奖励。