[AIX Solaris HP-UX Linux Windows][z/OS]

Utilisation de liaisons HTTP dans des applications SCA (obsolète)

Vous pouvez utiliser une liaison HTTP avec un format WF de JSON-RPC dans une application SCA (Service Component Architecture) pour exposer des services aux clients de navigation Web distants. JSON-RPC est un protocole d'appel de procédure distante (RPC) codé dans le JavaScript Format de notation d'objet (JSON).

A propos de cette tâche

Utilisez la liaison HTTP pour exposer des services SCA afin qu'ils soient consommés par des clients Web distants. Cette rubrique décrit comment exposer une implémentation Java™ en tant que service devant être consommé par un client de navigateur à l'aide des interfaces Dojo natives et des bibliothèques RPC.

Pour utiliser des références SCA natives en code JavaScript, consultez la rubrique sur l'utilisation de l'implémentation de widget en JavaScript avec les liaisons HTTP.

Procédure

  1. Configurez le service Java dans une définition de composite SCA.

    Exposez un service Java sur une liaison HTTP dans la définition de composite. Par exemple :

    <composite>
      <service name="EchoService" promote="EchoComponent">
        <interface.java interface="echo.Echo"/>
        <tuscany:binding.http uri="/EchoService"/>
          <tuscany:wireFormat.jsonrpc/>
        </tuscany:binding.http>
      </service>
    
      <component name="EchoComponent">
        <implementation.java class="echo.EchoComponentImpl"/>
      </component>
    </composite>

    Cet exemple expose les méthodes définies dans l'interface echo.Echo aux clients de navigation Web. La classe echo.EchoComponentImpl implémente l'interface Echo et fournit l'implémentation pour le composant. Le service est exposé avec l'URI (uniform resource identifier) relatif "/EchoService".

    L'URI de liaison HTTP /EchoService est un exemple d'URI relatif. Pour exécuter des applications qui utilisent une liaison HTTP dans les clusters du produit, spécifiez un URI relatif. Vous ne pouvez pas exécuter des applications dans les clusters du produit, si la liaison indique un URI absolu, tel que http://localhost:9080/newsService.

  2. Choisissez le moteur de sérialisation

    WireFormat.jsonrpc indique à la liaison d'utiliser IBM JSON RPCAdapter pour sérialiser/désérialiser les données json. Vous pouvez également utiliser Jackson pour effectuer ces opérations. Pour utiliser Jackson, définissez la propriété personnalisée jvmcom.ibm.ws.soa.sca.json.serializer.jackson àtrue .

    Les caractéristiques de performance des sérialiseurs Jackson et RCPAdapter dépendent du nombre de facteurs de la charge json. Testez les deux afin de déterminer celui qui fonctionne le mieux pour la charge.

  3. Accédez au service à partir du navigateur Web.

    Par exemple, pour accéder au service EchoService, utilisez des interfaces de programme d'application du toolkit Dojo dans un fichier HTML ou dans un fichier JSP (JavaServer Pages) pour accèder au service disponible sur/EchoService :

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Echo...</title>
    <script type="text/javascript" src="./dojo/dojo.js"></script>
    <script>
      dojo.require("dojo.io.script")
      dojo.require("dojo.rpc.RpcService")
      dojo.require("dojo.rpc.JsonService")
      dojo.require("dojo.rpc.JsonpService")
      
      function filladdr(){
        var nameElement=document.getElementById("name");
        var name=nameElement.value;
        var echo = new dojo.rpc.JsonService("/EchoService?smd");
        echo.echo(name).addCallback(fillmsg);
      }
      
      function fillmsg(result){
        var line=document.getElementById("line1");
        line.value=result;
      }
    </script>
    </head>
    <body>
    Enter a string: <input id="name" type="text">
    <input type="submit" value="Echo String" onClick="filladdr()"><br>
    <p>Echo </p><input id="line1" type="text" size="50"><br><br>
    </body>
    </html>

    L'URI "/EchoService?smd" qui est transmis au constructeur dojo.rpc.JsonService, contient la chaîne de requête "smd" à la fin de l'URI spécifié dans la définition de composite <binding.http>. La chaîne de requête "smd" à la fin de l'URI, est obligatoire pour l'utilisation de clients Dojo.

Résultats

La sortie HTML de l'exemple de sortie affiche deux zones de texte et un"submit" bouton. Quand un utilisateur entre du texte dans la première zone de texte et clique sur le bouton Envoi, la procédure suivante s'exécute :

  1. Le code JavaScript de la méthode filladdr() obtient la valeur qui a été saisie dans la première zone de texte.
  2. La méthode filladdr() crée une instance dojo.rpc.JsonService indiqué à l'URI "/EchoService?smd".
  3. Le code JavaScript exécute la méthode "echo(String)" sur l'objet JsonService, générant une demande JSON-RPC à envoyer à "/EchoService?smd".
  4. L'exécution SCA gère la demande de l'URI en exécutant la méthode EchoComponentImpl.echo(String). Le résultat est renvoyé au client en tant que réponse HTTP.
  5. Le client Web exécute la méthode de rappel "fillmsg(result)" désignée, avec la valeur renvoyée par le service.
  6. Le code JavaScript de la méthode fillmsg(result) met à jour la seconde zone de texte qui contient le texte renvoyé par l'appel du service.
Exemple de liaison HTTP accessible à partir d'un fichier HTML

Etape suivante

Notez bien les types de données pris en charge pour la conversion JSON. Des paramètres pour les demandes JSON-RPC sont envoyés au serveur dans un format JSON et doivent être transformés par l'exécution SCA afin d'être utilisés dans l'implémentation Java. La réponse au client est également au format JSON. Donc, le composant SCA reconvertit au format JSON la valeur renvoyée par la méthode EchoComponentImpl.echo(). Par exemple,echo("Testing...") pourrait soumettre les données suivantes au serveur :

{"params":["Testing..."],"method":"echo","id":1}

La méthode JavaEchoComponentImpl.echo(String message) est invoqué avec le paramètre String"Testing..." et renvoie l'objet String"echo: Testing..." . La réponse JSON renvoyée au client Web peut ressembler à ce qui suit :

{"id":1,"result":"echo: Testing..."}
Tableau 1. Types de données pris en charge pour les conversions JSON . La conversion permet au client Web et à l'implémentation Java d'utiliser les données.
Type de données
Type primitif <==> JSON <==> Type primitif
Tableau de type primitif <==> JSON <==> Tableau de type primitif
bean Java <==> JSON <==> bean Java
List <==> JSON <==> List
Mappe <==> JSON <==> Mappe
Set <==> JSON <==> Set