Présentation des bibliothèques de l'adaptateur RPC

Web-remoting correspond à un modèle qui vous permet de prendre en charge le code JavaScript ou le code côté client de manière à appeler directement une logique côté serveur. Ce modèle permet d'appeler des méthodes Java depuis JavaScript. L'appel se fait par le biais d'un appel JSON-RPC. D'une manière générale, XmlHttpRequest est utilisé en mode asynchrone. Des données sont transférées entre le serveur et le client au format JSON. De ce fait, ce modèle est principalement une forme de services Web JSON.

Introduction de l'adaptateur RPC

L'implémentation de Web remoting par IBM® correspond à l'adaptateur RPC d'IBM. L'adaptateur RPC est conçu pour aider les développeurs de logiciels à créer des services basés sur une commande rapidement et facilement, et ce, de manière à complémenter des styles de programmation des applications Ajax et d'autres clients légers. Si l'adaptateur RPC est implémenté en tant que servlet générique, il fournit une interface HTTP au JavaBeans enregistrés.

Adaptateur RPC
L'adaptateur RPC prend en charge deux protocoles RPC actuellement :

Protocole RPC sur HTTP

Dans le protocole RPC sur HTTP, des appels sont effectués via des URL comportant des paramètres de demande ou des paramètres de formulaire. L'adaptateur RPC intercepte et désérialise l'URL de manière à extraire le nom de service, le nom de méthode ainsi que les paramètres d'entrée. Ces informations permettent à l'adaptateur RPC d'appeler la méthode appropriée afin de correspondre au JavaBeans.

Par exemple, des clients peuvent appeler test.Example.getEcho("Hello world") sur le JavaBeans ci-après :

package test; public class Example { public String getEcho(String message) { return(message); } } Appelez le test.Example.getEcho("Hello world") à travers le protocole RPC sur HTTP en utilisant HTTP GET comme suit :

GET /contextRoot/RPCAdapter/httprpc/example/echo?p0=Hello%20world HTTP/1.1

Une fois l'adaptateur RPC configuré correctement de manière à être compatible avec votre application, vous devez effectuer ces appels. Pour cela, vous devez ajouter le fichier JAR RPCAdapter au WEB-INF/lib de votre fichier WAR. Vous devez également introduire les entrées suivantes dans le fichier web.xml. <servlet> <display-name>RPCAdapter</display-name> <servlet-name>RPCAdapter</servlet-name> <servlet-class>com.ibm.websphere.rpcadapter.RPCAdapter</servlet-class> </servlet> <servlet-mapping> <servlet-name>RPCAdapter</servlet-name> <url-pattern>/RPCAdapter</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RPCAdapter</servlet-name> <url-pattern>/RPCAdapter/*</url-pattern> </servlet-mapping> Indiquez un fichier RpcAdapterConfig.xml dans le répertoire WEB-INF. Ce fichier sert à configurer les services exportés. Dans ce cas, un exemple de fichier RpcAdapterConfig.xml ressemble à l'exemple ci-dessous : <?xml version="1.0" encoding="UTF-8"?> <rpcAdapter> <default-format>xml</default-format> <services> <pojo> <name></name> <implementation>test.pojo.Sample</implementation> </pojo> </services> </rpcAdapter> L'API du protocole RPC sur HTTP dérivé définit p0 en tant que nom du premier argument. Les restrictions au niveau des API de la fonction Java reflection sont responsables de ce comportement par défaut. Des noms de paramètres significatifs peuvent être définis à l'aide des informations de descripteur de bean ou en indiquant les noms de paramètres se trouvant dans le fichier RpcAdapterConfig.xml. Par exemple, examinez getEcho() de ce bean : package test; import com.ibm.websphere.rpcadapter.SelfBeanInfo; public class Example2 implements SelfBeanInfo { public String getEcho(String message) { return(message); } public static String[][] getBeanDescriptorInfo() { String [][] mds = { {"method", "getEcho", "Echoes the input String.", "GET", "message", "String to be echoed."}, }; return(mds); } } L'exemple ci-dessus peut être appelé en tant que : GET /contextRoot/httprpc/example/echo?message=Hello%20world HTTP/1.1 package test; public class Example2 { public String getEcho(String message) { return(message); } } L'exemple ci-dessus peut être appelé en tant que : GET /contextRoot/httprpc/example/echo?message=Hello%20world HTTP/1.1

avec le RpcAdapterConfig.xml ci-après. <?xml version="1.0" encoding="UTF-8"?> <rpcAdapter> <default-format>xml</default-format> <services> <pojo> <name>example</name> <implementation>test.pojo.Example2</implementation> <methods filter="whitelisting"> <method> <name>echo</name> <description>echos the message</description> <parameters> <parameter> <name>message</name> <description>Contains the message to be echo'd.</description> <!--optional--> </parameter> </parameters> </method> </methods> </pojo> </services> </rpcAdapter>

L'élément default-format dans le fichier de configuration indique le format par défaut à utiliser lorsque la demande n'en spécifie aucun. Ce format peut être XML ou JSON.

JSON-RPC

Dans JSON-RPC, une méthode est appelée via des objets JSON. La réponse générée est également un objet JSON. Vous pouvez accéder au JavaBeans enregistrés via l'API JSON-RPC de Dojo : var example = new dojo.rpc.JsonService("/contextRoot/RPCAdapter/jsonrpc/example"); example.getEcho('Hello world').addCallback(exampleCallback); function exampleCallback(result) { // response is available as result.getEchoReturn.String }

Définition des informations de descripteur de bean

Dans l'adaptateur RPC, indiquez les informations concernant les Javabeans disponibles via les informations de descripteur de bean. Dans le cas contraire, les informations sont obtenues via la réflexion. Il existe deux façons d'indiquer les informations de descripteur de bean. Examinez le JavaBeans appelé Exemple ci-dessous. package test.pojo; import java.util.List; import java.util.Vector; /** * Example showing custom Bean access specified with a separate BeanInfo class. * This sample is instructive for cases where the Bean class cannot be modified. * * @see test.pojo.SampleBeanInfo * @see test.pojo.SampleNoBeanInfo * @see test.pojo.SampleSelfBeanInfo */ public class Sample { /** * Echoes the input String. This stateless operation works correctly * regardless of the setting of the bean descriptor <code>oneInstancePerUser</code>. * * @param message String to be echoed. */ public String echo(String message) { return(message); } public String echoNoArg() { return("Hello World"); } public boolean echoBoolean(boolean b) { return(b); } public boolean echoIntegerBean(boolean b) { return(b); } List _values = new Vector(); /** * Adds a value to a list that can be retrieve with the <code>getValues</code> method. * This stateful scenario requires that the bean descriptor <code>oneInstancePerUser</code> * be set to true. * * @param value String added to the list. */ public void addValue(String value) { _values.add(value); } /** * Returns the cumulative list of values added with the <code>addValue</code> method. * This stateful scenario requires that the bean descriptor <code>oneInstancePerUser</code> * be set to true. * * @return List of Strings previously added to the list. */ public List getValues() { return(_values); } } Vous pouvez créer un objet BeanInfo appelé SampleBeanInfo afin de décrire l'exemple de JavaBeans. Notez comment la classe BeanInfo a SimplerBeanInfo comme parent. Notez également que vous devez appeler setBeanClass dans le constructeur avec Sample.class comme paramètre. package test.pojo; import com.ibm.websphere.rpcadapter.SimplerBeanInfo; /** * Example BeanInfo class showing declarative-type descriptor information * supported by the RPC adapter. * * @see test.pojo.Sample */ public class SampleBeanInfo extends SimplerBeanInfo { /** * SimplerBeanInfo uses Java Reflection; must set the Bean class first. */ public SampleBeanInfo() { setBeanClass(Sample.class); } public String[][] getBeanDescriptorInfo() { String [][] mds = { {"bean", "oneInstancePerUser", "true"}, {"method", "echo", "Echoes the input String.", "GET", "message", "String to be echoed."}, {"method", "echoNoArg", "Echoes Hello World.", "GET" }, {"method", "addValue", "Adds a value to a list.", "GET", "value", "value to add"}, {"method", "getValues", "Returns the list.", "GET"}, {"method", "echoBoolean", "Echoes a boolean value.", "GET", "b", "Boolean to be echoed."}, }; return(mds); } } Vous pouvez également indiquer le descripteur de bean en incluant les informations de descripteur de bean dans la classe bean elle-même. Notez que la classe bean implémente l'interface SelfBeanInfo. Elle doit comporter également une méthode statique getBeanDescriptorInfo() qui renvoie les informations sur le JavaBeans. package test.pojo; import java.util.List; import java.util.Vector; import com.ibm.websphere.rpcadapter.SelfBeanInfo; /** * Example showing custom Bean access specified with embedded descriptive * information. This sample is instructive for cases where the Bean can be * modified. * * @see test.pojo.SampleNoBeanInfo * @see test.pojo.Sample */ public class SampleSelfBeanInfo implements SelfBeanInfo { /** * Echoes the input String. This stateless operation works correctly * regardless of the setting of the bean descriptor <code>oneInstancePerUser</code>. * * @param message String to be echoed. */ public String echo(String message) { return(message); } List _values = new Vector(); /** * Adds a value to a list that can be retrieve with the <code>getValues</code> method. * This stateful scenario requires that the bean descriptor <code>oneInstancePerUser</code> * be set to true. * * @param value String added to the list. */ public void addValue(String value) { _values.add(value); } /** * Returns the cumulative list of values added with the <code>addValue</code> method. * This stateful scenario requires that the bean descriptor <code>oneInstancePerUser</code> * be set to true. * * @return List of Strings previously added to the list. */ public List getValues() { return(_values); } public static String[][] getBeanDescriptorInfo() { String [][] mds = { {"bean", "oneInstancePerUser", "true"}, {"method", "echo", "Echoes the input String.", "GET", "message", "String to be echoed."}, {"method", "addValue", "Adds a value to a list.", "GET", "value", "value to add"}, {"method", "getValues", "Returns the list.", "GET"}, }; return(mds); } } Il faut que vous sachiez qu'aucune classe BeanInfo ne doit se trouver dans le chemin d'accès aux classes si vous ne voulez pas utiliser de BeanInfo. Cela est dû au fait que l'adaptateur RPC vérifie les classes BeanInfo en ajoutant BeanInfo au nom de classe POJO. Il essaie ensuite de charger des informations en premier lieu. Vous devez également enregistrer les objets que vous devez exposer dans le RPCAdapterConfig.xml, que vous utilisez BeanDescriptors ou non.

Structure du package

    Cette bibliothèque est distribuée dans une version autonome :
 
   Package autonome

        Ce package est organisé comme suit pour WebSphere® Application Server version 8.5
<install_root>/optionalLibraries/web2mobile/rpcAdapter/RPCAdapter.jar
Correspond aux fichiers de classe Java au format JAR (Java archive) implémentant l'API.



Conditions d'utilisation | Commentaires