1

私は、Web アプリケーションと Java コンソール アプリケーションで使用することを目的とした小さな Java ライブラリを作成しています。

CDI やその他の JavaEE 6 機能を活用し、ライブラリの 2 つのバージョン (Java EE と Java SE) を維持する必要がないようにするために、コンソール アプリケーションに openejb (組み込み) を使用したいと考えています。そこで、Eclipse で Maven プロジェクトを作成し、openejb アーティファクトを追加しました。

どういうわけか、インジェクションやその他の JavaEE 機能を解決するコンソール プログラムで openejb-container を使用する方法がわかりません。

2 つの非常に単純なクラスがあるとします。

@Stateless
Class A {

    @Inject
    public B member;

    public A() {};

}

@Stateless
Class B {

    public B() {};

    public String getString () {
        return "Hello";

    }

}

では、組み込みの openejb を使用して A のメンバーをインスタンス化する main() メソッドを使用して、プレーンな古い Java クラスを取得するにはどうすればよいでしょうか。- 次のような方法で:

public class TestOpenEJB {

    public static void main(String[] args) {

        Class A a = new A(); /*wrong of couse*/

        System.out.println( a.member.getString() );

    }
}

この単純な例の実用的な解決策は役に立ちます。

最後に、ここでの私の目的は、組み込みの javaEE コンテナーを内部で使用するライブラリー用の Java SE API を提供することです。

どうもありがとう!

4

1 に答える 1

0

私のコメントに加えて、あなたの問題は次の方法で解決できると思います:

次に、EJB を使用してライブラリの動作をモデル化します (コード例を参照)。コンテナーはプーリング、並列アクセス、トランザクションなどを処理するため、これは良いアプローチです。

次に、Web アプリケーション (同じコンテナー内にあると仮定) は、これらの EJB を直接使用できます。

また、コンソール アプリケーション経由でアクセスするには、アプリケーション クライアント コンテナー内で実行するか (コンテナーをアプリケーションに埋め込むよりも望ましい方法です)、ビジネス ロジックを別の方法で公開することもできます (たとえば、REST を介して) スタンドアロン クライアント アプリケーションで使用します。

PS: ビジネス ロジックを DI メカニズムと統合テストするには、Arquillianを使用します。

于 2013-04-10T08:48:03.570 に答える