0

Web サービスを呼び出すためのステートレス EJB 3.1 を実装する正しい方法は何ですか? クライアントはサーブレットとして動作しますが、呼び出しを EEJ Bean に移動したいと考えています。正常に動作している WS にアクセスするには、SOAP ヘッダー エンベロープにユーザー名とパスワードを追加する必要があります。

サーブレットが使用しているサービスは次のようになります。

@WebServiceClient(name = "MessageService", targetNamespace = "http://...", wsdlLocation = "...wsdl")
public class MessageService
    extends Service

ステートレス EJB でラップできますか、またはMessageService をラップせずに (チュートリアルのように) MessageServiceBean 自体を使用する必要がありますか?@WebServiceRef

チュートリアル

4

1 に答える 1

4

ローカル サービス

クライアントプロバイダーがアプリケーション サーバー上の同じ EAR または WAR に存在する場合、通常の EJB のように呼び出すことができます。例えば

@WebService
@Stateless
public class CalculatorBean implements Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

CalculatorBeanスレッドセーフです。メソッド内で発生するすべてのビジネス ロジックaddは、コンテナー管理のトランザクションの一部であり、グローバル トランザクションには参加しません。

または、クライアント コードで JNDI 名前空間を検索することもできます。

リモートサービス

ランタイムは、サービス オブジェクトまたはポート オブジェクトを、 の注釈が付けられたメンバー変数に挿入できますjavax.xml.ws.WebServiceRef

@WebServiceRef(CalculatorService.class)
private Calculator port;

CalculatorServiceクラスには、属性javax.xml.ws.WebServiceClientを持つアノテーション (サービスのクライアント)が付けられます。wsdlLocation


WebService を EJB にラップする場合は、この回答を参照してください。これに関する説明については、「EJB と Web サービス: 両方の世界を最大限に活用する」を参照してください。

于 2013-01-22T06:16:37.507 に答える