web-dev-qa-db-fra.com

Déploiement à chaud sur JBoss - comment faire en sorte que JBoss "voie" le changement?

Je développe une application Java EE que je déploie encore et encore sur une installation JBoss locale pendant le développement. Je souhaite accélérer la construction en déployant à chaud mon application directement dans [JBOSS]/server/default/deploy/myApp

Cela semble fonctionner - mais il semble également y avoir un délai quelque peu arbitraire entre le déploiement difficile et le moment où JBoss commence à utiliser les nouvelles classes. Je ne connais pas très bien JBoss, mais je suppose qu'il cache des classes et que c'est ce qui cause le problème. 

Ai-je raison, et si oui, comment puis-je vider le cache de JBoss?

51
Jacob Hansson

J'ai eu le même problème dans mon lot: (Eclipse IDE + adaptateur de serveur JBoss) + JBoss AS 7.0.1 (projet de communauté).

Ma solution est très simple - vous devriez aller dans le panneau d’administration de JBoss (par défaut localhost: 9990), dans les paramètres de profil, ouvrez Core - Deployment Scanners. Activez Autodeploy-Exploded (définissez sur true) et vous pouvez, si vous le souhaitez, définir le temps d'analyse (par défaut, 5 000 ms) sur votre mode (j'ai défini sur 2000, pour une publication incrémentielle plus rapide dans Eclipse lorsque je modifie des projets). . C'est tout. Maintenant, JBoss fait le déploiement HOT non seulement pour les fichiers HTML (JSF, XHTML, etc.), mais prend également en charge les fichiers de classes POJO (beans, etc.).

108
Yan Pak

Malheureusement, ce n'est pas si facile. JBoss comporte des aspects plus complexes (la plupart d’entre eux liés à ClassLoader) qui vous empêcheront de déployer votre application à chaud.

Par exemple, vous ne pourrez pas HOT-DEPLOY si certaines signatures de vos classes changent.

Jusqu'ici, l'utilisation de MyEclipse IDE (une distribution payante d'Eclipse) est la seule chose que j'ai trouvée qui effectue un déploiement à chaud de manière assez efficace. Pas 100% de précision cependant. Mais certainement meilleur que JBoss Tools, Netbeans ou toute autre solution basée sur Eclipse.

Je cherchais des outils gratuits pour accomplir ce que vous venez de décrire par demandant à StackOverflow si vous voulez jeter un coup d'œil.

8
Pablo Santa Cruz

Vous devriez essayer JRebel , qui se débrouille plutôt bien. Un peu cher, mais ça vaut le coup. Ils ont une version d'essai.

6
Julien Kronegg

Juste mes deux cents:

  • Déploiement à froid est le moyen de déployer une application lorsque vous l'arrêtez (ou que vous arrêtez le serveur entier), puis que vous installez la nouvelle version et que vous redémarrez enfin l'application (ou démarrez le serveur entier). Il convient aux déploiements de production officiels, mais il serait horriblement lent de le faire pendant le développement. Si vous faites cela, oubliez le développement rapide.

  • Auto deploy est la possibilité pour le serveur de ré-analyser périodiquement un nouvel EAR/WAR et de le déployer automatiquement en coulisse pour vous ou pour le IDE (Eclipse) de déployer automatiquement l'application entière. lorsque vous apportez des modifications au code source. JBoss fait cela, mais le département marketing de JBoss appelle cela de manière trompeuse "déploiement à chaud". Un déploiement automatique n'est pas aussi lent comparé à un déploiement à froid, mais est vraiment lent comparé à un déploiement à chaud.

  • Déploiement à chaud est la possibilité de déployer en arrière-plan "que vous tapez". Pas besoin de redéployer toute l'application lorsque vous apportez des modifications. Déploiement à chaud UNIQUEMENT déploie les modifications. Vous changez un code source Java, et le tour est joué! ça court déjà. Vous n'avez jamais remarqué qu'il le déployait. JBoss ne peut pas faire cela, à moins d’acheter pour JRebel (ou similaire), mais c’est trop cher pour moi (je ne suis pas cher).

Maintenant, mon "argumentaire de vente": D

Qu'en est-il de l'utilisation de Tomcat pendant le développement? Livré avec le déploiement hot toute la journée ... gratuitement. Je le fais tout le temps pendant le développement, puis je déploie sur WebSphere, JBoss ou Weblogic. Ne vous méprenez pas, ces trois modèles sont parfaits pour la production, mais sont vraiment AWFUL pour le développement rapide sur votre machine locale. La productivité du développement est un problème si vous utilisez ces trois technologies toute la journée.

D'après mon expérience, j'ai arrêté d'utiliser WebSphere, JBoss et Weblogic pour un développement rapide. Je les ai toujours installés dans mon environnement local, cependant, mais seulement pour les tests occasionnels, il se peut que je devrais exécuter. Je ne paie pas pour JRebel tout en obtenant une vitesse de développement impressionnante. Ai-je mentionné que Tomcat est entièrement compatible avec JBoss?

Tomcat est gratuit et comporte non seulement un déploiement automatique, mais également un déploiement à chaud REAL (code Java, JSP, JSF, XHTML) au fur et à mesure que vous tapez dans Eclipse (Oui, vous avez bien lu). MYKong a une page ( https://www.mkyong.com/Eclipse/how-to-configure-hot-deploy-in-Eclipse/ ) avec des détails sur la configuration.

Avez-vous aimé mon argumentaire de vente? 

À votre santé!

2
Vladimir

Le déploiement à chaud est stable uniquement pour les modifications apportées aux parties statiques de l'application (jsf, xhtml, etc.).

Voici une solution de travail, selon JBoss AS 7.1.1.Final :

  • Construisez votre projet.
  • Accédez à [JBOSS_HOME]/standalone/tmp/vfs.
  • Ouvrez le dossier modifié le plus récemment appelé "deployment [some_alphanumeric_values]", c'est-à-dire "deployment344b1c870c8edbd".
  • Accédez à la vue spécifique que vous souhaitez modifier (généralement incluse dans le dossier .war fourni) et ouvrez-la avec un éditeur de texte (Notepad ++).
  • Apportez les modifications souhaitées et enregistrez le fichier.
  • Actualisez la page correspondante de votre navigateur. Les changements devraient être visibles maintenant.
  • Lorsque vous avez terminé, n'oubliez pas de copier ces modifications dans votre environnement de développement réel, de les reconstruire et de les redéployer.

    2
    thodorisbais

    J'ai eu le même problème, mais je pense l'avoir sous contrôle maintenant.

    Utilisez-vous Eclipse ou une ligne de commande ou ??

    Quand j'utilise la ligne de commande, je pense avoir "seam clean" ou "seam undeploy" ou peut-être même "seam restart" suivi de "seam explode". J'ai probablement essayé toutes ces techniques à un moment ou à un autre sans jamais prendre la peine de regarder ce que chacune fait. 

    L'idée est de supprimer le fichier de guerre déployé de deux endroits.

    1. $JBOSS_HOME/server/default/deploy
    2. $PROJECT_HOME/exploded_archives
    

    Je suis presque sûr que "Seam Undeploy" supprime le 1er et "Seam Clean" supprime le 2ème.

    Lorsque j'utilise Eclipse (j'utilise celui qui est gratuit), je désactive d'abord "Projet/Construire automatiquement" Ensuite, lorsque je suis prêt à déployer, je réalise soit Projet/Construction, soit Projet/Construire tout, modifié. Lorsque je change de xhtml, Build Project est suffisant. Quand je change de source Java, Build All fonctionne. Il est possible que ceux-ci fassent les mêmes choses et la différence réside dans mon imagination, mais une combinaison de ces éléments fonctionnera pour vous.

    Vous devez cependant regarder la sortie. Parfois, l'application n'est ni nettoyée ni déployée. Cela aurait pour résultat de ne pas voir votre changement. Parfois, je ferme d'abord le serveur, puis je reconstruis/nettoie/déploie le projet.

    J'espère que cela t'aides.

    TDR

    1
    april26

    Trouvé la solution sur ce link :

    Que faire: 

    1. configure l'artefact de guerre éclaté pour avoir l'extension .war 
    2. déployer un artefact éclaté sur WildFly ou Jboss
    3. configurer IntelliJ pour mettre à jour les ressources lors d'une action de mise à jour

    Lorsque je modifie une page (Web), je mets à jour et lorsque je rafraîchit un navigateur Web: tout est là avec mon mod .J'ai configuré Jboss pour le balayage automatique (je ne suis pas sûr que cela ait été utile)

    1
    Mircea Stanciu

    En fait, mon problème était que l'utilitaire de ligne de commande mvn ne verrait pas les modifications pour une raison quelconque. J'ai activé le déploiement automatique dans le scanneur de déploiement et il n'y avait toujours aucune différence. CEPENDANT ... Je tournais autour de l'environnement Eclipse et, comme j'avais ajouté un serveur JBoss pour sa fenêtre Servers, j'ai découvert que j'avais la possibilité d'ajouter ou de supprimer des modules dans mon espace de travail. Une fois que le projet a été ajouté chaque fois que j'ai apporté une modification au code, le changement de code a été détecté par le scanneur de déploiement et JBoss est passé dans le cycle de mise à jour du code !!! Fonctionne comme un charme.

    Voici les étapes nécessaires pour mettre cela en place.

    Tout d’abord, si vous ne l’avez pas encore fait, ajoutez votre serveur JBoss à votre Eclipse en utilisant Fichier-> Nouveau-> Autre-> Serveur, puis suivez les instructions en ajoutant votre serveur JBoss AS 7. Assurez-vous de localiser le répertoire que vous utilisez.

    Une fois ajouté, regardez au bas de Eclipse et cliquez sur l'onglet "Serveurs". Vous devriez voir votre serveur JBoss. Mettez-le en surbrillance et recherchez "Ajouter ou supprimer ...". De là, vous devriez voir votre projet. 

    Une fois ajouté, modifiez légèrement votre code et regardez JBoss se déployer à fond en ville.

    0
    Perry

    J'ai développé un projet avec Eclipse et Wildfly et le fichier EAR éclaté prenait de l'ampleur en raison du déploiement de toutes les bibliothèques tierces dont j'avais besoin dans l'application. Je dirigeais le déploiement vers mon référentiel Maven qui, je suppose, était en train de recopier les pots à chaque fois. Donc, redéployer l'application chaque fois que j'ai changé de code Java dans la couche de service se transformait en cauchemar. 

    Puis, s’être tourné vers l’agent Hotswap, cela a beaucoup aidé à voir les modifications apportées au code EJB sans redéployer l’application.

    Cependant, j'ai récemment effectué une mise à niveau vers Wildfly 10, Java 8 et JBoss Developer Studio 10 et au cours de ce processus, j'ai pris le temps de déplacer tous mes fichiers jar d'applications tierces, par exemple. primefaces dans les modules Wildfly et j'ai retiré mon dépôt Maven de ma configuration de déploiement. Désormais, le redéploiement de l’ensemble de l’application, qui est assez volumineuse via Eclipse, ne prend que quelques secondes et est beaucoup plus rapide qu’auparavant. Je ne ressens même pas le besoin d'installer Hotswap et je ne veux pas le risquer de toute façon pour le moment. 

    Donc, si vous construisez sous Eclipse avec Wildfly, gardez votre application exempte de bibliothèques tierces utilisant des modules Wildfly et vous serez bien mieux loti.

    0
    Shaun O'Hagan

    Si vous travaillez avec Eclipse IDE, il existe un plugin gratuit Manik-Hotdeploy .

    Ce plugin vous permet de connecter votre espace de travail Eclipse à votre dossier de déploiement wildfly. Après une construction importante, votre artefact (par exemple, war ou ear) sera automatiquement placé dans le dossier de déploiement de votre serveur. Les fichiers de contenu Web (par exemple, .xhtml .jsf ...) seront également déployés à chaud. 

    Le plugin fonctionne pour wildfly, glassfish et payara. 

    Lisez la section Support JBoss/Wildfly pour plus de détails. 

    0
    Ralph

    Solution pour Netbeans 8.02 et 8.1 IDE et JBOSS EAP 6.4:

    1. À partir de l'onglet Services de Netbeans, ajoutez le serveur JBOSS à votre nœud "serveurs".
    2. Si vous utilisez MAVEN, netbeans compile les fichiers et maven les copie dans le répertoire ./target. Vous devez créer un lien symbolique à partir de.\Target vers JBOSS_HOME\standalone\deployments. Sous Windows, un exemple de commande serait

      cd %JBOSS_HOME%\standalone\deployments mklink /d MyWebApplication.war %PROJECTS_HOME%\MyWebApplication\target\MyWebApplication-1.0.0

      Ce qui précède crée un lien symbolique de %JBOSS_HOME%\standalone\deployments\MyWebApplication.war à \target\MyWebApplication-1.0.0, où maven transfère tous les fichiers après la compilation ou après une modification de jsp, html ou tout autre fichier.

    3. La dernière chose à faire est de créer un fichier CentralManagement.war.dodeploy dans% JBOSS_HOME%\standalone\deployments. Ce fichier indiquera à JBOSS de déployer le "fichier" war en tant qu’application Web. 

    0
    chrisl08

    Déployez l'application telle qu'explosée (dossier project.war), ajoutez-y votre web.xml:

    <web-app>
        <context-param>
            <param-name>org.jboss.weld.development</param-name>
            <param-value>true</param-value>
        </context-param>
    

    Mettez à jour l'heure web.xml chaque fois que vous déployez (ajoutez une ligne vierge):

    set PRJ_HOME=C:\Temp2\MyProject\src\main\webapp
    set PRJ_CLSS_HOME=%PRJ_HOME%\WEB-INF\classes\com\myProject
    
    set JBOSS_HOME= C:\Java\jboss-4.2.3.GA-jdk6\server\default\deploy\MyProject.war
    set JBOSS_CLSS_HOME= %JBOSS_HOME%\WEB-INF\classes\com\myProject
    
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\ProfileAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\ProfileAction.class
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\AjaxAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\AjaxAction.class
    
    ECHO.>>%JBOSS_HOME%\WEB-INF\web.xml
    
    0
    Conete Cristian

    Démarrez le serveur en mode débogage et il suivra les modifications à l'intérieur des méthodes. Autres modifications Il vous sera demandé de redémarrer le module.

    0
    erickdeoliveiraleal

    J'utilise JBoss AS 7.1.1.Final . L'ajout de l'extrait de code suivant dans mon web.xml m'a aidé à modifier les fichiers JSP à la volée:

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.Apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>development</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    

    J'espère que cela t'aides.!!

    0
    sidhantgupta

    Cela a fonctionné pour moi dans Eclipse Mars avec WildFly 11. Double-cliquez sur le serveur WildFly sous Serveurs pour ouvrir la page de configuration. Dans l'onglet Présentation -> Publication, choisissez "Publier automatiquement lorsque les ressources changent" et définissez l'intervalle sur 1. Cliquez ensuite sur l'onglet Présentation -> Comportement de rechargement de l'application, décochez le modèle d'utilisation par défaut et définissez le modèle sur \.jar$|\.class$. Dans l'onglet Déploiement, décochez la case Déployer le projet en tant qu'archives compressées. J'espère que cela t'aides.

    0
    jpllosa