2011-07-11 4 views
0

私はappclientスクリプトを使用して呼び出すglassfish 3.1にEJB付きの耳を配置しています。 EJBには、別のライブラリで定義されたモデルオブジェクトをパラメータとして持つメソッドがあります。は、appclient jarのモデルライブラリを含んでいます

私がappclientスクリプトを使いたいのであれば、mainクラスにはEJBを呼び出すmainメソッドがあります。 これはまた、ガラス魚にも配備された別の瓶に入れられます。

モデルオブジェクトは別のライブラリに配置されているため、クライアントjarではなくEJBでも必要です。 だから私は何とかクライアントジャーでそれを参照する必要があります。

クライアントのjarはjar(duh)なので、他のjarを追加することはできません。 Java EE 6のドキュメントでは、libを使用して耳を作成する必要があると言いますが、もしそうすれば展開することはできません。少なくとも耳にはejbまたはWebモジュールが必要です。

私が見つけた解決策は、アセンブリプラグイン/ jar-with-dependenciesを使用しています。このプラグインは、すべての依存関係のすべてのクラスを含む新しいjarファイルを作成します。

この解決策は機能しますが、これが必要なのか分からないので、これが道にあるかどうかわかりません。 EJBは通常、モデルオブジェクトをパラメータとして持つため、このような状況は非常に起こります。

私の質問は、アプリクライアントjarとejb jarの間で共有ライブラリを参照するようにglassfishに指示する方法です。

答えて

0

私はこれを行う方法は、このようなものです:

  • モデルで区切りMavenプロジェクト。私の場合、これはJPAとJAX-Bアノテーション、いくつかの定数などを含むシンプルなPOJOです。Mavenでは<packaging>bundle</packaging>を指定してOSGiバンドルと定義します。私はこのプロジェクトをMyAppInterfaceと呼んでいます。
  • モデルを処理する必要がある他の要素のためにMavenプロジェクトを分割します。私の場合、EJB、データベースファサード、RESTサーブレットを持つJava EEアプリケーションが1つあります。私はテストだけを行う統合テストプロジェクトを持っています。 GWTアプリケーション。等...これらのプロジェクトでは、私は、モデルへの依存関係を指定します。

    <dependency> 
        <groupId>com.skalio</groupId> 
        <artifactId>MyAppInterface</artifactId> 
        <version>1.0-SNAPSHOT</version> 
    </dependency> 
    
  • GlassfishのにMyAppInterfaceを展開、私は次の構文を使用します。

asadmin deploy --type osgi --name MyAppInterface /path/to/MyAppInterface-1.0-SNAPSHOT.jar

  • IをGlassFishのクラスパス上にモデルを配置していることを理解してください。これはmysql-connectorと同様、OSGi形式のみです。

これらのプロジェクトはすべて、内部のMavenリポジトリにアーチファクトを展開するセントラルジェンキンCIサーバによって構築されます。次に、各プロジェクトのpom.xmlに内部リポジトリを追加します。その結果、NetBeans/Eclipseでコードがチェックアウトされていなくても、誰もが最新の安定版MyAppInterfaceで自動的に動作します。

もっと例が必要な場合は教えてください。

+0

私もmavenを使用しています。私は1)インタフェースクラス、2)データベース用のjpaプロジェクト、3)データベース用の別のjpaプロジェクト、および4)他のプロジェクトを使用するEJBを持つプロジェクトを分離します。最後に、jpaクラス(モデル)を使用し、リモートインタフェースを使用してEJBを呼び出すappclientプロジェクトがあります。 osgi typeオプションを使用してそれらをデプロイできますが、appclientを実行するとエラーが発生します。 osgi Mavenプラグインを使用していますか?はいの場合は、pomの例を投稿できますか? – thehpi

+0

'osgi maven plugin'がありません。私は実際に ''タグを指定しました... – Hank

+0

は、私にエラーが出ているので奇妙です: 'パッケージングのライフサイクルマッピングを見つけることができません。コンポーネント・リポジトリ:org.apache.maven.lifecycle.mapping.LifecycleMappingbundle'にコンポーネント記述子が見つかりません。あなたはポンを掲示できますか? – thehpi

関連する問題