0

JBoss 管理ガイドを読むと、「ステートフル エンドポイント」を作成するために WS アドレッシングが使用されていることがわかります。

WS-addressing が Web サービスの SOAP ヘッダー内のメッセージング ルーティング データを指定するための標準を作成することは理解していますが、それがエンドポイントの状態とどのように関係しているかはわかりません。

ここにウィキペディアからの何かがあります:

WS-Addressing は、応答の送信先となるエンドポイント参照 (EPR) を含む共通 SOAP ヘッダー (wsa:ReplyTo) を指定することにより、非同期対話の使用をサポートします。サービス プロバイダーは、別の接続を介して応答メッセージを wsa:ReplyTo エンドポイントに送信します。これにより、SOAP 要求/応答対話の存続期間が HTTP 要求/応答プロトコルの存続期間から分離されるため、任意の期間にわたる長時間の対話が可能になります。

HTTPwsa:ReplyTo要求が完了した後でも、適切な場所に応答を取得する方法があるため、非同期で処理を行うことができます。

「状態」がどこに入るのか、まだわかりません。

これに関する洞察はありますか?

4

1 に答える 1

0

わかった。コード例を見ると意味があります。ここでは、JBoss管理ガイドから抽出したStatefulEndpointWebServiceの例を示します。

@WebService(name = "StatefulEndpoint", targetNamespace = "http://org.jboss.ws/sam ples/wsaddressing", serviceName = "TestService")
@Addressing(enabled=true, required=true)
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class StatefulEndpoint implements StatefulEndpoint, ServiceLifecycle
{
@WebMethod
public void addItem (String item )
{ ... }
@WebMethod
public String getItemsInCart()
{ ... }
}

次に、Webサービスクライアントは2つの別々のポートを作成します

port1 = (StatefulEndpoint)service.getPort(StatefulEndpoint.class, new
javax.xml.ws.soap.AddressingFeature());
port2 = (StatefulEndpoint)service.getPort(StatefulEndpoint.class, new
javax.xml.ws.soap.AddressingFeature());

新しいAddressingFeatureをgetPort関数に渡すと、WS-addressing機能が有効になります。

作成した2つのポートのステートフル性を示すコードは次のとおりです。

public class AddressingStatefulTestCase extends JBossWSTest
{
...
public void testAddItem() throws Exception
{
port1.addItem ("Ice Cream ");
port1.addItem ("Ferrari");
port2.addItem ("Mars Bar");
port2.addItem ("Porsche");
}
public void testGetItems() throws Exception
{
String items1 = port1.getItems();
assertEquals("[Ice Cream , Ferrari]", item s1);
String items2 = port2.getItems();
assertEquals("[Mars Bar, Porsche]", item s2);
}
}

port1はport2とは異なるアイテムを追加しましたが、port1がgetItemsを呼び出すと、追加したアイテムのみを取得し、port2からのアイテムは取得しないことに注意してください。これが状態を与えるものです。

于 2012-09-10T14:20:21.873 に答える