支持无状态和有状态用法的 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 作为参数,不会有任何问题。
我有两个共享数据库的应用程序。一个处理来自队列的消息的应用程序和另一个具有 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 作为参数,不会有任何问题。