web-dev-qa-db-ja.com

JBossでのホットデプロイ-JBossに変更を「見せる」方法

開発中にローカルJBossインストールに何度もデプロイするJava EEアプリケーションを開発しています。アプリケーションを直接[JBOSS]/serverにホットデプロイすることでビルドをスピードアップしたいです/ default/deploy/myApp

動作しているように見えますが、ハードデプロイとJBossが新しいクラスの使用を開始するまでの間に多少arbitrary意的な遅延があるようです。私はJBossにはあまり詳しくありませんが、JBossはクラスをキャッシュし、これが問題の原因だと思います。

私は正しいですか?そうであれば、JBossをキャッシュにフラッシュさせるにはどうすればよいですか?

53
Jacob Hansson

バンドルにも同じ問題がありました:(Eclipse IDE + JBossサーバーアダプター)+ JBoss AS 7.0.1(コミュニティプロジェクト)。

私のsolutionは非常に単純です-JBoss管理パネル(デフォルトではlocalhost:9990)に移動し、プロファイル設定でCore-Deployment Scannersを開きます。 Autodeploy-Explodedをオンにし(trueに設定)、希望に応じてスキャナー時間(デフォルトでは5000ミリ秒)を適切に設定できます(プロジェクトに変更を加えたときにEclipseでより高速な増分発行を行うために2000に設定します) 。それでおしまい。現在、JBossはHOTをHTML(JSF、XHTMLなど)ファイルだけでなく、POJOクラス(beansなど)ファイルにも対応しています。

109
Yan Pak

残念ながら、それは簡単ではありません。 JBossには、アプリケーションのHOT-DEPLOYINGを妨げる複雑なもの(ほとんどがClassLoader関連)が背後にあります。

たとえば、クラスのシグネチャの一部が変更された場合、HOT-DEPLOYを実行できなくなります。

これまでのところ、 MyEclipse IDE (Eclipseの有料ディストリビューション)を使用するだけで、ホットデプロイが非常にうまくいくことがわかりました。ただし、100%の精度ではありません。しかし、JBoss Tools、Netbeans、または他のEclipseベースのソリューションよりも確かに優れています。

StackOverflowの asking の人たちが今見たものを実現するための無料のツールを探しています。

8

JRebel を試す必要があります。これは、ホットデプロイをかなりうまく行います。少し高価ですが、お金の価値があります。彼らは試用版を持っています。

6
Julien Kronegg

ちょうど私の2セント:

  • コールドデプロイメントは、アプリケーションを停止する(またはサーバー全体を停止する)ときにアプリケーションをデプロイし、新しいバージョンをインストールして、最後に再起動する方法ですアプリケーション(またはサーバー全体を起動)。公式の本番展開に適していますが、開発中にこれを行うのは恐ろしく遅くなります。これを行っている場合、迅速な開発を忘れてください。

  • 自動展開は、サーバーが定期的に新しいEAR/WARを再スキャンし、自動的に舞台裏で自動的に展開するか、またはIDE(Eclipse)ソースコードに変更を加えるとアプリケーション全体を自動的にデプロイします。JBossはこれを行いますが、JBossのマーケティング部門はこれを誤解を招くように "hot deployment」。自動展開は、コールド展開に比べて遅くはありませんが、ホット展開に比べて本当に遅いです。

  • ホットデプロイメントは、「入力するにつれて」という舞台裏でデプロイする機能です。変更を加えるときにアプリケーション全体を再デプロイする必要はありません。ホットデプロイ[〜#〜] only [〜#〜]は変更をデプロイします。 Javaソースコードを変更し、出来上がりました!既に実行されています。それがデプロイされていることに気付いたことはありません。JBossはこれを行うことができません。私にとっては$$(安いです)。

「私の売り上げ」:D

開発中にTomcatを使用するのはどうですか? hot deploymentが1日中無料で...開発中は常にそれを行ってから、WebSphere、JBoss、またはWeblogicにデプロイします。誤解しないでください。これらの3つは生産には最適ですが、ローカルマシンでの迅速な開発には非常に適しています。これら3つを終日使用すると、開発の生産性が低下します。

私の経験では、迅速な開発のためにWebSphere、JBoss、およびWeblogicの使用をやめました。ただし、ローカル環境にはまだインストールされていますが、実行する必要があるのはときどきのテストのみです。素晴らしい開発速度が得られる間、私はJRebelにお金を払っていません。 TomcatはJBossと完全に互換性があると言いましたか?

Tomcatは無料であり、自動デプロイメントだけでなく、Eclipseに入力するときに実際のホットデプロイメント(Javaコード、JSP、JSF、XHTML)もあります(はい、よく読みます))。 MYKongには、設定方法の詳細が記載されたページ( https://www.mkyong.com/Eclipse/how-to-configure-hot-deploy-in-Eclipse/ )があります。

私の売り込みが好きでしたか?

乾杯!

2
Vladimir

ホットデプロイメントは、アプリケーションの静的な部分(jsf、xhtmlなど)の変更に対してのみ安定しています。

JBoss AS 7.1.1.Finalによると、有効なソリューションは次のとおりです。

  • プロジェクトをビルドします。
  • [JBOSS_HOME]/standalone/tmp/vfs。に移動します。
    • 「deployment [some_alphanumeric_values]」という名前の最も最近変更されたフォルダー、つまり「deployment344b1c870c8edbd」を開きます。
    • 編集する特定のビューに移動します(通常、これはパッケージ化された.warフォルダ)を開き、テキストエディタ(Notepad ++)で開きます。
    • 必要な変更を行い、ファイルを保存します。
    • ブラウザの各ページを更新します。これで変更が表示されるはずです。
    • 終了したら、これらの変更を実際の開発環境にコピーし、再構築して再デプロイすることを忘れないでください。

  • 2
    thodorisbais

    私は同じ問題を抱えていましたが、私は今それを制御していると思います。

    Eclipseまたはコマンドラインを使用していますか?

    コマンドラインを使用するとき、「seam clean」または「seam undeploy」、あるいは「seam restart」に続いて「seam explode」を実行したと思います。私はおそらく、これらのすべてを一度に試したことがあります。

    アイデアは、デプロイされたwarファイルを2つの場所から削除することです

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

    「seam undeploy」が1番目を削除し、「seam clean」が2番目を削除すると確信しています。

    Eclipseを使用する場合(無料のEclipseを使用する場合)、最初に「Project/Build Automatically」をオフにしてから、デプロイの準備ができたら、変更内容に応じてProject/Build ProjectまたはProject/Build Allを実行します。 xhtmlを変更すると、プロジェクトのビルドで十分です。 Java source Build All works。を変更すると、これらは同じことをする可能性があり、違いは私の想像にありますが、このようなもののいくつかの組み合わせがうまくいきます。

    ただし、出力を監視する必要があります。時々、アプリはクリーンアップまたはアンデプロイされません。これにより、変更が表示されなくなります。ときどきサーバーをシャットダウンしてから、プロジェクトを再構築/クリーン/デプロイします。

    お役に立てれば。

    TDR

    1
    april26

    これで解決策を見つけました link

    何をすべきか:

    1. 展開された戦争アーティファクトが拡張子.warを持つように設定します
    2. 爆発したアーティファクトをWildFlyまたはJbossにデプロイする
    3. 更新アクションでリソースを更新するようにIntelliJを構成する

    ページ(Web)を変更すると、更新し、Webブラウザーを更新すると、すべてがmodに含まれます。 Jbossを自動スキャン用に設定しました(確かに助けになったとは限りません)

    1
    Mircea Stanciu

    実際、私の問題は、コマンドラインのmvnユーティリティが何らかの理由で変更を認識しないことでした。展開スキャナーで自動展開をオンにしたが、まだ違いはありませんでした。しかし...私はEclipse環境をいじっていましたが、サーバーウィンドウにJBossサーバーを追加していたため、ワークスペースでモジュールを「追加または削除」することができることがわかりました。コードに変更を加えるたびにプロジェクトが追加されると、コードの変更がDeployment Scannerによって検出され、JBossはコードの更新サイクルを実行しました!!!魔法のように機能します。

    これを設定するために必要な手順は次のとおりです。

    まだ行っていない場合は、File-> New-> Other-> Serverを使用してJBossサーバーをEclipseに追加してから、JBoss AS 7サーバーを追加する動作を実行します。使用しているディレクトリを見つけてください。

    追加したら、Eclipseの下部にある[サーバー]タブを見下ろします。 JBossサーバーが表示されます。それを強調表示して、「追加または削除...」を探します。そこからプロジェクトが表示されます。

    追加したら、コードに小さな変更を加えて、JBossが町にホットデプロイするのを見てください。

    0
    Perry

    EclipseとWildflyを使用してプロジェクトを開発してきましたが、アプリケーションで必要なすべてのサードパーティライブラリをデプロイしたため、展開されたEARファイルが大きくなりました。私は、Mavenリポジトリーにデプロイメントを向けていましたが、そのたびにjarを再コピーしていました。したがって、サービスレイヤーのコードをJavaに変更したときにアプリケーションを再デプロイすると、悪夢に変わりました。

    その後、Hotswapエージェントを使用することで、アプリケーションを再デプロイせずにEJBコードの変更を見る限り、これは非常に役立ちました。

    ただし、最近Wildfly 10、Java 8およびJBoss Developer Studio 10にアップグレードしました。そのプロセス中に、プライムフェイスなどのすべてのサードパーティアプリケーションjarをWildflyモジュールに移動するのに時間がかかり、デプロイメント構成からのMavenリポジトリー。Eclipseを介して非常に大きなアプリケーション全体を再デプロイすると、ほんの数秒で、以前よりもはるかに高速になります。Hotswapをインストールする必要はありません。とにかくそれを危険にさらすために。

    したがって、EclipseでWildflyを使用してビルドしている場合は、Wildflyモジュールを使用して、サードパーティのライブラリをアプリケーションから排除してください。

    0
    Shaun O'Hagan

    Eclipseで作業している場合IDE無料のプラグインがあります Manik-Hotdeploy

    このプラグインを使用すると、Eclipseワークスペースをwildflyデプロイメントフォルダーに接続できます。 Mavenのビルド後、アーティファクト(例:warまたはear)がサーバーのデプロイメントフォルダーに自動的にプッシュされます。また、Webコンテンツファイル(例:.xhtml .jsf ...)はホットデプロイされます。

    プラグインは、wildfly、glassfish、payaraで実行されます。

    詳細については、セクション JBoss/Wildfly Support を参照してください。

    0
    Ralph

    Netbeans 8.02および8.1のソリューションIDEおよびJBOSS EAP 6.4:

    1. Netbeansの[サービス]タブから、JBOSSサーバーを「サーバー」ノードに追加します。
    2. MAVENを使用している場合、netbeansはファイルをコンパイルし、mavenは./targetディレクトリにファイルをコピーします。 。\ targetからJBOSS_HOME\standalone\deploymentsへのシンボリックリンクを作成する必要があります。 Windowsでは、コマンドの例は次のようになります

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

      上記は、%JBOSS_HOME%\standalone\deployments\MyWebApplication.warから\target\MyWebApplication-1.0.0へのシンボリックリンクを作成します。mavenは、コンパイル後、またはjsp、htmlまたはその他のファイルの変更後にすべてのファイルを転送します。

    3. 最後に行うことは、%JBOSS_HOME%\ standalone\deploymentsにCentralManagement.war.dodeployファイルを作成することです。このファイルは、Webアプリケーションとしてwar「ファイル」をデプロイするようJBOSSに指示します

    0
    chrisl08

    アプリを展開(project.warフォルダー)としてデプロイし、web.xmlに追加します。

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

    デプロイするたびにweb.xmlを更新します(空行を追加):

    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

    サーバーをデバッグモードで起動すると、メソッド内の変更が追跡されます。その他の変更モジュールの再起動を求められます。

    0

    JBoss AS 7.1.1.Finalを使用しています。 web.xmlに次のコードスニペットを追加すると、その場でjspファイルを変更できました。

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

    お役に立てれば。!!

    0
    sidhantgupta