maven-glassfish-plugin

___ tag123javaee ___ Die Java Enterprise Edition (Java EE) ist eine Spezifikation, die eine Sammlung von Java-basierten Server- und Clienttechnologien und deren Interoperabilität definiert. Das [java-ee] -Tag ist rudimentär zu fokussierten Fragen über die spezifischeren APIs wie [jsf], [Servlets], [jpa], [cdi], [ejb] usw. Verwenden Sie es nur bei Problemen mit allgemeinen Kombinationen (zB Interaktion zwischen einzelnen APIs und / oder Anwendungsservern). ___ tag123jpa ___ Die Java Persistence API (JPA) ist eine Java-Spezifikation für den Zugriff, die Speicherung und die Verwaltung von Daten zwischen Java-Objekten / Klassen und einer relationalen Datenbank. Es ist Teil der EJB 3.0-Spezifikation und der Industriestandard für ORM (Object to Relational Mapping). ___ tag123glassfish ___ GlassFish ist der Referenz-Java EE-Anwendungsserver. ___ tag123ejb ___ Enterprise JavaBeans (EJB) ist eine verwaltete, serverseitige Komponentenarchitektur für den modularen Aufbau von Unternehmensanwendungen. Die EJB-Spezifikation ist eine von mehreren [Java] APIs in der [Java EE] Spezifikation. ___ qstntxt ___

Ich versuche, meine EJBs mit einem eingebetteten EJB-Container zu testen. In der Produktion bin ich auf eine JTA-Datenquelle angewiesen, die auf dem Anwendungsserver konfiguriert ist. Während des Testens möchte ich jedoch eine Verbindung zu einer anderen DB (In-Memory-Derby) herstellen.

Das Problem ist, dass ich nicht sehen kann, wie der EJB-Container die JTA-Datenquelle, die in meiner Produktion persistence.xml (in src / main / resources / META-INF) definiert ist, mit einer Verbindung zu meinem In-Speicher überschreiben derby DB. Die JTA-Datenquelle ist in der Datei persistence.xml wie folgt definiert:

%Vor%

Versuch 1: Verwenden einer test persistence.xml

Ich habe versucht, eine test persistence.xml-Datei zu erstellen (in src / test / resources / META-INF), die definiert:

%Vor%

Dies ist jedoch problematisch, weil ich den EJB-Container für die Verwendung des zu testenden Moduls mit

angegeben habe %Vor%

Der Container verwendet nur die Hauptdatei persistence.xml anstelle meines Tests.

Versuch 2: Zusammenführen von Haupt- und Testklassen zu einem einzelnen Explosionsmodul

Der einzige Weg, den ich sehen kann, damit dieser Ansatz funktioniert, ist die Verwendung des beschriebenen Ansatzes hier - um die Klassen für das getestete Modul an einen anderen Ort zu kopieren (zB target / ejb-testing-classes), dann kopiere die test persistence.xml Datei über die Geben Sie dann diesen neuen Speicherort für den EJB-Container an:

%Vor%

Aber das scheint unnötig ungeschickt. Es könnte auch ein Problem in der Zukunft sein, wenn ich versuche, vorverpackte Module (dh Abhängigkeiten) im Container zu deployen, da ich die Jars vor dem Zusammenführen explodieren müsste.

Mein Wunsch: Datenquellen überschreiben Eigenschaften für den EJB-Container

Ich dachte, dass es weitere Eigenschaften geben könnte, die in den EJB-Container übertragen werden könnten, aber bisher kann ich nur Eigenschaften finden, die für openEJB oder websphere . Ich verwende eingebettete Glassfish, um meinen eingebetteten EJB-Container als Zielplattform bereitzustellen. (Ich habe jetzt die Glassfish-Eigenschaft gefunden - siehe Update # 1, unten)

Sicherlich hat jeder, der versucht hat, EJBs mit einem eingebetteten EJB-Container und einer anderen Datenquelle als der Produktions-DB zu testen, auf dieses Problem gestoßen. Sogar dieser Typ hat gerade an dieser Stelle aufgegeben und die Standard-DB verwendet, was für mich keine Option ist.

Jede Hilfe wäre sehr willkommen.

Update 1: Ich habe das Liste der Eigenschaften , die der Glassfish EJB-Container akzeptiert, und zunächst scheint es, dass ich die folgende Eigenschaft verwenden könnte

%Vor%

um eine Datenquelle in einer domain.xml zu definieren und den Container darauf zu verweisen. Laut der Quellcode , diese Eigenschaft wird ignoriert, es sei denn, die Eigenschaft installation.root wird ebenfalls festgelegt. Dies würde bedeuten, dass eine bereits vorhandene Installation von Glassfish erforderlich ist nur um meine Tests zu starten. Dies würde die Portabilität meines Maven-Projekts inakzeptabel verringern. : (

Update 2: Ich habe ein JIRA-Problem für dieses Problem und empfahl, dass Eigenschaften für den Glassfish-EJB-Container eingeführt werden, der die Konfiguration einer JTA-Datenquelle ermöglicht.

    
___ qstnhdr ___ So definieren Sie eine Testdatenquelle für einen eingebetteten EJB-Container ___ answer15056511 ___

Für meine Sachen funktioniert es ganz gut, wenn Sie den eingebetteten Container nicht direkt verwenden, sondern das Arquillian-Projekt dafür verwenden. Wenn ich den ShrinkWrap-Helfer benutze, kann ich sagen, dass ich einen Test persistence.xml (sowie andere Substitute) bestehen soll.

Dies zeigt ein ziemlich kurzes Beispiel: Ссылка

HTH, Timo

    
___ tag123maenglassfishplugin ___ Das Maven Glassfish Plugin ist ein Maven-Plugin, das die Verwaltung von Glassfish-Domains und Komponentenimplementierungen aus dem Maven-Build-Lebenszyklus ermöglicht. ___ answer15517727 ___

Kann nicht mit eingebettetem Glassfish gemacht werden.

Wie in Update 1 erwähnt, müssen Sie, um den eingebetteten EJB-Container mit einer Datenquelle zu konfigurieren, Folgendes tun:

  1. Konfigurieren Sie eine domain.xml-Datei mit der neuen Datenquelle
  2. Konfigurieren Sie den eingebetteten EJB-Container für die Verwendung einer vorhandenen Glassfish AS-Installation
  3. Konfigurieren Sie den eingebetteten EJB-Container so, dass er die Datei domain.xml aus Schritt 1 verwendet.

Also (dank Schritt 2) auf Wiedersehen, Portabilität. Aber das ist die "Lösung", die ich mitgehen muss, bis die Glassfish-Entwickler meine Anfrage zur Konfiguration von Datenquellen über eine Eigenschaft angehen (siehe JIRA-Link oben in der Frage).

    
___
2
Antworten

So definieren Sie eine Testdatenquelle für einen eingebetteten EJB-Container

Ich versuche, meine EJBs mit einem eingebetteten EJB-Container zu testen. In der Produktion bin ich auf eine JTA-Datenquelle angewiesen, die auf dem Anwendungsserver konfiguriert ist. Während des Testens möchte ich jedoch eine Verbindung zu eine...
07.02.2013, 10:00