JBoss EAP 6.4.0, 7.0.0, 7.1.0beta1
Lorsque vous utilisez JBoss EAP (ci-après JBoss) en tant que serveur d'applications Java EE, il y a un conflit entre les bibliothèques et les modules. Plus de détails peuvent être trouvés dans Chapitre 3 Chargement de classes et modules dans le Guide de développement, mais brièvement. Dans JBoss, les modules inclus dans JBoss sont chargés de préférence à la bibliothèque d'application. (Il ne semble y avoir aucun paramètre pour changer l'ordre des sentiments que vous voyez brièvement.)
Cela signifie que votre application peut s'exécuter sur une version ** différente ** de la version de la bibliothèque que vous avez utilisée au moment de la construction, ce qui peut entraîner des erreurs au démarrage et à l'exécution. (Ça va maintenant, mais des problèmes peuvent survenir lors de la mise à niveau: angoissé :)
Les modules JBoss sont automatiquement chargés en fonction de ce que vous déployez, essayez donc de déployer l'application que vous souhaitez exécuter une fois pour voir ce qui est chargé.
Si c'est la valeur par défaut de standalone.xml
dans {JBOSS_HOME} / standalone / configuration
, il y a un paramètre lié à la sortie du journal sur la 115e ligne, alors changez le niveau en DEBUG.
standalone.xml
<root-logger>
<level name="DEBUG"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
Dans cet état, démarrez JBoss et essayez de déployer n'importe quelle application.
Ensuite, une liste des bibliothèques d'application et des modules chargés par JBoss est sortie dans {JBOSS_HOME} / standalone / server.log
.
La partie qui dit Ajouter une ressource est la bibliothèque chargée depuis war,
Ajout d'un module de dépendance La partie intitulée Dependency est le module chargé.
Voici un exemple de sortie.
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
Cette fois, excluons javax.ejb.api
comme exemple.
Placez jboss-deployment-structure.xml
directement sous WEB-INF de l'application Web.
Après l'avoir placé, réglez comme suit.
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>
Mettez simplement les modules exclus dans <exclusions> ''. Vous devez le spécifier à partir du chemin, qui est écrit dans le
module.xml` de chaque module.
Maintenant, redémarrons JBoss dans cet état.
Je vais l'omettre car le journal est long, mais il ne devrait pas y avoir de javax.ejb.api
dans la colonne Adding dependency Module Dependency.
Vous pouvez ajouter des modules qui ne sont pas initialement inclus dans JBoss à jboss-deployment-structure.xml
, ou exclure chaque sous-système qui se compose de plusieurs modules. Bien qu'elle ne soit pas abordée ici, la méthode de paramétrage est décrite au chapitre 3 du Guide de développement, veuillez donc vous y référer.
J'ai eu du mal à ne pas connaître la cause de l'erreur si l'application qui fonctionne bien avec Tomcat est JBoss: dizzy_face:
Je m'inquiétais de savoir s'il fallait écrire ceci comme principal, mais ce n'était pas seulement une question d'exclusion de modules, donc en prime ...
Créez un Projet vide de TERASOLUNA (5.3.0) et mettez ce qui suit dans HelloController.java
Ajoutez du code.
HelloController.java
/** (Abréviation**/
import com.fasterxml.jackson.databind.util.StdDateFormat;
/** (Abréviation**/
@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);
//d'ici
Set<DateFormat> set = new HashSet<>();
set.add(StdDateFormat.instance);
//Jusque là
model.addAttribute("serverTime", formattedDate);
return "welcome/home";
}
}
Déployez-le sur le serveur Pivotal tc (v3.2) inclus avec STS et accédez à [http: // localhost: 8080 / todo](http: // localhost: 8080 / todo).
Il n'y a pas de problème particulier. Maintenant, déployons et accédons à JBoss EAP 7.0.0.
J'ai une erreur. Il y a également une erreur sur la console.
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)
(Abréviation)
La 38ème ligne de HelloController.java
fait partie de set.add (StdDateFormat.instance);
.
Cette erreur a déjà été corrigée dans 2.7.2 de jackson-databind signalé. La version de jackson-databind utilisée par TERASOLUNA 5.3.0 est la 2.8 comme indiqué dans la Stack List. C'est 0,5, pourquoi est-ce arrivé?
C'est parce que la version de jackson-databind incluse dans JBoss EAP 7.0.0 est 2.5.4 ... mais parce que plusieurs modules sont dépendants les uns des autres et excluant simplement jackson-databind ne fonctionne pas, donc sous Exclure le système JAX-RS.
Référence: Wildfly 9 - Comment exclure Jackson
Définissez jboss-deployment-structure.xml
comme suit.
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>
Maintenant, redémarrons JBoss dans cet état.
Je l'ai fait ☆
Recommended Posts