11
votes

Spring Java Config vs JBoss 7

Je tente d'exécuter une application simple avec la configuration basée sur Java Spring sur JBoss, mais pas de succès. Cette application fonctionne correctement sur la jetée et la tomcat. Le journal JBoss a l'air bien, car cela me montre des mappages réussis, etc., mais j'ai 404 essayé d'accéder à l'URL.

Voici mon code: p>

Initialiseur P>

Spring WebApplicationInitializers detected on classpath
Initializing Spring root WebApplicationContext
Root WebApplicationContext: initialization started
Mapped URL path [/resources/**]
Mapped URL path [/**]
Registering web context: /test
JBAS018559: Deployed "test.war"


15 commentaires

Que se passe-t-il lorsque vous essayez d'accéder à la console d'administration ATHTTP: //127.0.0.1: 9990?


Avez-vous des gestionnaires pour / ?


@Nambari, fonctionne bien, apparaît la console d'administration JBoss ...


@Sotirios, j'ai celui-ci: Public Void AddviewControls (ViewControllerregistry Registry) {registry.addviewController ("/"). SetViewName ("Index"); }


Et avez-vous un /web-inf/pages/index.jsp ?


@Sotiriosdelimanolis Yeap


Comme je l'ai dit, tout fonctionne bien sur la jetée ou Tomcat ... Toutes les applications que je développées sont en cours d'exécution sur la jetée ou la tomcat, mais maintenant je dois maintenant déployer sur JBoss et idk ce qui se passe ...


@Nambari souhaiterait une réponse 404 ou tout simplement pas de réponse?


@Nambari, mais c'est ... Démarrage Coyote http / 1.1 sur http-localhost-127.0.0.1-8080


@ user1596111: Je cherchais l'entrée dans le journal que vous avez posté, je pourrais négliger. Dans la console d'administration, voyez-vous cette application? Pouvez-vous vérifier les outils de développeur de navigateur et les informations de recherche de réseau de recherche?


@Sotiriosdelimanolis: je soupçonnais, d'autres services (Jeté / tomcat) en cours d'exécution sur 8080, mais l'application n'est pas là, de toute façon, il semble de ne pas se connecter à ce que JBoss écoute sur 8080. S'il n'y a pas de serveur Web exécutant 8080, vous obtiendrez cet écran de navigateur avec pas de réponse.


@NAMBARI Oui, je suis d'accord, mais mon serveur fonctionne sur 8080.


@Sotiriosdelimanolis Oui, ma demande est en déploiement et activée. En regardant l'activité du réseau, cela me donne 404 non trouvé.


@Nambari ce que vous voulez dire avec "Aucun serveur Web en cours d'exécution"? JBoss est-il seul pas assez?


@ user1596111: C'était un commentaire pour Sotirios.


8 Réponses :


1
votes

Eh bien, pour quelqu'un d'autre face à ce problème, cela fonctionne simplement sur le nouveau Wildfly. Si vous n'avez pas de conteneur spécifique pour exécuter votre application, vous pouvez choisir entre JBoss 7 et Wildfly et veut exécuter Spring Java Config, essayez-le sur Wildfly!


2 commentaires

Cela fonctionne également pour moi sur EAP 6.2 (qui est comme 7,3, je pense). Le problème semble être que le mappage "/" (par défaut) n'est pas traité comme implicite par JBoss 7.1 (mais c'est par tomcat et jetée), mais seulement si vous utilisez la configuration Java non web.xml. Bizarre.


Correction, cela ne fonctionne pas pour moi avec EAP 6.2. JBoss comme 7 est un DUD. Wildfly (comme 8) travaille pour moi. Ou vous pouvez vous déconner avec la configuration du conteneur en tant que 7 (E.G. Set Activer-Welcome-root = "False" dans standalone.xml ).



9
votes

J'ai eu un problème similaire avec un projet MVC printemps déployé sur JBoss 7.1 sans web.xml.

Selon Javadocs de ressort pour webapplicationInitializer, plus anciennes versions de Tomcat (

C'était la source de mon problème. J'instende le servlet via "/", mais JBoss EAP 6.4 ne prend pas en charge cette cartographie par programme. Cela ne fonctionne que via web.xml. Je voulais toujours utiliser la configuration programmatique, j'ai donc changé la cartographie en "/ *" au lieu de "/", et elle a corrigé mon problème. P> xxx pré>

Remarque: cette configuration est incompatible avec des vues JSP. "/ *" remplacera le servlet de servlet le servlet jsp du conteneur. Si vous comptez toujours sur des points de vue JSP, je vous recommanderais d'utiliser web.xml pour configurer le DispatcherServlet em> de le faire par programme; La configuration Web.xml fonctionne avec "/" correctement. P>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>


2 commentaires

Appeler nouveau annotationconfigwebwebapplicationContext () dans le SpringbootservletInitializer Sous-classe cause tout @Component des objets annotés à instanciation deux fois (voir ma réponse pour éviter cela ).


Il convient de noter que votre problème ne s'applique qu'aux démarrages de printemps. Pour une application MVC à ressort non-Boot, cette solution devrait être bien.



9
votes

Nous avons un projet de démarrage de printemps (1.1.4) sur JBoss EAP 6.2 (l'exigence de mon client ...)

J'ai trouvé une solution pour l'exécuter sur JBoss EAP 6.2.0 GA et gardez la capacité de fonctionner sur Apache Tomcat 7 conteneur.

Initialement mon projet exécuté en mode embarqué, j'ai donc besoin de créer et de modifier certains fichiers pour exécuter sur les conteneurs.

Pour exécuter sur Tomcat en tant qu'application racine que j'ai créée. context.xml: /src/main/webapp/meta-inf/context.xml xxx

à exécuter sur jboss EAP 6.2.0 ga en tant qu'application racine que j'ai créée jboss-web.xml: /src/main/webapp/web-inf/jboss-web.xml xxx

J'ai créé une classe, parce que JBoss Servlet Mapping fonctionne comme / * mais pas avec / : xxx

N'oubliez pas appeler super.onstartup (conteneur);

changements dans pom.xml: xxx

Si vous utilisez printemps.profile, que vous devez définir en env. variable.

i couronne jboss EAP 6.2.0 GA en mode autonome: xxx

si vous < Strong> Exécuter sur Tomcat , alors n'oubliez pas de définir -dspring.profiles.acfiles.active = local

Comme je vois que le paramètre Server.port sera ignoré lorsque vous exécutez sur le conteneur.


2 commentaires

Appeler nouveau annotationconfigwebwebapplicationContext () dans le SpringbootservletInitializer Sous-classe cause tout @Component des objets annotés à instanciation deux fois (voir ma réponse pour éviter cela ).


@ Thiago-Pereira, je dirais respectueusement que cette réponse n'est pas appropriée pour la question posée. La question concerne le printemps java config, pas la chaussure de printemps. Je crois que ma réponse résout toujours le mieux la question par rapport à Spring Java Config. Je l'ai également mis à jour pour aborder les problèmes avec JSP. Stackoverflow.com/a/22395946/428628



2
votes

selon les réponses fournies par Michael R et István Pat³, la cartographie de servlet à JBoss doit être "/ *", pas "/". Cependant, les autres solutions causent à deux reprises les objets annotés @Component. Ce qui suit résout la double initialisation par première appelant super.onstartup code>, puis ajoutant un autre mappage pour le servlet Dispatcher:

public class WebApplicationInitializerImpl implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) throws ServletException {
        super.onStartup(container);

        Dynamic registration = (Dynamic) container.getServletRegistration(EmbeddedWebApplicationContext.DISPATCHER_SERVLET_NAME);
        registration.setLoadOnStartup(1);
        registration.addMapping("/*");
    }
}


0 commentaires

10
votes

J'utilisais @springbootapplication

comme je l'ai lu dans ce fil, j'avais besoin de:

Modifiez la cartographie du Dispatcherservlet en "/ *" au lieu de "/" (en ajoutant un @bean de type SerblistrationBean avec un servlet nommé "Disternersservlet")

Dans cette URL, j'ai trouvé la solution de code: Ajouter mappage de servlet au servlet Dispatch xxx


3 commentaires

À l'époque, cela a été écrit, je n'utilisais pas de démarrage de printemps. Aujourd'hui, tout semble plus facile avec ça :)


Ouais, la botte de printemps est géniale! Je lance et testais mon application localement dans une tomcat intégrée, mais lorsque je suis déployé à JBoss, j'ai eu le même problème. Ainsi, après avoir lu votre fil et trouvez une solution décidée de poster une autre réponse pour aider les autres gars si avait les mêmes problèmes à l'avenir;)


Ouais c'est génial, en fait, ce fil aide les gars qui sont et qui n'utilisent pas de démarrage de printemps ... bien que sa demande vivement recommande d'aller pour la démarrage :)



2
votes

J'utilise JBoss EAP 6.4. Je traversais le fil.

Je voudrais ajouter cela après avoir changé de mappage pour DispatcherVlet de "/" à "/ *". Le JSP de votre projet pourrait ne pas traiter correctement. Je soupçonne que depuis "/ *" avoir plus de priorité sur "/*.jsp", JSPSServillet pourrait ne pas obtenir la demande de traitement de la JSP et du JSP ne sera pas traitée correctement. Dans mon cas, la source de JSP apparaît sur le navigateur comme texte.

J'ai résolu ce problème en définissant JSP en tant que servlet en web.xml comme mentionné ci-dessous. Après cela, les choses fonctionnaient bien pour moi :) xxx

J'ai passé beaucoup de temps à ce sujet, pourrait aider quelqu'un :)) < / p>


1 commentaires

Je pense que vous avez cloué le raisonnement pour la raison pour laquelle JSPS ne fonctionne plus. Toutefois, si vous avez déjà démissionné pour configurer le déploiement via web.xml, vous pouvez également configurer également le Disternerservlet là-bas. Cet insecte Tomcat applique uniquement l'enregistrement programmatique, pas l'enregistrement web.xml. J'aurai plus de détails sur ma réponse.



7
votes

J'utilise Spring Boot 1.3.1 et JBoss EAP 6.4. Et j'ai trouvé avec cela dans votre projet, vous pouvez ajouter à SRC / Main / Ressources / Application.Proporties Cette ligne:

server.servlet-path=/*


0 commentaires

1
votes

J'ai eu des problèmes similaires avec JBoss 6.4.0. et démarrage à ressort 1.3 En combinaison avec des tuiles 3. Après avoir installé le correctif JBoss JBoss-eap-6.4.6-Patch.zip. Les problèmes ont été résolus.

Après la correction, je n'avais pas besoin d'utiliser le serveur de configuration.Servlet-chemin = / *


1 commentaires

Trouver intéressant. Je parie que le patch inclut le correctif Tomcat de V7.0.14. Malheureusement, c'est un peu douloureux pour patcher EAP 6.4 et JBoss n'offre pas une version corrigée sous une forme librement téléchargeable.