Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
enseignement:sw:projet:2012 [2012/12/13 11:49]
ecoquery [Principe d'une location]
enseignement:sw:projet:2012 [2012/12/21 16:13] (Version actuelle)
ecoquery [Mise à jour]
Ligne 4: Ligne 4:
  
 ===== Mise à jour ===== ===== Mise à jour =====
 +  * 2012-12-21: Exemple de code pour le bean transformation + routage dans la section [[#smix-camel|camel]].
 +  * 2012-12-14: 
 +    * Nouvelle version de vysper-run (serveur jabber) [[http://liris.cnrs.fr/~ecoquery/files/vysper-run-2012.1-jar-with-dependencies.jar|disponible ici]]. Cette version ajoute automatiquement rapidodvd@localhost comme contact de tous les autres utilisateurs et réciproquement. Requis pour une bonne communication entre les utilisateurs (en particulier pour la réception des messages à destination de //RapidoDVD// via servicemix).
 +    * Mise à jour de la section [[#smix-camel|camel]] sur l'utilisation des beans. Concerne la transformation de message et le routage dynamique.
 +  * 2012-12-13: Ajout de tips pour l'utilisation de beans dans servicemix: utile pour les transformations de messages et le routage dynamique.
   * 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{:enseignement:sw:projet:tiw5-2012-fourni.zip|}}. Voir les détails sur le paiement.   * 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{:enseignement:sw:projet:tiw5-2012-fourni.zip|}}. Voir les détails sur le paiement.
   * 2012-11-30: ajout de JMS dans l'exemple Camel. Bugfix pour le processus BPEL. Nouvelle version disponible sur la forge. {{:enseignement:sw:projet:tiw5-2012-tp-base.zip|}} a été mis à jour.    * 2012-11-30: ajout de JMS dans l'exemple Camel. Bugfix pour le processus BPEL. Nouvelle version disponible sur la forge. {{:enseignement:sw:projet:tiw5-2012-tp-base.zip|}} a été mis à jour. 
Ligne 9: Ligne 14:
 <note important>Dans la configuration du composant ''cxf-provider''((projet smix-cxf)), l'attribut ''useJBIWrapper=false'' est indispensable pour faire fonctionner BPEL/ODE avec le composant CXF qui permet de communiquer en http pour appeler les services JBoss.</note> <note important>Dans la configuration du composant ''cxf-provider''((projet smix-cxf)), l'attribut ''useJBIWrapper=false'' est indispensable pour faire fonctionner BPEL/ODE avec le composant CXF qui permet de communiquer en http pour appeler les services JBoss.</note>
   * 2012-11-29: précisions sur la partie CAHD   * 2012-11-29: précisions sur la partie CAHD
- 
 ===== Introduction ===== ===== Introduction =====
  
Ligne 107: Ligne 111:
   * Installation d'un point d'accès SPARQL ([[http://4store.org/|4store]]) accessible via http://localhost:8085/status et qui peut être lancé via ''4store-web''((alias bash)). Ce point d'accès contient des [[http://download.freebase.com/datadumps/latest/browse/film/|données sur les films]] issus de [[http://www.freebase.com/view/film|freebase.com]].   * Installation d'un point d'accès SPARQL ([[http://4store.org/|4store]]) accessible via http://localhost:8085/status et qui peut être lancé via ''4store-web''((alias bash)). Ce point d'accès contient des [[http://download.freebase.com/datadumps/latest/browse/film/|données sur les films]] issus de [[http://www.freebase.com/view/film|freebase.com]].
   * Installation d'un serveur Jabber ([[http://mina.apache.org/vysper-project/index.html|vysper]]) qui peut être lancé via ''(cd apps/jabber; java -jar vysper-run.jar)''. L'ajout des utilisateurs se fait via modification du fichier ''users.properties''. L'outil //Internet -> Pidgin// peut être utilisé pour interagir directement avec le serveur.   * Installation d'un serveur Jabber ([[http://mina.apache.org/vysper-project/index.html|vysper]]) qui peut être lancé via ''(cd apps/jabber; java -jar vysper-run.jar)''. L'ajout des utilisateurs se fait via modification du fichier ''users.properties''. L'outil //Internet -> Pidgin// peut être utilisé pour interagir directement avec le serveur.
 +<note important>Nouvelle version fournie pour le serveur Jabber [[http://liris.cnrs.fr/~ecoquery/files/vysper-run-2012.1-jar-with-dependencies.jar|vysper-run-2012.1-jar-with-dependencies.jar]]. Cette version enregistre automatiquement rapidodvd@localhost comme contact de tous les autres utilisateurs.</note>
 ===== Projet de base ===== ===== Projet de base =====
  
Ligne 121: Ligne 125:
  
 Ce projet défini un processus BPEL qui agit comme un simple proxy vers un service de type HelloService. Les fichiers à étudier sont dans ''./src/main/resources/''. Ce projet défini un processus BPEL qui agit comme un simple proxy vers un service de type HelloService. Les fichiers à étudier sont dans ''./src/main/resources/''.
-<note important>L'utilisation d'un service exterieur au bus nécessite d'être configuré directement au niveau du fichier ''deploy.xml''. Dans l'exemple fourni, on ne passe donc pas par smix-cxf dans le process BPEL pour accéder au service tournant sous JBoss</note>+<note important><del>L'utilisation d'un service exterieur au bus nécessite d'être configuré directement au niveau du fichier ''deploy.xml''. Dans l'exemple fourni, on ne passe donc pas par smix-cxf dans le process BPEL pour accéder au service tournant sous JBoss</del></note>
  
 ==== smix-camel ==== ==== smix-camel ====
Ligne 171: Ligne 175:
     <version>2.6.0</version>     <version>2.6.0</version>
     </dependency></code></note>     </dependency></code></note>
-<note tip>Pour transformer le format des message le long d'une route Camel (utile pour fabriquer du XML à partir des messages XMPP), il est possible d'utiliser un bean Spring déployé dans smix-camel. Voir http://camel.apache.org/bean.html, http://camel.apache.org/bean-binding.html et http://camel.apache.org/maven/current/camel-core/apidocs/index.html. Une méthode prennant un Message et renvoyant un Message devrait être appropriée.</note>+<note tip>Pour transformer le format des message le long d'une route Camel (utile pour fabriquer du XML à partir des messages XMPP), il est possible d'utiliser un bean Spring déployé dans smix-camel. Voir http://camel.apache.org/bean.html, http://camel.apache.org/bean-binding.html et http://camel.apache.org/maven/current/camel-core/apidocs/index.html. <del>Une méthode prennant un Message et renvoyant un Message devrait être appropriée.</del>Une méthode ''void'' prenant en argument un ''Exchange'' devrait être appropriée. Ci-dessous un exemple qui utilise un bean pour ajouter dynamiquement un header nommé ''myHeader'', ce header étant utilisé ensuite par un ''recipientList'' dans la route Camel pour faire du routage dynamique.<code java TestingDynamicRouter.java>package tiw5.smix.camel; 
 + 
 +import java.util.logging.Logger; 
 + 
 +import org.apache.camel.Exchange; 
 + 
 +public class TestingDynamicRouter { 
 + 
 + private static final Logger LOG = Logger 
 + .getLogger(TestingDynamicRouter.class.getCanonicalName()); 
 + 
 + private int courant = 0; 
 + 
 + public void changeHeaderRoute(Exchange exchange) { 
 + exchange.getOut().setBody(exchange.getIn().getBody()); 
 + exchange.getOut().setHeaders(exchange.getIn().getHeaders()); 
 + String dest = "log:test" + courant; // calcule dynamiquement 
 + courant++; 
 + exchange.getOut().setHeader("myHeader", dest); 
 + LOG.info("Ajout du header 'myHeader' au message " 
 + + exchange.getOut().getMessageId() + ": " + dest); 
 +
 + 
 +
 +</code> 
 +Dans le ''camel-context.xml'': 
 +<code xml> 
 + <route> 
 + <from 
 + uri="jbi:endpoint:http://www.univ-lyon1.fr/M2TI/services/xmpp/salut/ep" /> 
 + <to uri="bean:myRouter?method=changeHeaderRoute" /> 
 + <to uri="log:testroute" /> 
 + <recipientList> 
 + <header>myHeader</header> 
 + </recipientList> 
 + <!-- to uri="xmpp://toto@localhost/titi@localhost?password=toto" / --> 
 + </route> 
 + 
 +... 
 + 
 + <bean id="myRouter" class="tiw5.smix.camel.TestingDynamicRouter" /> 
 + 
 +</code></note> 
 + 
 +<note tip>Nouvelle version qui fait un routage XMPP et extrait le message du XML<code java TestingDynamicRouter.java> 
 +package tiw5.smix.camel; 
 + 
 +import java.io.StringReader; 
 +import java.io.StringWriter; 
 +import java.util.logging.Logger; 
 + 
 +import javax.xml.stream.XMLInputFactory; 
 +import javax.xml.stream.XMLStreamException; 
 +import javax.xml.stream.XMLStreamReader; 
 +import javax.xml.transform.Source; 
 +import javax.xml.transform.Transformer; 
 +import javax.xml.transform.TransformerException; 
 +import javax.xml.transform.TransformerFactory; 
 +import javax.xml.transform.stream.StreamResult; 
 + 
 +import org.apache.camel.Exchange; 
 + 
 + 
 +public class TestingDynamicRouter { 
 + 
 + private static final Logger LOG = Logger 
 + .getLogger(TestingDynamicRouter.class.getCanonicalName()); 
 + 
 + private static Transformer copy; 
 + 
 + static { 
 + try { 
 + copy = TransformerFactory.newInstance().newTransformer(); 
 + } catch (Exception e) { 
 + e.printStackTrace(); 
 + copy = null; 
 +
 +
 + 
 + public void changeHeaderRoute(Exchange exchange) 
 + throws TransformerException, XMLStreamException { 
 + // Copie du body dans une string 
 + Source inBody = exchange.getIn().getBody(Source.class); 
 + StringWriter sw = new StringWriter(); 
 + copy.transform(inBody, new StreamResult(sw)); 
 + // Utilisation d'un XMLStreamReader (API StAX) pour lire le XML depuis 
 + // la string 
 + // Rmq: le parsing de document pour faire du DOM semble buggé (document 
 + //     avec un corps vide) 
 + // Rmq: La fabrication directe du XMLStreamReader depuis la Source 
 + //     (sans passer par la String intermédiaire) échoue 
 + XMLStreamReader reader = XMLInputFactory.newInstance() 
 + .createXMLStreamReader(new StringReader(sw.toString())); 
 + String txt = null; 
 + // Boucle qui cherche un tag appelé "in" 
 + while (reader.hasNext()) { 
 + int type = reader.next(); 
 + if (type == XMLStreamReader.START_ELEMENT 
 + && "in".equals(reader.getLocalName())) 
 + break; 
 +
 + // Utilisation du texte dans le tag "in" pour le message 
 + if (reader.hasNext() && XMLStreamReader.CHARACTERS == reader.next()) { 
 + txt = reader.getText(); 
 +
 + reader.close(); 
 + // On fait un setBody avec une String pour envoyer à Jabber 
 + exchange.getOut().setBody("Message: " + txt); 
 + // Headers pour le routage dynamique 
 + exchange.getOut().setHeaders(exchange.getIn().getHeaders()); 
 + String destinataire = "titi@localhost"; // normalement calculé dynamiquement 
 + String dest = "log:toxmpp,xmpp://rapidodvd@localhost/" + destinataire 
 + + "?password=rapidomdp"; 
 + exchange.getOut().setHeader("myHeader", dest); 
 + LOG.info("Ajout du header 'myHeader' au message " 
 + + exchange.getOut().getMessageId() + ": " + dest); 
 + }
  
 +}
 +</code></note>
 ==== smix-sa ==== ==== smix-sa ====