Jboss EAP 7 - Wie kann man implizite Module von der Implementierung ausschließen (javax.jms)?

8

Ich dachte nicht, dass ich hier enden würde, aber nach vielen Google- und StackOverflow-Suchen bin ich hier.

Das ist mein genaues Problem , außer dass ich es nicht kann leisten, Codeänderungen vorzunehmen.

Die WAR, die ich zu implementieren versuche, enthält eine JMS-Bibliothek (d. h. javax.jms , die ich nicht aus der WAR ausschließen kann.), die bereits standardmäßig von Jboss EAP 7 geladen wird. Der Pfad zu jar ist etwas wie jboss/modules/system/layers/base/javax/jms/api/ain/jboss-jms-api_2.0_spec-1.0.0.Final-redhat-1.jar . Wegen dieser zwei verschiedenen Versionen der gleichen Klassen, die ich lade, bekomme ich ClassCastException .

%Vor%

Also möchte ich, dass Jboss NICHT javax.jms lädt, damit meine Anwendung das in der WAR enthaltene JAR verwenden kann.

Ich habe mich also gefragt, ob es eine Möglichkeit gibt, das Modul global auszuschließen (für alle WAR-Bereitstellungen).

Das Ausschließen pro Implementierung würde auch funktionieren. Und ich weiß, dass es mit jboss-deployment-structure.xml erreicht werden kann, aber ich kann es nicht zum Laufen bringen.

Hier ist was ich versucht habe:

%Vor%

und

%Vor%

Ich habe die Datei im Verzeichnis WEB-INF abgelegt. Es hat nicht funktioniert. Die JMS-Klasse wurde weiterhin aus dem Ordner modules von Jboss EAP geladen. Also, wie mache ich das richtig?

    
Dilip Raj Baral 11.12.2017, 18:40
quelle

3 Antworten

2

Sie sollten die JMS-API-JAR aus Ihrer Bereitstellung entfernen. Sie können die JAR-Implementierungs-JAR weiterhin in Ihrer Bereitstellung beibehalten, aber das sollte wahrscheinlich in einem RAR enden, vorzugsweise außerhalb Ihrer Bereitstellung.

    
Philippe Marschall 12.12.2017 18:27
quelle
1

Dieser Link enthält einige Dinge, die Sie ausprobieren können.

Bemerkenswert:

  

Ich denke, das Problem ist, dass activemq-all-5.4.2.jar javax.jms. * enthält. Ihre Implementierung erhält dies bereits implizit aus dem Modul javaee.api (weitere Informationen über Abhängigkeiten impliziter Module finden Sie unter hier ). Ich denke nicht, dass es für ein Anwendungsmodul / jar angemessen ist, Java EE-Schnittstellen zu paketieren. Sie können einfach versuchen, das javax-Verzeichnis von activemq-all-5.4.2.jar zu löschen oder eine andere Gruppe von ActiveMQ-Jars in Ihrem Modul zu verwenden, um es auf das zu beschränken, was Sie brauchen.

und / oder ändern Sie Ihre module.xml für ActiveMQ

%Vor%

Es scheint eine Methode zu geben, ActiveMQ in Jboss einzubetten , wenn Sie interessiert sind. Ich werde keine Informationen aus diesem Artikel herausziehen, da es die ursprüngliche Frage nicht beantwortet.

    
dimwittedanimal 20.12.2017 14:30
quelle
1

Die korrekte jboss-deployment-structure.xml ist hier:

%Vor%

Auf diese Weise schließen Sie sowohl das Nachrichten-Subsystem als auch die JMS-API aus.

    
Tair 20.12.2017 18:32
quelle

Tags und Links