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

One Stateless Session EJB for Utility functions?

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

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

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

效用函数的一些示例:

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

我更大的问题是封装 - 拥有一个 "utility" 会话 bean 将完全违反关注点分离,它会给您留下一个具有许多不同目的和依赖关系的 class。它有成为 Ball of Mud 的风险,将混合所有方法的依赖关系,并且会使您的代码更难维护,因为更难找出这些函数的位置。

我强烈建议您多考虑一下是否有有意义的功能单元可以将这些方法分成几部分,即使它们每个都很小。正如其他评论者所建议的那样,您的两个示例听起来很适合 ProcessServiceMessageService。当您查看要添加的功能集时,您可能会发现这些并不是最好的划分方式,但这可能是一个很好的起点。 如果您现在努力确定您的系统中有哪些不同的逻辑服务,您以后将在可扩展性和可维护性方面获得回报。