一个用于实用程序函数的无状态会话 EJB



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

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

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

实用程序函数的一些示例:

  • 有一个表,我在其中存储带有 ID 的消息。创建一个实用程序函数来检索特定 ID 的消息。创建实用程序函数以更新特定 ID 的消息。

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

等。

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

我更大的问题是封装 - 拥有一个"实用程序"会话 bean 将完全违反关注点分离,它会让你有一个具有许多不同目的和依赖关系的类。 它有可能变成一个泥球,会混合所有方法的依赖关系,并且会使你的代码更难维护,因为很难弄清楚这些函数在哪里。

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

最新更新