Frage

Ich habe einen javax.sql.DataSource, den ich in mehreren Servlets verwenden möchte.Ich mag die Idee nicht angeben:

generasacodicetagpre.

In jedem Servlet, wie es mir anscheint, dass der Rahmen für jedes Servlet die DataSource aufsuchen muss und wenn der Name der DataSource-Änderungen ändert, muss sich jedes Servlet auch ändern.

Meine Idee ist es, ein Singleton EJB zu erklären, das dann in jedem Servlet deklariert werden kann:

generasacodicetagpre.

ist dies eine vernünftige Art, das Problem zu lösen?Ich fühle, dass es ein bisschen schwerfällig für etwas ist, das ich gedacht hätte, wäre ein gemeinsames Thema.

War es hilfreich?

Lösung

Im Allgemeinen ist es ok, imo. Aber lass die Bohne bitte nicht die Verbindung zurückgeben, sondern direkt die DataSource. Einige Appservers wie WebSphere schließen automatisch die Verbindung, wenn der Bohnenkontext wieder belassen wird.

Eine andere Lösung wäre, @Resource (Name="MYDS") anstelle von Lookup zu verwenden. Wenn sich alle Ihre Servlets in einer Webanwendung befinden, können Sie eine Ressourcen-REF mit RES-REF-Namens-MyDs in Ihrem Web.xml definieren und nur an diesem Ort auf den echten Nachschlagnamen auflösen.

Andere Tipps

Ich würde sagen, dass die Verwendung eines EJB nur aus diesem Grund ein bisschen zu schwer sein kann, während Sie geschrieben haben.

Der erste modernste moderne Anwendungsserver spinnt diese Lookup, sodass es nicht so teuer ist.

Sekunden - Sie können @RESOURCE (Name="MYDS") verwenden, da Robert gesagt wird, das dieselbe Ressourcenreferenz verwenden würde, die dem JNDI-Namen mithilfe von Anwendungsserver-Mapping-Funktionen zugeordnet werden kann.

Drittel - Sie können CDI verwenden, um das Web-Modul nur solche Lösung wie folgt zu haben:

Klasse erstellen, in der Ihre DataSource-Definition so gedrückt ist:

generasacodicetagpre.

und verwenden Sie dann IT-Servlet mit Inject:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top