0

サービスレイヤーの一部としてGUICEフレームワークを使用しています。現在、JAX-WSWebサービスを構築するための要件が​​あります。JDK 1.6JAX-WSAPIを使用してWebサービスを構築しました。しかし現在、WebサービスはGuiceで管理されていないため、GUICEリソースを使用することはできません。

Guice3.0を使用しています。これをどのように達成しますか?

次のリンク http://jax-ws-commons.java.net/guice/を試しましたが、うまくいきませんでした。最終的に、これは一部のフォーラムでGuice2.0とのみ互換性があることがわかりました。

試したもう1つのアプローチは http://developian.blogspot.in/2008/11/google-guice-and-jax-ws.htmlでしたが、これは内部的にアクセスが制限されているSun APIの一部を使用し始めるため、私はしません使いたい...

さて、他の解決策の最良のアプローチまたは代替案は何ですか。

ご意見をお聞かせください。

ありがとう

4

2 に答える 2

0

独自のサーブレットを作成し、loadBus()メソッドでサービスをバインドしようとしましたか?ソリューションの説明は次のとおりです 。JAX-RS+JAX-WSを使用したCXFとGoogleGuice

于 2012-11-16T14:24:34.883 に答える
0

さて、あなたはguiceインジェクターを保持するEJBを注入することができます。つまり、Java EEを使用する場合は、EJBを使用できます。そのEJBはシングルトンである必要があり、インジェクターを保持しているだけを処理します。何かを注入したい場合、これはインジェクターを取得するBeanです。もちろん、Guice.createInjector()を介して初めて呼び出すときに、インジェクターを作成する必要があります。インジェクターを使用する場合、インジェクターのメソッドgetInstance(Class clazz)を使用して他のクラスを注入しても問題ありません。インジェクションを使用するクラスを初めて呼び出すときは、Webサービスでのみインジェクターにアクセスする必要があります。

それ以外の場合は、Webサービス内で静的インジェクターを使用できます。多分それはそれほどきれいではないでしょうが、それはうまくいくでしょう。これには、コンストラクター内にインジェクターを作成する必要があります。たとえば、抽象サービスクラスでは、すべてのWebサービスが依存しています。その後、サービスでインジェクターにアクセスし、上記と同じようにすることができます。

@Singleton
public class InjectorHolder
{
private Injector injector;

   public GuiceInjectorHolder()
   {
        injector = Guice.createInjector(new Module())
   }
}

    public Injector getInjector()
    {
    return injector;
    }

}

public abstract class AbstractService
{
@EJB
InjectorHolder holder;

public void method()
{
holder.getInjector().getInstance(clazz).doSomething();
}
}
于 2012-06-07T09:10:59.383 に答える