1

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

为所有这些功能创建一个无状态会话 EJB 是否有意义Utility

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

效用函数的一些示例:

  • 我有一张桌子,用于存储带有 ID 的消息。创建一个实用函数来检索特定 ID 的消息。创建一个实用函数来更新特定 ID 的消息。

  • 我有一张表,我可以在其中跟踪某些进程的状态。创建一个实用函数来给出特定进程的状态。创建一个实用函数来更新特定进程的状态。

等等

4

1 回答 1

1

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

我更大的问题是封装——拥有一个“实用程序”会话 bean 将完全违反关注点分离,它会给你留下一个具有许多不同目的和依赖关系的类。它有成为泥球的风险,会混合所有方法的依赖关系,并且会使你的代码更难维护,因为更难找出这些函数的位置。

我强烈建议更多地考虑是否有有意义的功能单元可以将这些方法分开,即使它们都很小。ProcessService正如其他评论者所建议的那样,您的两个示例听起来像是 a和 a 的不错候选者MessageService。您可能会发现,当您查看要添加的功能集时,它们并不是划分事物的最佳方式,但这可能是一个很好的起点。如果您现在就努力确定系统中不同的逻辑服务是什么,您将在以后获得可扩展性和可维护性方面的回报。

于 2016-01-15T21:49:13.927 回答