Modul in jBoss AS erstellen

8

Ich benutze jBoss AS 7, um meine verschiedenen Projekte zu veröffentlichen, und alle benutzen die Jersey API, also wollte ich, anstatt sie in jedem Projekt zu implementieren, ein Modul dafür erstellen. Dafür habe ich den Ordner JBOSS_HOME \ modules \ com \ sun \ Jersey \ main erstellt und in diesem Ordner die Jersey jars und die Datei module.xml:

platziert %Vor%

Um die Verwendung des jBoss JAX-RS zu verhindern, habe ich aus der Datei JBOSS_HOME \ standalone \ standalone.xml die folgenden Zeilen entfernt:

%Vor%

Im Ordner MyProjectEAR \ META-INF habe ich die Datei jboss-deployment-structure.xml mit folgender Struktur erstellt:

%Vor%

Meine MyProject \ webContent \ web.xml-Datei ist dies:

%Vor%

Meine Manifestdatei, die in MyProject \ webContent \ META-INF \ MANIFEST.MF vorhanden ist, lautet wie folgt:

%Vor%

Als ich versucht habe, das Projekt zu implementieren, habe ich den folgenden Fehler erhalten:

%Vor%

* BEARBEITEN: * Wenn ich die Jersey API in JBOSS_HOME \ modules \ com \ sun \ jsf-impl \ main platziere und die entsprechende module.xml ändere funktioniert alles ok. Was hat dieser Ort anders?

    
Gonçalo Cardoso 29.03.2012, 12:26
quelle

7 Antworten

7
___ qstnhdr ___ Modul in jBoss AS erstellen ___ answer38993910 ___

Es gibt bereits eine Antwort, aber ich möchte das Thema ein wenig für zukünftige Leser klären.

Es gibt drei Orte , an denen ein JBoss-Modul als eine Abhängigkeit von anderen Bereitstellungen in JBoss 7 (EAP 6) deklariert werden kann:

  1. Globale Module
  2. MANIFEST.MF
  3. jboss-deployment-struktur.xml

In den meisten Fällen sind sie alternativ .

1. Globale Module

  

Ein globales Modul ist ein Modul, das JBoss Enterprise Application Platform 6 als Abhängigkeit von jeder Anwendung bereitstellt. Jedes Modul kann global gemacht werden, indem es zur Liste der globalen Module des Anwendungsservers hinzugefügt wird.

Sie können globale Module ganz einfach über die Verwaltungskonsole hinzufügen (siehe Quellen) oder indem Sie die Datei standalone.xml:

bearbeiten %Vor%

2. MANIFEST.MF

Fügen Sie der Datei MANIFEST.MF einen Eintrag %code% mit einer durch Kommas getrennten Liste von Abhängigkeitsmodulnamen hinzu.

%Vor%

Wenn Sie Maven verwenden, müssen Sie nur einige Plugins konfigurieren. z.B. für das Ohr.

%Vor%

HINWEIS: Durch die Verwendung von %code% wird die %code% für alle im Ohr gebündelten Module sichtbar.

3. jboss-deployment-structure.xml

  

jboss-deployment-structure.xml ist ein JBoss-spezifischer Deployment-Deskriptor, mit dem das Laden von Klassen feingranular gesteuert werden kann. Es sollte in der Top-Level-Bereitstellung in META-INF (oder WEB-INF für Web-Bereitstellungen) platziert werden

Sie können anhand der folgenden Dokumente sehen, wie leistungsfähig es im Vergleich zu MANIFEST.MF ist. Im einfachsten Fall hier ein Beispiel:

%Vor%

HINWEIS 1: Genau wie bei MANIFEST.MF wird durch %code% die %code% für alle im Ohr gebündelten Module sichtbar gemacht.

HINWEIS 2: Das Attribut %code% ist auch in jboss-deployment-structure.xml verfügbar, funktioniert aber nicht ordnungsgemäß für bestimmte Versionen (wahrscheinlich & lt; EAP 6.4.7). Überprüfen Sie es, wenn Sie es brauchen.

Ich hoffe, es hilft.

Quellen :

RedHat docs - Hinzufügen einer expliziten Modulabhängigkeit zu einer Bereitstellung

RedHat docs - Module konfigurieren

RedHat-Dokumentation - Fügen Sie allen Bereitstellungen ein Modul hinzu

JBoss AS 7 Entwicklerhandbuch

    
___ answer17363607 ___

Wenn Sie Maven verwenden, können Sie einen Verweis auf ein Modul in JBoss AS wie folgt hinzufügen:

%Vor%

Was automatisch die Manifest-Einträge für Sie generiert.

Ich persönlich muss diesen Ansatz verwenden, um den Fehler "Native Library xxxxxxx, der bereits in einen anderen Classloader geladen wurde" beim Laden von com.microsoft.jdbc.sqlserver.SQLServerDriver , den ich als Modul definiert habe, zu vermeiden JBoss AS - Auf diese Weise können JNDI-definierte Verbindungen eine Verbindung zu MSSQL herstellen und gleichzeitig kann ich diese Abhängigkeit wiederverwenden, um direkt mit der Datenbank zu verbinden (dieses Mal über DriverManager anstelle von JNDI).

    
___ qstntxt ___

Ich benutze jBoss AS 7, um meine verschiedenen Projekte zu veröffentlichen, und alle benutzen die Jersey API, also wollte ich, anstatt sie in jedem Projekt zu implementieren, ein Modul dafür erstellen. Dafür habe ich den Ordner JBOSS_HOME \ modules \ com \ sun \ Jersey \ main erstellt und in diesem Ordner die Jersey jars und die Datei module.xml:

platziert %Vor%

Um die Verwendung des jBoss JAX-RS zu verhindern, habe ich aus der Datei JBOSS_HOME \ standalone \ standalone.xml die folgenden Zeilen entfernt:

%Vor%

Im Ordner MyProjectEAR \ META-INF habe ich die Datei jboss-deployment-structure.xml mit folgender Struktur erstellt:

%Vor%

Meine MyProject \ webContent \ web.xml-Datei ist dies:

%Vor%

Meine Manifestdatei, die in MyProject \ webContent \ META-INF \ MANIFEST.MF vorhanden ist, lautet wie folgt:

%Vor%

Als ich versucht habe, das Projekt zu implementieren, habe ich den folgenden Fehler erhalten:

%Vor%

* BEARBEITEN: * Wenn ich die Jersey API in JBOSS_HOME \ modules \ com \ sun \ jsf-impl \ main platziere und die entsprechende module.xml ändere funktioniert alles ok. Was hat dieser Ort anders?

    
___ answer9929038 ___

Ich bin kein Experte für jboss-Module, aber es gibt ein paar Dinge, die Sie ausprobieren könnten.

Sie haben gesagt, Sie haben alle JARs und module.xml in %code% abgelegt. Beachten Sie das Kapital J. Ich weiß nicht, dass es wichtig ist, aber aus Konsistenzgründen sollten Sie es zumindest in Kleinbuchstaben schreiben.

Ich glaube auch nicht, dass du %code% in %code% willst.

Auch hier könnte ich falsch liegen, da ich definitiv kein Experte für jboss-Module bin, aber ich würde diese beiden Dinge zuerst versuchen.

    
___ answer16568541 ___

Globale Module können auch über die CLI-Schnittstelle hinzugefügt werden.

Dies erleichtert das Vornehmen von Änderungen, da Sie eine Batch-Datei erstellen und diese ausführen können ./jboss-cli.sh --file {Pfad zur Datei}

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer16058879 ___

Kommentiere den init param in web.xml, der wirklich funktioniert hat ...

%Vor%     
___ tag123configuration ___ Konfiguration ist die Festlegung der Einstellungen für ein System oder eine Anwendung ___ tag123jersey ___ Jersey ist die Open-Source-, Produktionsqualität, JAX-RS (JSR 311, JSR 339) Referenzimplementierung für die Erstellung RESTful Web-Services. ___ tag123deployment ___ Eine Reihe von Aktivitäten, die ein Programm für die Verwendung verfügbar machen (normalerweise in Test- oder Produktionsumgebungen) ___ tag123jboss7x ___ Version 7 des JBoss-Anwendungsservers ___ antwort13491012 ___

Ich musste hinzufügen

%Vor%

in der JBOSS_HOME \ standalone \ configuration \ standalone.xml-Konfigurationsdatei

    
___ answer9940299 ___

Sie müssen in der Bereitstellung eine Abhängigkeit von Ihrem Modul angeben.

META-INF \ MANIFEST.MF

%Vor%

Siehe auch Ссылка

    
___
Gonçalo Cardoso 21.11.2012, 10:18
quelle
12

Sie müssen in der Bereitstellung eine Abhängigkeit von Ihrem Modul angeben.

META-INF \ MANIFEST.MF

%Vor%

Siehe auch Ссылка

    
wolfc 30.03.2012 09:26
quelle
3

Es gibt bereits eine Antwort, aber ich möchte das Thema ein wenig für zukünftige Leser klären.

Es gibt drei Orte , an denen ein JBoss-Modul als eine Abhängigkeit von anderen Bereitstellungen in JBoss 7 (EAP 6) deklariert werden kann:

  1. Globale Module
  2. MANIFEST.MF
  3. jboss-deployment-struktur.xml

In den meisten Fällen sind sie alternativ .

1. Globale Module

  

Ein globales Modul ist ein Modul, das JBoss Enterprise Application Platform 6 als Abhängigkeit von jeder Anwendung bereitstellt. Jedes Modul kann global gemacht werden, indem es zur Liste der globalen Module des Anwendungsservers hinzugefügt wird.

Sie können globale Module ganz einfach über die Verwaltungskonsole hinzufügen (siehe Quellen) oder indem Sie die Datei standalone.xml:

bearbeiten %Vor%

2. MANIFEST.MF

Fügen Sie der Datei MANIFEST.MF einen Eintrag Dependencies mit einer durch Kommas getrennten Liste von Abhängigkeitsmodulnamen hinzu.

%Vor%

Wenn Sie Maven verwenden, müssen Sie nur einige Plugins konfigurieren. z.B. für das Ohr.

%Vor%

HINWEIS: Durch die Verwendung von export wird die com.foo.bar.test-module für alle im Ohr gebündelten Module sichtbar.

3. jboss-deployment-structure.xml

  

jboss-deployment-structure.xml ist ein JBoss-spezifischer Deployment-Deskriptor, mit dem das Laden von Klassen feingranular gesteuert werden kann. Es sollte in der Top-Level-Bereitstellung in META-INF (oder WEB-INF für Web-Bereitstellungen) platziert werden

Sie können anhand der folgenden Dokumente sehen, wie leistungsfähig es im Vergleich zu MANIFEST.MF ist. Im einfachsten Fall hier ein Beispiel:

%Vor%

HINWEIS 1: Genau wie bei MANIFEST.MF wird durch export=true die com.foo.bar.test-module für alle im Ohr gebündelten Module sichtbar gemacht.

HINWEIS 2: Das Attribut optional=true/false ist auch in jboss-deployment-structure.xml verfügbar, funktioniert aber nicht ordnungsgemäß für bestimmte Versionen (wahrscheinlich & lt; EAP 6.4.7). Überprüfen Sie es, wenn Sie es brauchen.

Ich hoffe, es hilft.

Quellen :

RedHat docs - Hinzufügen einer expliziten Modulabhängigkeit zu einer Bereitstellung

RedHat docs - Module konfigurieren

RedHat-Dokumentation - Fügen Sie allen Bereitstellungen ein Modul hinzu

JBoss AS 7 Entwicklerhandbuch

    
Linuslabo 17.08.2016 10:20
quelle
2

Wenn Sie Maven verwenden, können Sie einen Verweis auf ein Modul in JBoss AS wie folgt hinzufügen:

%Vor%

Was automatisch die Manifest-Einträge für Sie generiert.

Ich persönlich muss diesen Ansatz verwenden, um den Fehler "Native Library xxxxxxx, der bereits in einen anderen Classloader geladen wurde" beim Laden von com.microsoft.jdbc.sqlserver.SQLServerDriver , den ich als Modul definiert habe, zu vermeiden JBoss AS - Auf diese Weise können JNDI-definierte Verbindungen eine Verbindung zu MSSQL herstellen und gleichzeitig kann ich diese Abhängigkeit wiederverwenden, um direkt mit der Datenbank zu verbinden (dieses Mal über DriverManager anstelle von JNDI).

    
Vedran 28.06.2013 11:24
quelle
0

Ich bin kein Experte für jboss-Module, aber es gibt ein paar Dinge, die Sie ausprobieren könnten.

Sie haben gesagt, Sie haben alle JARs und module.xml in JBOSS_HOME\modules\com\sun\Jersey\main abgelegt. Beachten Sie das Kapital J. Ich weiß nicht, dass es wichtig ist, aber aus Konsistenzgründen sollten Sie es zumindest in Kleinbuchstaben schreiben.

Ich glaube auch nicht, dass du <include path="**"/> in jboss-deployment-structure.xml willst.

Auch hier könnte ich falsch liegen, da ich definitiv kein Experte für jboss-Module bin, aber ich würde diese beiden Dinge zuerst versuchen.

    
James R. Perkins 29.03.2012 15:56
quelle
0

Globale Module können auch über die CLI-Schnittstelle hinzugefügt werden.

Dies erleichtert das Vornehmen von Änderungen, da Sie eine Batch-Datei erstellen und diese ausführen können ./jboss-cli.sh --file {Pfad zur Datei}

    
mkalish 15.05.2013 15:01
quelle
0

Kommentiere den init param in web.xml, der wirklich funktioniert hat ...

%Vor%     
NancyMarido 17.04.2013 11:31
quelle