支持无状态和有状态用法的 JPA 代码

JPA code that supports statless and stateful usages

我有两个共享数据库的应用程序。一个处理来自队列的消息的应用程序和另一个具有 JSF 屏幕的 JSF 屏幕支持与队列使用的完全相同的功能(加上许多其他功能)。 JPA 代码中有相当多的重叠,因此我想为两个应用程序创建一个可重用的模块(因为当我对 JPA 查询进行更改时,我必须将它应用于两个应用程序)。

现在我们有一个用户 ID 附加到数据库的每一行。当为响应队列消息而创建行时,用户 ID 是静态的 "SYSTEM_X_ID"(例如)。但是当用户通过 JSF 屏幕创建该行时,它将是会话中的用户 ID。

这就是我的问题所在 - 应用程序的队列版本没有会话。会话对象被注入。那么我如何编写可重用的数据库代码来检查是否存在将注入到 JSF 应用程序而不是队列应用程序中的注入会话对象?有可能吗?

到目前为止,我的一个想法是修改所有其他 Dao classes 扩展的 BaseDao class,以便在队列版本中它是静态分配的,不引用会话对象在 JSF 版本中注入会话对象并在其中使用用户 ID。不过,我宁愿不必这样做 - 因此我的问题。

提前致谢。

(假设会话是指 HttpSession)

依赖关系应该只有一种方式。让数据访问层依赖于特定于 Web 层的东西似乎是一件坏事。这是一件坏事,因为它限制了您试图实现的重用类型。

HttpSession只能在web层引用。通过从 DAO 中删除会话并让 JSF 代码显式传递用户 ID 来摆脱这种依赖性。

一旦解决了这个问题,那么您的公共 DAO 应该接受用户 ID 作为参数,不会有任何问题。