it-swarm.com.de

Hot Deployment auf JBoss - Wie kann ich feststellen, dass JBoss die Änderung "sieht"?

Ich entwickle eine Java EE-Anwendung, die ich während der Entwicklung immer wieder auf einer lokalen JBoss-Installation bereitstelle. Ich möchte die Erstellung beschleunigen, indem Sie meine Anwendung direkt in [JBOSS]/server/default/deploy/myApp bereitstellen

Es scheint zu funktionieren - aber es scheint auch eine willkürliche Verzögerung zwischen dem harten Deployment und dem Beginn der Verwendung der neuen Klassen durch JBoss zu geben. Ich bin nicht sehr vertraut mit JBoss, aber ich gehe davon aus, dass es Klassen zwischenspeichert und dass dies das Problem verursacht. 

Bin ich richtig, und wenn ja, wie kann ich JBoss-Flush in den Cache stellen?

51
Jacob Hansson

Ich hatte das gleiche Problem in meinem Bundle: (Eclipse IDE + JBoss-Serveradapter) + JBoss AS 7.0.1 (Community-Projekt).

Meine Lösung ist sehr einfach - Sie sollten zum JBoss-Verwaltungsbereich wechseln (standardmäßig localhost: 9990). Dort öffnen Sie in den Profileinstellungen die Core-Deployment-Scanner. Aktivieren Sie Autodeploy-Exploded (auf true gesetzt), und nach Ihren Wünschen können Sie die Scannerzeit (standardmäßig 5000 ms) entsprechend einstellen. . Das ist es. Jetzt macht JBoss HOT nicht nur für HTML-Dateien (JSF, XHTML usw.), sondern kümmert sich auch um POJO-Klassen (Beans usw.).

108
Yan Pak

Leider ist das nicht so einfach. Es gibt kompliziertere Dinge hinter den Kulissen in JBoss (die meisten von denen, die mit ClassLoader in Verbindung stehen), die Sie daran hindern werden, Ihre Anwendung zu entlasten.

Zum Beispiel können Sie HOT-DEPLOY nicht verwenden, wenn sich die Signaturen Ihrer Klassen ändern.

Bisher ist die Verwendung von MyEclipse IDE (einer bezahlten Verteilung von Eclipse) die einzige Sache, die ich gefunden habe und die das Hot-Deployment recht erfolgreich durchführt. Keine 100% ige Genauigkeit. Aber auf jeden Fall besser als JBoss Tools, Netbeans oder andere Eclipse-basierte Lösungen.

Ich habe nach kostenlosen Tools gesucht, um das zu erreichen, was Sie gerade von Fragen Personen in StackOverflow beschrieben haben, um einen Blick darauf zu werfen.

8

Du solltest JRebel probieren, was die Hot Deploys ziemlich gut macht. Ein bisschen teuer, aber das Geld wert. Sie haben eine Testversion.

6
Julien Kronegg

Nur meine zwei Cent:

  • Cold Bereitstellung ist die Methode zum Bereitstellen einer Anwendung, wenn Sie sie anhalten (oder den gesamten Server anhalten), die neue Version installieren und schließlich die Anwendung neu starten (oder den gesamten Server starten). Es ist für offizielle Produktionsimplementierungen geeignet, aber dies wäre während der Entwicklung sehr langsam. Vergessen Sie schnelle Entwicklung, wenn Sie dies tun.

  • Auto-Deployment ist die Möglichkeit, dass der Server regelmäßig nach einer neuen EAR/WAR erneut scannt und diese automatisch hinter den Kulissen für Sie bereitstellt oder dass die IDE (Eclipse) die gesamte Anwendung automatisch bereitstellt wenn Sie Änderungen am Quellcode vornehmen. JBoss tut dies, aber die Marketingabteilung von JBoss nennt dies irreführend "Hot Deployment". Eine automatische Bereitstellung ist im Vergleich zu einer kalten Bereitstellung nicht so langsam, im Vergleich zu einer heißen Bereitstellung jedoch sehr langsam.

  • Hot Deployment ist die Fähigkeit, im Hintergrund "wie Sie eingeben" bereitzustellen. Sie müssen nicht die gesamte Anwendung erneut bereitstellen, wenn Sie Änderungen vornehmen. Hot Deployment ONLY setzt die Änderungen bereit. Sie ändern einen Java-Quellcode und voila! es läuft schon. Sie haben nie bemerkt, dass es eingesetzt wurde. JBoss kann dies nicht, es sei denn, Sie kaufen für JRebel (oder ähnliches), aber das ist zu viel $$ für mich (ich bin billig).

Nun mein "Verkaufsgespräch": D

Was ist mit Tomcat während der Entwicklung? Kommt den ganzen Tag mit hot deploy ... kostenlos. Ich mache das die ganze Zeit während der Entwicklung und dann auf WebSphere, JBoss oder Weblogic. Verstehen Sie mich nicht falsch, diese drei eignen sich hervorragend für die Produktion, sind aber für die schnelle Entwicklung Ihrer lokalen Maschine wirklich WUNDERBAR. Wenn Sie diese drei den ganzen Tag verwenden, geht die Produktivität in der Entwicklung verloren.

Nach meiner Erfahrung habe ich WebSphere, JBoss und Weblogic für die schnelle Entwicklung eingestellt. Ich habe sie immer noch in meiner lokalen Umgebung installiert, aber nur für gelegentliche Tests, die ich möglicherweise ausführen muss. Ich bezahle nicht für JRebel, während ich erstaunliche Entwicklungsgeschwindigkeit erhalte. Habe ich schon erwähnt, dass Tomcat vollständig mit JBoss kompatibel ist?

Tomcat ist kostenlos und verfügt nicht nur über eine automatische Bereitstellung, sondern auch über eine REAL-Bereitstellung (Java-Code, JSP, JSF, XHTML), wenn Sie Eclipse eingeben (Ja, Sie lesen gut). MYKong hat eine Seite ( https://www.mkyong.com/Eclipse/how-to-configure-hot-deploy-in-Eclipse/ ) mit Details zur Einrichtung.

Hat dir mein Verkaufsgespräch gefallen? 

Prost!

2
Vladimir

Hot Deployment ist nur für Änderungen an statischen Teilen der Anwendung (jsf, xhtml usw.) stabil.

Hier ist eine funktionierende Lösung gemäß JBoss AS 7.1.1.Final :

  • Bauen Sie Ihr Projekt auf.
  • Navigieren Sie zu [JBOSS_HOME]/standalone/tmp/vfs.
  • Öffnen Sie den zuletzt geänderten Ordner mit dem Namen "deploy [some_alphanumeric_values]", d. H. "Deploy344b1c870c8edbd".
  • Navigieren Sie zu der bestimmten Ansicht, die Sie bearbeiten möchten (normalerweise ist diese im gepackten .war-Ordner enthalten) und öffnen Sie sie mit einem Texteditor (d. H. Notepad ++).
  • Nehmen Sie die gewünschten Änderungen vor und speichern Sie die Datei.
  • Aktualisieren Sie die entsprechende Seite in Ihrem Browser. Die Änderungen sollten jetzt sichtbar sein.
  • Vergessen Sie nicht, diese Änderungen in Ihre tatsächliche Entwicklungsumgebung zu kopieren, neu zu erstellen und erneut bereitzustellen.

    2
    thodorisbais

    Ich hatte das gleiche Problem, denke aber, ich habe es jetzt unter Kontrolle.

    Verwenden Sie Eclipse oder eine Befehlszeile oder?

    Wenn ich die Befehlszeile verwende, glaube ich, dass ich "Nahtreinigen" oder "Nahtentfernen" oder vielleicht sogar "Nahtneustart" gefolgt von "Nahtexplosion" durchgeführt habe. Ich habe wahrscheinlich alle auf einmal ausprobiert, und ich habe mir nie die Mühe gemacht, nachzuschauen, was jeder tut. 

    Die Idee ist, die bereitgestellte Kriegsdatei von zwei Orten zu entfernen

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

    Ich bin mir ziemlich sicher, dass "seam unseploy" den ersten und "seam clean" den zweiten entfernt.

    Wenn ich Eclipse verwende (ich verwende den kostenlosen), schalte ich zuerst "Project/Build Automatic" aus Wenn ich bereit bin zu implementieren, mache ich entweder Project/Build Project oder Project/Build All, je nachdem, was ich habe geändert. Wenn ich xhtml ändere, reicht Build Project aus. Wenn ich die Java-Quelle ändere, funktioniert Build All Works. Es ist möglich, dass diese das Gleiche tun und der Unterschied liegt in meiner Vorstellung, aber eine Kombination dieser Dinge wird für Sie funktionieren.

    Sie müssen jedoch die Ausgabe beobachten. Gelegentlich wird die App nicht bereinigt oder nicht bereitgestellt. Dies würde dazu führen, dass Ihre Änderung nicht angezeigt wird. Manchmal habe ich zuerst den Server heruntergefahren und dann das Projekt neu erstellt/bereinigt/bereitgestellt.

    Hoffe das hilft.

    TDR

    1
    april26

    Fand die Lösung auf diesem link :

    Was ist zu tun: 

    1. konfigurieren Sie das explodierte Kriegsartefakt so, dass es die Erweiterung .war hat 
    2. bereitstellen von explodierten Artefakten in WildFly oder Jboss
    3. konfigurieren Sie IntelliJ so, dass Ressourcen für Update-Aktionen aktualisiert werden

    Wenn ich eine Seite (Web) ändere, aktualisiere ich und wenn ich den Webbrowser aktualisiere: ist alles mit meinem Mod .. dabei. Ich habe Jboss für das automatische Scannen konfiguriert (nicht sicher, ob es geholfen hat).

    1
    Mircea Stanciu

    Mein Problem war eigentlich, dass das Kommandozeilen-Dienstprogramm mvn aus irgendeinem Grund die Änderungen nicht sehen würde. Ich habe die automatische Bereitstellung im Bereitstellungsscanner aktiviert, und es gab immer noch keinen Unterschied. JEDOCH ... Ich habe mit der Eclipse-Umgebung herumgespielt und da ich einen JBoss-Server für das Server-Fenster hinzugefügt hatte, stellte ich fest, dass ich die Möglichkeit hatte, Module in meinem Arbeitsbereich zu "Hinzufügen oder Entfernen ...". Nachdem das Projekt bei jeder Änderung am Code hinzugefügt wurde, wurde die Codeänderung vom Deployment Scanner erkannt, und JBoss durchlief den Zyklus der Code-Aktualisierung !!! Klappt wunderbar.

    Hier sind die notwendigen Schritte, um dies einzurichten.

    Wenn Sie dies noch nicht getan haben, fügen Sie Ihren JBoss-Server mithilfe von File-> New-> Other-> Server zu Ihrem Eclipse-Server hinzu. Führen Sie dann die Schritte zum Hinzufügen des JBoss AS 7-Servers durch. Stellen Sie sicher, dass Sie das von Ihnen verwendete Verzeichnis finden.

    Nach dem Hinzufügen sehen Sie am unteren Rand von Eclipse auf die Registerkarte "Server". Sie sollten Ihren JBoss-Server sehen. Markieren Sie es und suchen Sie nach "Hinzufügen oder Entfernen ...". Von dort sollten Sie Ihr Projekt sehen. 

    Nehmen Sie nach dem Hinzufügen eine kleine Änderung an Ihrem Code vor und sehen Sie zu, wie JBoss für Sie in der Stadt installiert wird.

    0
    Perry

    Ich habe ein Projekt mit Eclipse und Wildfly entwickelt, und die explodierte EAR-Datei wurde aufgrund der Bereitstellung aller Drittanbieter-Bibliotheken, die ich in der Anwendung benötigte, groß. Ich richtete die Bereitstellung auf mein Maven-Repository, bei dem ich denke, dass die Gläser jedes Mal neu kopiert wurden. Die erneute Bereitstellung der Anwendung, wenn ich den Java-Code in der Service-Schicht geändert habe, wurde zu einem Albtraum. 

    Nachdem Sie sich an den Hotswap-Agenten gewandt haben, hat dies sehr geholfen, soweit Änderungen am EJB-Code vorgenommen wurden, ohne die Anwendung erneut bereitzustellen.

    Ich habe jedoch kürzlich ein Upgrade auf Wildfly 10, Java 8 und JBoss Developer Studio 10 durchgeführt, und während dieses Vorgangs habe ich mir die Zeit genommen, alle Anwendungsjars von Drittanbietern zu verschieben, z. primefaces in Wildfly-Module und ich entfernte mein Maven-Repo aus meiner Deployment-Konfiguration. Die erneute Bereitstellung der gesamten Anwendung, die über Eclipse ziemlich groß ist, dauert nur wenige Sekunden und ist viel schneller als zuvor. Ich habe nicht einmal das Bedürfnis, Hotswap zu installieren, und möchte es jetzt sowieso nicht riskieren. 

    Wenn Sie also unter Eclipse mit Wildfly bauen, halten Sie die Anwendung von Drittanbieter-Libs mit Wildfly-Modulen frei, und Sie sind viel besser dran.

    0
    Shaun O'Hagan

    Falls Sie mit Eclipse IDE arbeiten, gibt es ein kostenloses Plugin Manik-Hotdeploy .

    Mit diesem Plugin können Sie Ihren Eclipse-Arbeitsbereich mit Ihrem Wildfly-Bereitstellungsordner verbinden. Nach einem Maven-Build wird Ihr Artefakt (z. B. Krieg oder Ohr) automatisch in den Bereitstellungsordner Ihres Servers verschoben. Auch Webinhaltsdateien (z. B. .xhtml .jsf ...) werden heiß bereitgestellt. 

    Das Plugin läuft für Wildfly, Glassfish und Payara. 

    Lesen Sie den Abschnitt JBoss/Wildfly Support für weitere Details. 

    0
    Ralph

    Lösung für Netbeans 8.02 und 8.1 IDE und JBOSS EAP 6.4:

    1. Fügen Sie auf der Registerkarte "Services" von Netbeans dem Knoten "Server" einen JBOSS-Server hinzu.
    2. Wenn Sie MAVEN verwenden, kompiliert netbeans Dateien und kopiert Dateien in das Verzeichnis ./target. Sie müssen einen symbolischen Link von.\Target zu JBOSS_HOME\standalone\deployments erstellen. Unter Windows wäre ein Beispielbefehl

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

      Das Obige erstellt einen symbolischen Link von %JBOSS_HOME%\standalone\deployments\MyWebApplication.war zu \target\MyWebApplication-1.0.0. Hier überträgt maven alle Dateien nach der Kompilierung oder nach einem Jsp-, HTML- oder anderen Dateiänderungen.

    3. Denken Sie zuletzt daran, eine CentralManagement.war.dodeploy-Datei in% JBOSS_HOME%\standalone\deployments zu erstellen. Diese Datei weist JBOSS an, die WAR-Datei als Webanwendung bereitzustellen 

    0
    chrisl08

    Stellen Sie die App als explodierten Ordner (Projekt.war-Ordner) bereit und fügen Sie Ihrer web.xml hinzu:

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

    Aktualisieren Sie die Datei "web.xml" bei jeder Bereitstellung (leere Zeile anfügen):

    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

    Starten Sie den Server im Debug-Modus, und es werden Änderungen innerhalb von Methoden verfolgt. Andere Änderungen Sie werden aufgefordert, das Modul neu zu starten.

    0

    Ich verwende JBoss AS 7.1.1.Final . Das Hinzufügen des folgenden Code-Snippets in meiner web.xml half mir, die Jsp-Dateien im Handumdrehen zu ändern:

    <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>
    

    Hoffe das hilft.!!

    0
    sidhantgupta

    Bei Eclipse Mars mit WildFly 11 funktionierte dies für mich. Doppelklicken Sie unter Server auf WildFly-Server, um die Konfigurationsseite zu öffnen. Wählen Sie auf der Registerkarte Übersicht -> Veröffentlichen die Option "Automatisch veröffentlichen, wenn sich Ressourcen ändern", und legen Sie das Intervall auf 1 fest. Deaktivieren Sie dann auf der Registerkarte Übersicht -> Verhalten für das Neuladen von Anwendungen das Standardmuster und setzen Sie das Muster auf \.jar$|\.class$. Deaktivieren Sie auf der Registerkarte Bereitstellung das Kontrollkästchen Projekt als komprimierte Archive bereitstellen. Hoffe das hilft.

    0
    jpllosa