web-dev-qa-db-ja.com

GlassfishV3にデプロイするための最良の方法

Webプロジェクト(またはearプロジェクト)をリモートサーバーとGlassfishにデプロイするための最良の方法は何ですか?

Netbeansがこの目的のために作成するant-deploy.xmlとbuild-impl.xmlを使用するにはどうすればよいですか?

Autodeployフォルダーを使用し、Sun-resources.xmlをGFまたはantと...を使用して個別に追加します。

少しずつ説明していただけませんか?

よろしく

18
Nav

管理コンソールから手動でアプリをデプロイできます。

または、asadminコマンドを使用することもできます。最も単純なリモート展開は次のようになります。

asadmin deploy --user=<adminuser> --Host=<hostname> <path to jar/war/ear>

そして、これはShellスクリプトであるか、AntまたはMavenでラップされている可能性があります。

または、より特殊なツール( Ant Taskmaven glassfishプラグインmaven asadminプラグインCargo )を使用することもできます。 =)。

それはすべてあなたの文脈に依存します、単一の答えはありません、そして多くの可能性があります。探しているものがわからない場合は、NetBeansによって作成されたAntビルドスクリプトを使用してください。

24
Pascal Thivent

1.最初に短い答え

次の組み合わせを使用します。

  1. maven、構築およびデプロイプロセス全体を推進する(profilesおよびresourceフィルタリングはあなたにとって非常に価値のある機能になります)
  2. Shellasadminコマンドを使用するスクリプト(glassfish mavenプラグインの1つに代わるもの)
  3. jenkins定期的に、または新しいコードがバージョン管理システムにプッシュされた結果として、Mavenビルドをトリガーします。
  4. Netbeans Glassfishとmavenの両方との優れた統合があり、私のお気に入りですJava EE IDE:

2.さて、いくつかの背景...

この質問に答えるには、より広い視点を取り、開発/展開のライフサイクル全体を検討することが役立ちます。 Glassfishでの.warまたは.earアーカイブの実際のデプロイは、サイクルの1つのステップにすぎません。

本当に効果的になりたい場合は、ソフトウェアアプリケーションの構築と展開を自動化するためのツールとプラクティスの組み合わせを検討する必要があります。これは、開発者マシン、継続的インテグレーションマシン、QAマシン、および本番マシンを備えた「現実の」環境で作業する場合に特に当てはまります。

これらの項目については、次の段落で少し詳しく説明します。特に、今日、mavenによって駆動されるカスタムシェルスクリプトが、コミュニティで利用可能なglassfishmavenプラグインよりも優れていると思う理由を説明します。

3.Mavenを使用したビルド管理

Java開発を行う多くの人にとって、Mavenはよく知られたツールです。他の人にとっては、ここに非常に簡単な紹介があります。Mavenの目標はソフトウェアの構築を自動化することです。アーティファクト。これはフレームワーク(オブジェクト指向フレームワークと同じ意味で)であり、次のことを意味します。

  1. ソフトウェアを構築、パッケージ化、テストするための標準的な方法を定義します
  2. この標準的な方法でカスタム動作をアタッチするための拡張ポイントを提供します

本質的に、Mavenを使用するときは、構築しているソフトウェア成果物の種類を記述します(.jar、.war、Androidアプリなど)。デフォルトでは、mavenは特定の場所でソースファイル、テストファイル、およびリソースを見つけることを想定しています。デフォルトでは、mavenは、ソフトウェアのビルドには、コンパイル、ユニットテスト、パッケージング、デプロイ、統合テスト、ドキュメント生成などのさまざまなフェーズを経る必要があることを認識しています。 。

Mavenがあなたのために行うもう1つのこと(そしてこれがツールを使用する最初の理由であることが多い)は、依存関係の管理です。 Mavenは、リポジトリー(パブリック、グローバル・リポジトリー、プライベート・リポジトリーの両方があります)を通じて利用可能になるライブラリー(名前とバージョン)を識別する方法を指定します。 Mavenでは、「magiglibバージョン1.2.2に依存しています」などを指定します。 Mavenにビルドを依頼すると、libが自動的にフェッチされ、ローカルリポジトリに保存され、構築とパッケージ化に使用されます。 .jarファイルの手動転送を処理する必要はありません。同じライブラリの異なるバージョンが異なる開発者によって、または異なる段階で使用されるため、バグが発生するリスクはありません。

最後になりましたが、mavenは、ターゲットのデプロイメントマシンに応じて、ソフトウェアの構造をカスタマイズする機能を提供します。次のユースケースについて考えてください。

  • 開発中は、開発者ごとにインストールが異なる可能性があると考えてください(mysqlが同じTCPポートでリッスンしない、glassfishが同じディレクトリにインストールされない、パスワードが異なるなど)) 。

  • 開発マシンは、QAや本番環境とは異なる継続的インテグレーション環境とは明らかに異なります(ここでも、ネットワーキング、ファイルシステム、資格情報について考えてみてください)。

Mavenは、変数プロファイル、およびリソースフィルタリングの組み合わせでこれらのユースケースをサポートします。

  • 変数は、他の種類のプログラミング環境と同じように変数です。 Mavenを使用する場合は、XML構成ファイル(pom.xml)を記述し、その中で変数を使用できます。これにより、ビルドシステムが構成可能で動的になります。 mysqlがリッスンするポート、またはglassfishがインストールされているディレクトリを変数として定義できます。
  • profileは、Maven変数のセットに値を与える方法です。通常、すべての開発者がプロ​​ファイルを持ち、すべての環境(継続的インテグレーションから本番環境まで)がプロファイルを持ちます。
  • リソースフィルタリングソースファイル、リソースファイル、および構成ファイル内のMaven変数を参照できます。たとえば、Javaファイルでは、次の文字列$ {myvar}を埋め込むことができます。リソースフィルタリングを行うようにmavenを構成すると、$ {myvar}が次の値に置き換えられます。 Maven myvar変数(現在のプロファイルで定義されている可能性があります)。

Mavenは非常に強力なツールであるため、学習曲線があります。 Netbeansを使用している場合は、数回クリックするだけでMaven駆動型プロジェクトを実際に作成でき、基本機能(依存関係管理など)を利用できます。高度なトピックについては、非常に優れたドキュメントが利用可能です。ここではこれ以上詳しくは説明しません。

4. glassfishプラグイン...かどうか?

Mavenの価値を理解し、それを使用することを決定したら、次の質問は、それをどのように使用できるかです。warまたは.earアーカイブをGlassfishに実際にデプロイする(ローカルまたはリモート) 。ここで、いくつかのオプションがあり、何年にもわたってかなり多くのことを学びました(ここ数年、GlassfishでMavenを使用しています)。

最初にできることは、glassfishmavenプラグインの1つを使用することです。利用可能なさまざまなプラグインがあります。それらはまったく異なる機能と異なるレベルのサポートを持っています。最も強力なプラグインは実際にはサポートされておらず、Glassfish3ではそのままでは機能しません。プラグインは、アーカイブをGlassfishにデプロイするだけでなく、リソース(jdbcプール、jmsキューなど)を作成することも可能にしたため、興味深いものでした。また、Glassfishドメインをその場で作成することも可能になりました(統合テストを実行し、そのために新しいドメインが使用されていることを確認するのに非常に便利です)。とにかく、新しいプラグイン(製品ドキュメントに記載されています)はそれほど強力ではなく、純粋にデプロイメントタスクに焦点を合わせています。

私たちが作成し、長年にわたって進化させてきたビルドシステムでは、glassfish mavenプラグインをプロファイルおよびリソースフィルタリングと組み合わせることで、多くの制御と柔軟性を実現することができました。ソリューションは機能し、堅実ですが、非常に複雑です(pom.xmlとsettings.xmlは大幅に成長し、重くなっています)。

つまり、新しいビルドシステムを最初からセットアップする場合は、おそらく少し異なる方法で行うでしょう。 Glassfish Mavenプラグインのコードを見ると、Glassfishが提供するasadminコマンドラインツールのラッパーであることがわかります(これは、asadminのパラメーターと動作が変更されたためです)。あるGlassfishバージョンから別のバージョンへのMavenプラグインの破損)。

5.今後の方向性

私がすることは:

  • シェルスクリプトのセットを作成する Glassfishを作成するドメイン、作成するリソース(jdbc、jmsなど)、デプロイ = .warおよび.ear。スクリプトはasadminを使用してGlassfishと対話します(asadminをローカルリモートの両方で使用できます)。

  • これらのスクリプトにmaven変数を埋め込み、リソースフィルタリングを使用して動的に作成するスクリプトの環境固有のバージョン;

  • maven execプラグインを使用して、Mavenビルドサイクルのさまざまな段階(統合テスト、実行、カスタム目標など)でスクリプトを実行します。

17
Olivier Liechti

Antタスクを使用してwarファイルをglassfish-V3にデプロイできます。

Build.xmlコンテンツ;

<target name="deploy"
    description="deploys application to glassfish">
    <exec failonerror="true" executable="cmd">
     <arg value="/c" />
     <arg value="asadmin --user ${gfUser} --passwordfile ${gfPassFile} --Host ${Host} deploy build/${war}" />
    </exec>
</target>
10
Yusuf K.

アプリをデプロイするためのよりOSに依存しない方法:

<presetdef name="asadmin">
  <Java jar="${glassfish.home}/modules/admin-cli.jar" fork="true" jvm="${Java.home}/bin/Java" >
    <arg line="--port ${glassfish.admin.port}" />
  </Java>
</presetdef>
<target name="deploy">
  <asadmin failonerror="true">
    <arg value="deploy" />
    <arg value="--force=true" />
    <arg value="${ear.file}" />
  </asadmin>
</target>

asadminプリセットを任意のasadminタスクで使用できます...

5
dentra

シナリオに応じて、いくつかの方法がうまく機能することがわかりました。

実行中のGlassfish3のファイルシステムにアクセスできる場合のデプロイメント。

Glassfishを使用すると、実行中のGlassfishのファイルの「内部」の適切な場所に配置されたリソースを自動的にホットデプロイできます。 Glassfish3.1.2.2のデフォルトの場所はglassfish-3.1.2.2/glassfish/domains/domain1/autodeply。以前、Windowsではファイルが更新されていることを検出しないことがあるため、最初に削除して、再度デプロイする前にアンデプロイを待つ必要がある場合があります。

リモートGlassfish3への手動展開

管理者ページ(デフォルトのポート4848)には、ユーザーがアプリケーションをアップロードおよび展開、無効化および有効化、および展開解除できる展開セクションが含まれています。これは、手動メンテナンスで最も堅牢であることがわかったものです。

また、基盤となるサーバーへのフルアクセスも必要ありません。

リモートGlassfish3への自動展開

貨物プロジェクトでは、適切に構成されたGlasfishインスタンスへの自動展開が可能です。

戦争の展開を説明するpom.xmlを使用して実行される次のコマンドは、(2012-10-17の時点で)現在のプロジェクトが展開されているGlassfishをダウンロードして実行します。

mvn clean verify -Dcargo.maven.containerId=glassfish3x -Dcargo.maven.containerUrl=http://dlc.Sun.com.edgesuite.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-web.Zip  org.codehaus.cargo:cargo-maven2-plugin:run

(pom.xmlの小さなスニペットとともに、Glassfishの場所に関する追加の詳細を貨物に伝えます)

Jetty:runのようなMaven開発ビルドの一部

MavenのサポートはGlassfish3で良好です。主な利点は、Glassfishを手動でダウンロードして解凍し、起動する必要がないことです。Mavenはすべてを自動的に実行できます。

手順については、 http://embedded-glassfish.Java.net/ を参照してください。

私はこれを簡単に使用しただけですが、IDE中心のソリューションの優れた代替手段のようです。

@Pascal Thiventからの回答にポイントを追加します(同様の質問を持つ他の人に役立つことを願っています)

1)マウスをクリックするだけで、Netbeansを使用してアプリケーションを開始、停止、デプロイできます。

2)Eclipse、Netbeans、またはお気に入りのIDEでの作業に加えて

2.1)Windows開発環境の場合:開発中はasadminなどのコマンドラインツールから始めます。 2.2)Linux開発環境の場合:シェルスクリプトを使用して、デプロイメントプロセスを自動化します。

2.3)開発環境で自動デプロイとNetbeansリモートデプロイメントを使用します。 2.4)スクリプトまたはコマンドラインのリモート展開を使用する必要性に基づく

3)プロジェクトのニーズと関心に基づいて「ビルドスクリプト」を開発するなどの最も適切なアプローチや、組織プロセスなどの他の考慮事項を考え出します。

MavenやAntがなければ、必要なjarを手動で追加するだけでも悪い考えではありません。 jarを追加した後、管理コンソールからデプロイするか、ビルドスクリプトを使用します。

MavenはJavaEEjarで失敗することがありますが、SOには解決策があります。既存のサンプルプロジェクトと組織プロセスに基づいて、Mavenを使用することがあります。また、Netbeans Java EEプロジェクトにデフォルトで付属しているantを使用します。

0
Sree Rama