2016-07-25 30 views
0

Ich arbeite an einem JAX-RS-Projekt mit einer DAO-Schicht. Ich bin mir nicht sicher, welcher Architektur ich folgen soll.Wo/wann sollten die DAOImplementation-Instanzen gefunden/erstellt werden?

Zum Beispiel haben wir eine ProductDAOImpl Klasse, die eine ProductDAO Schnittstelle implementiert, und eine ProductRS Klasse als Einstiegspunkt für den REST-Dienst der Produkte.

Frage 1
Wo soll die ProductDAO (eigentlich ProductDAOImpl) Instanz geschaffen werden?

Optionen:
A) Bei jedem Verfahren der ProductRS Klasse, die den Zugriff auf das Produkt braucht?
B) Als Mitglied der ProductRS Klasse?
(? Kann diese Option Daten Rennen Nicht sicher vorstellen, wie der Container die REST-Services-Klassen behandelt -. Möglicherweise 2 im Zusammenhang unten auf Frage)

Frage 2
Soll ich Anmerkungen für JAX-RS-Klassen verwenden, z als @Stateless?

Frage 3
Was sind die besten Praktiken für die Architektur und Klassenverhältnis in einer JAX-RS-Anwendung mit einer DAO-Schicht und möglicherweise eine Service-Schicht?
(Alle Links zu diesem Thema zu studieren, sind mehr als willkommen.)

Frage 4
Sollten die DAO-Implementierungsklassen statische Methoden zur Verfügung stellen? (Als here gesehen)

Implementierung spezifische Details
Verwendung Jersey Umsetzung JAX-RS mit Glassfish-Server und eine DAO Schicht mit JDBC Zugriff auf die Datenquelle.

Antwort

1

Frage 1

ich Instanzen nicht explizit schaffen würde. Normalerweise wird die Abhängigkeitsinjektion aus diesem Grund verwendet - injizieren Sie die ProductDAO-Schnittstelle in Ihre ProductRS-Klasse.

Frage 2 - 3

Einige Beispiele im Zusammenhang (wenn auch nicht exakt) für Ihre Technologie-Stack.

Jersey + Feder Beispiel: https://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/

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

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

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

Frage 4

Es sind keine statischen Methoden in der angegebenen Link (Should we always use Asynchronous JAX-RS resources For mobile backend?)

UPDATE

Es wird empfohlen, statische Methoden in DAO wegen schwer Versuche zu vermeiden. Ähnliche Diskussionen:

+0

Vielen Dank für Ihre Antwort! Reg. Frage 4, sie verwenden 'UserDAO.findAllUsers()', und es gibt kein Instanzmitglied von 'UserDAO', also muss die Methode statisch sein (aber wie ich gesehen habe, DI mit statischen Methoden verwendend, verheißt das nichts Gutes). – Chris

+0

Aktualisiert, es gibt verwandte SO-Diskussionen. – Justas

0

Antwort für Q1: Erstellen Sie 'ProductDAO' Instanz als Mitglied der 'ProductRS' Klasse und Sie können die gleiche Instanz in allen Methoden verwenden.

Antwort für Q2: Sie können Anmerkungen für JAX-RS-Klassen verwenden, wenn Sie staatsloses Verhalten als Ihre funktionale Anforderung haben, dann können Sie '@Stateless' verwenden. '@Stateless' wird nur benötigt, wenn Sie JavaEE Security für Ihren REST-Service benötigen.