2012-09-10 2 views
0

Donc, en lisant le guide d'administration JBoss, je vois que l'adressage WS est utilisé pour créer des "endpoints stateful". Je comprends que l'adressage WS crée une norme pour spécifier les données de routage de messagerie dans les en-têtes SOAP d'un service Web ... mais je ne suis pas sûr de savoir comment cela se rapporte à l'état des points d'extrémité.Comment l'adressage WS crée-t-il des points de terminaison "stateful" (JBossWS)

Voici quelque chose de Wikipedia:

WS-Addressing soutient l'utilisation des interactions asynchrones par spécifiant un en-tête SOAP commun (WSA: REPLYTO) qui contient la référence des terminaux (EPR) auquel la réponse doit être envoyé. Le fournisseur de service transmet le message de réponse via une connexion distincte au point de terminaison wsa: ReplyTo. Cela dissocie la durée de vie de l'interaction demande/réponse SOAP de la durée de vie du protocole de requête/réponse HTTP , permettant ainsi des interactions de longue durée pouvant s'étendre sur des périodes arbitraires.

Alors wsa:ReplyTo vous donne la possibilité de faire les choses de manière asynchrone parce que vous avez un moyen d'obtenir votre réponse au bon endroit, même si la requête HTTP est fait.

Je suis toujours à défaut de voir où le terme « État » vient.

Toute idée sur ce sujet?

Répondre

0

Je l'ai maintenant. C'est logique quand vous regardez un exemple de code. Ici, extrait du guide d'administration JBoss, est un exemple StatefulEndpoint WebService:

@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() 
{ ... } 
} 

Ensuite, le client de service Web crée deux ports distincts

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

Passing dans une nouvelle AddressingFeature dans la fonction getPort permettra à la Fonctionnalité d'adressage WS.

Voici le code qui démontre la statefulness pour les deux ports que nous venons de créer:

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); 
} 
} 

Notez que PORT1 ajouté différents éléments que port2 a fait, mais quand port1 appelle getItems ... il ne reçoit que les éléments qu'il a ajouté, pas ceux de port2. C'est ce qui lui donne l'état.

Questions connexes