应该在何时/何时定位/创建DAOImplementation实例?

时间:2016-07-25 13:55:30

标签: web-services rest jax-rs dao java-ee-7

我正在开发一个带有DAO层的JAX-RS项目。我不确定要遵循哪种架构。

例如,假设我们有一个实现ProductDAOImpl接口的ProductDAO类,以及一个ProductRS类作为产品REST服务的入口点。

问题1
应该在哪里创建ProductDAO(实际ProductDAOImpl)实例?

选项:
A)在需要访问产品的ProductRS类的每种方法中? B)作为ProductRS班的成员?
(这个选项可以引入数据竞争吗?不确定容器如何处理REST服务类 - 可能与下面的问题2有关。)

问题2
我应该为JAX-RS类使用注释,例如@Stateless

问题3
在具有DAO层和可能的服务层的JAX-RS应用程序中,架构和类关系的最佳实践是什么? (非常欢迎任何研究此主题的链接。)

问题4
DAO实现类是否应该提供静态方法? (见here

实施具体细节
使用带有Glassfish服务器的JAX-RS的Jersey实现和带有对数据源的JDBC访问的DAO层。

2 个答案:

答案 0 :(得分:1)

问题1

我不会明确地创建实例。通常依赖注入就是出于这个原因 - 在ProductRS类中注入ProductDAO接口。

问题2 - 3

您的技术堆栈的一些示例(尽管不完全相关)。

Jersey + Spring示例: https://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/

Jersey + Guice示例: http://www.nailedtothex.org/roller/kyle/entry/lean-example-of-tomcat-82

Guice + Hibernate示例: http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/

Jersey + Hibernate + Spring示例: http://www.benchresources.net/jersey-2-x-web-service-integrating-with-spring-and-hibernate-orm-framework-using-annotation/

问题4

提供的链接(Should we always use Asynchronous JAX-RS resources For mobile backend?

中没有静态方法

<强>更新

由于测试困难,建议避免在DAO中使用静态方法。相关讨论:

答案 1 :(得分:0)

回答Q1 :创建'ProductDAO'实例作为'ProductRS'类的成员,您可以在所有方法中使用相同的实例。

回答Q2 :您可以为JAX-RS类使用注释,如果您的状态较少的行为是您的功能要求,那么您可以使用'@Stateless'。只有在REST服务上需要JavaEE Security时才需要“@Stateless”。