JBoss EAP 6.4.0, 7.0.0, 7.1.0beta1
Bei der Verwendung von JBoss EAP (JBoss) als Java EE-Anwendungsserver ist ein Konflikt zwischen Bibliotheken und Modulen zu beachten. Weitere Informationen finden Sie in Kapitel 3 Laden und Modulen von Klassen im Entwicklungshandbuch, jedoch kurz. In JBoss werden die in JBoss enthaltenen Module bevorzugt in die Anwendungsbibliothek geladen. (Es scheint keine Einstellung zu geben, um die Reihenfolge der Gefühle zu ändern, die Sie kurz sehen.)
Dies bedeutet, dass Ihre Anwendung möglicherweise auf einer anderen Version ** ausgeführt wird ** als die Version der Bibliothek, die Sie zum Zeitpunkt der Erstellung verwendet haben. Dies kann zu Fehlern beim Start und zur Laufzeit führen. (Es ist jetzt in Ordnung, aber beim Upgrade können Probleme auftreten: gequält :)
JBoss-Module werden je nach Bereitstellung automatisch geladen. Versuchen Sie daher, die Anwendung, die Sie ausführen möchten, einmal bereitzustellen, und ermitteln Sie, was geladen wird.
Wenn dies die Standardeinstellung von "standalone.xml" in "{JBOSS_HOME} / standalone / configuration" ist, gibt es eine Einstellung für die Protokollausgabe in der 115. Zeile. Ändern Sie daher die Ebene in "DEBUG".
standalone.xml
<root-logger>
<level name="DEBUG"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
Starten Sie in diesem Status JBoss und versuchen Sie, eine beliebige Anwendung bereitzustellen. Anschließend wird eine Liste der von JBoss geladenen Anwendungsbibliotheken und Module in "{JBOSS_HOME} / standalone / server.log" ausgegeben. Der Teil, der besagt, dass Ressourcen hinzugefügt werden, ist die aus dem Krieg geladene Bibliothek. Hinzufügen eines Abhängigkeitsmoduls Der Teil mit der Bezeichnung Abhängigkeit ist das geladene Modul. Das Folgende ist eine Beispielausgabe.
server.log
2017-09-04 18:29:42,597 DEBUG [org.jboss.as.server.deployment](MSC service thread 1-7) Adding resource "/C:/jboss/standalone/deployments/todo.war/WEB-INF/lib/aopalliance-1.0.jar" to module deployment.todo.war
2017-09-04 18:29:42,648 DEBUG [org.jboss.as.server.deployment](MSC service thread 1-7) Adding dependency ModuleDependency [identifier=javax.ejb.api, moduleLoader=local module loader @282ba1e (finder: local module finder @13b6d03 (roots: C:\jboss\modules,C:\jboss\modules\system\layers\base)), export=false, optional=false, importServices=true] to module deployment.todo.war
Lassen Sie uns diesmal javax.ejb.api
als Beispiel ausschließen.
Platzieren Sie "jboss-deploy-struct.xml" direkt unter WEB-INF der Webanwendung. Stellen Sie es nach dem Platzieren wie folgt ein.
jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="javax.ejb.api" />
</exclusions>
</deployment>
</jboss-deployment-structure>
Fügen Sie einfach die ausgeschlossenen Module in "<Ausschlüsse>" ein.
Sie müssen es aus dem Pfad angeben, der in der module.xml
jedes Moduls geschrieben ist.
Lassen Sie uns jetzt JBoss in diesem Zustand neu starten.
Ich werde es weglassen, weil das Protokoll lang ist, aber es sollte kein "javax.ejb.api" in der Spalte "Abhängigkeitsmodul hinzufügen" enthalten sein.
Sie können Module, die ursprünglich nicht in JBoss enthalten waren, zu "jboss-deploy-struct.xml" hinzufügen oder jedes Subsystem ausschließen, das aus mehreren Modulen besteht. Obwohl hier nicht behandelt, wird die Einstellungsmethode in Kapitel 3 des Entwicklungshandbuchs beschrieben. Bitte beziehen Sie sich darauf.
Es fiel mir schwer, die Fehlerursache nicht zu kennen, wenn die Anwendung, die mit Tomcat einwandfrei funktioniert, JBoss ist: dizzy_face:
Ich war besorgt darüber, ob ich dies als Hauptschreiben schreiben sollte, aber es ging nicht nur darum, Module auszuschließen, sondern als Bonus ...
Erstellen Sie ein leeres Projekt von TERASOLUNA (5.3.0) und fügen Sie Folgendes in HelloController.java
ein Code hinzufügen.
HelloController.java
/** (Abkürzung**/
import com.fasterxml.jackson.databind.util.StdDateFormat;
/** (Abkürzung**/
@RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST })
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
//von hier
Set<DateFormat> set = new HashSet<>();
set.add(StdDateFormat.instance);
//Bisher
model.addAttribute("serverTime", formattedDate);
return "welcome/home";
}
}
Stellen Sie dies auf dem in STS enthaltenen Pivotal tc Server (v3.2) bereit und greifen Sie auf [http: // localhost: 8080 / todo](http: // localhost: 8080 / todo) zu.
Es gibt kein besonderes Problem. Lassen Sie uns nun JBoss EAP 7.0.0 bereitstellen und darauf zugreifen.
Ich habe einen Fehler bekommen. Es liegt auch ein Fehler in der Konsole vor.
console.log
15:28:42,923 ERROR [org.terasoluna.gfw.common.exception.ExceptionLogger](default task-2) [e.xx.fw.9001] UNDEFINED-MESSAGE: java.lang.NullPointerException
at java.text.DateFormat.hashCode(Unknown Source)
at java.util.HashMap.hash(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at todo.app.welcome.HelloController.home(HelloController.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
(Abkürzung)
Die 38. Zeile von HelloController.java
ist der Teil von set.add (StdDateFormat.instance);
.
Dieser Fehler wurde bereits in 2.7.2 von jackson-database [gemeldet] behoben (https://github.com/FasterXML/jackson-databind/issues/1130). Die von TERASOLUNA 5.3.0 verwendete Version von jackson-database ist 2.8 (siehe [Stapelliste]) (http://terasolunaorg.github.io/guideline/5.3.0.RELEASE/ja/Overview/FrameworkStack.html). Es ist .5, warum ist das passiert?
Das liegt daran, dass die in JBoss EAP 7.0.0 enthaltene Version von Jackson-Databind 2.5.4 ist ... aber weil mehrere Module voneinander abhängig sind und das einfache Ausschließen von Jackson-Databind nicht funktioniert, also sub System JAX-RS ausschließen.
Referenz: Wildfly 9 - Wie schließe ich Jackson aus
Stellen Sie jboss-deploy-struct.xml
wie folgt ein.
jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
Lassen Sie uns jetzt JBoss in diesem Zustand neu starten.
Ich habe es getan ☆
Recommended Posts