Inf4482

From Carboogle


Contents

Développement d'applications réparties INF4482

Ressources

Jeudi 19 Janvier

Configurer son compte arabica

  • Activer ls servlets sur tomcat
  • URL d'acces aux servlets : http://www.labunix.uqam.ca:8181/~<login>/<ma-servlet-url>
  • URL d'acces aux jsp : http://www.labunix.uqam.ca:8181/~<login>/<ma-jsp-url>

Utiliser les streams en Java

La serialisation

  • Ecriture et lecture d'un objet : voir classe java Student

Socket TCP et UDP, HTTP

Jeudi 26 janvier

Creer un projet tomcat sous eclipse

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  • Voir le web.xml sur le site de demo

Formulaires HTML, GET et POST

Cookies

HttpSession

La redirection

Jeudi 02 février

Connexion JDBC

Jeudi 09 février

Beans

Taglibs

Jeudi 16 février

RMI synchrone et asynchrone

IMPORTANT: Je ne pourrais pas venir donner la démo cette journée comme je serais au CRIM, mais il y aura quand même la démo donnée par Ouiza.

Jeudi 09 Mars

EJB - Intro et Session Bean

Pour déployer une application sur un server d'application, on peut suivre la procédure ici qui décrit un déploiement sous labunix à partir de Linux.

Je montrerai en lab comment déployer sur les serveurs d'application SunOne qui sont sur les postes Windows (ca marche de la même façon, sauf que le serveur d'application est installé sur chaque poste)

Jeudi 16 Mars

EJB - Entity Bean

Pour cette démo, vous pouvez vous aider de cet article qui décrit et montre en vidéo comment configurer et déployer un EntityBean.

But de la démo : essayer de rajouter une information à l'objet Customer pour qu'on puisse avoir sa date de naissance (pas de validation, juste un champ texte simple)

Jeudi 16 Mars

Structure XML

Introduction aux structures XML :

  • XML = langage de description de données
  • Ne fait rien !
  • Avantage:
    • Extensible
    • Structure
    • Organise

Quelques règles :

  • Sensible à la casse
  • Chaque document XML a une seule racine
  • Les valeurs des attributs sont toujours entre guillemets
  • Commentaires :

Utilisation des attributs...

Les deux structures suivantes décrivent les mêmes données mais l'une avec attribut et l'autres sans

<note date="12/11/2002">
<to>Tove</to>
<body>Don't forget me this weekend!</body>
</note>
<note>
<date>12/11/2002</date>
<to>Tove</to>
<body>Don't forget me this weekend!</body>
</note>

Désavantages liés à l'utilisation des attributs :

  • Un attribut ne peut pas contenir des valeurs multiples
  • Ne peut pas être étendu (en balise par exemple) plus tard
  • Ils ne peuvent pas décrire une structure, alors que les noeuds peuvent
  • Les attributs sont plus difficiles à manipuler dans un code
  • Les valeurs des attributs sont plus difficiles à valider conformément à un DTD
  • Un document qui utilisent les attributs pour contenir des données devient plus difficile à lire et maintenir

Conseils :

  • Utiliser les éléments (noeuds) pour décrire des données (exceptions : les identifiants id)
  • Utiliser les attributs pour fournir des informations annexes sur des données
<note id="p501">
    <date>12/11/2002</date>
    <to>Tove</to>
    <body>Don't forget me this weekend!</body>
</note>

DTD

DTD à l'intérieur d'un fichier XML

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>Tove</to>
  <body>Don't forget me this weekend</body>
</note>

DTD dans un fichier .dtd

fichier note.dtd

<!ELEMENT note (to,body)>
<!ELEMENT to      (#PCDATA)>
<!ELEMENT body    (#PCDATA)>

fichier note.xml

<?xml version="1.0"?> 
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <body>Don't forget me this weekend</body>
</note>

Exercices

Essayer de représenter dans une structure XML les concepts énoncés.

1. Créer un DTD qui possède une hiérarchie de trois éléments. Au moins un des élément doit avoir un attribut dont les valeurs possibles seront énumérées.

Une galaxie se compose d'au moins un système solaire. Chaque système solaire peut avoir des planètes, dont on donnera leur nom (donnée), et une indication pour savoir si elle est ou non habitable.

<galaxies>
	<solarsystem>
		<planet>terre</planet>
		<planet inhabitable="yes">lune</planet>
	</solarsystem>
</galaxies>

2. Créer un DTD où un élément E peut être mixte (contient des éléments ou des données) et qui ne peut pas contenir d'autres éléments E.

Une planète peut contenir soit son nom (donnée) soit une lune, qui elle contient son nom (donnée).

<galaxies>
	<solarsystem>
		<planet>terre</planet>
		<planet inhabitable="yes">mars</planet>
		<planet>
			<moon>lune</moon>
		</planet>
	</solarsystem>
</galaxies>

3. Créer un DTD où un attribut d'un élément est optionnel, mais si cet attribut est présent il doit contenir une valeur d'un attribut déjà défini.

Ajouter un attribut moonid, requis pour l'élément moon , et ajouter un attribut moons à l'élément planète. Si ce dernier attribut est présent, il doit être à une valeur contenue dans un attribut luneid.

<galaxies>
	<solarsystem>
		<planet inhabitable="yes">mars</planet>
		<planet moons="id1">terre</planet>
		<planet>
			<moon moonid="id1">lune</moon>
		</planet>
	</solarsystem>
</galaxies>

4. Créer un DTD qui inclue un dtd où une section est désactivée ou activée, et crééer un document qui l'utilise.

DTD à importer depuis un autre DTD (fichier solarsystem.dtd) :

<!ELEMENT solarsystem (planet*)> 
<!ELEMENT planet (#PCDATA | moon)*> 
<!ATTLIST planet inhabitable (yes | no) #IMPLIED 
                 moons IDREFS #IMPLIED> 
<!ENTITY % atmosphere "INCLUDE"> 
	<![%atmosphere;[ 
    	<!ATTLIST planet atmospressure CDATA #REQUIRED 
        	             gasses CDATA #REQUIRED> 
]]> 
<!ELEMENT moon (#PCDATA)> 
<!ATTLIST moon moonid ID #REQUIRED>

Solutions

Exercice 1 :

<!ELEMENT galaxies (solarsystem+)> 
<!ELEMENT solarsystem (planet*)> 
<!ELEMENT planet (#PCDATA)> 
<!ATTLIST planet inhabitable (yes | no) #IMPLIED>

Exercice 2 :

<!ELEMENT galaxies (solarsystem+)> 
<!ELEMENT solarsystem (planet*)> 
<!ELEMENT planet (#PCDATA|moon)*> 
<!ATTLIST planet inhabitable (yes | no) #IMPLIED> 
<!ELEMENT moon (#PCDATA)>

Exercice 3 :

<!ELEMENT galaxies (solarsystem+)> 
<!ELEMENT solarsystem (planet*)> 
<!ELEMENT planet (#PCDATA | moon)*> 
<!ATTLIST planet inhabitable (yes | no) #IMPLIED 
                 moons IDREFS #IMPLIED> 
<!ELEMENT moon (#PCDATA)> 
<!ATTLIST moon moonid ID #REQUIRED>

Exercice 4 :

<?xml version="1.0"?> 
<!DOCTYPE solarsystem SYSTEM "solarsystem.dtd" 
[ 
    <!ENTITY % atmosphere "IGNORE"> 
]> 
<solarsystem> 
    <planet inhabitable="yes"> 
        Earth 
    </planet> 
</solarsystem>

XML Schema

Avantages par rapport aux DTD :

(Source: http://www.w3schools.com/schema/schema_intro.asp)

We think that very soon XML Schemas will be used in most Web applications as a replacement for DTDs. 
Here are some reasons:
* XML Schemas are extensible to future additions
* XML Schemas are richer and more useful than DTDs
* XML Schemas are written in XML
* XML Schemas support data types
* XML Schemas support namespaces

Exemple d'utilisation

fichier note.xsd

<?xml version="1.0"?>
<xs:schema 	xmlns:xs="http://www.w3.org/2001/XMLSchema"
		targetNamespace="note"
		attributeFormDefault="qualified"
		elementFormDefault="qualified">

 <xs:element name="note">
   <xs:complexType>
     <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
     </xs:sequence>
   </xs:complexType>
 </xs:element>

</xs:schema>

fichier note.xml

<?xml version="1.0"?>

<note:note 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
			xmlns:note="note"
			xsi:schemaLocation="note note.xsd">

	<note:to>Tove</note:to>
	<note:body>Don't forget me this weekend!</note:body>
	
</note:note>

Exercices et Solutions

Voir la partie "Discussiion" de cette page

Jeudi 30 mars

  • Utiliser les parser DOM / SAX
  • Bien comprendre leur avantages / inconvénients

Pour vous aider :

  • Utils.java (pour afficher le XML représenté par un objet Document)
  • Projet Eclipse contenant les exercices API DOM et API SAX ci dessous

  1. import java.io.StringWriter;
  2.  
  3. import javax.xml.transform.Transformer;
  4. import javax.xml.transform.TransformerException;
  5. import javax.xml.transform.TransformerFactory;
  6. import javax.xml.transform.dom.DOMSource;
  7. import javax.xml.transform.stream.StreamResult;
  8.  
  9. import org.w3c.dom.Document;
  10.  
  11. public final class Utils
  12. {
  13. private Utils()
  14. {
  15. }
  16.  
  17. /**
  18. * Convert document to string for display
  19. * @param doc org.w3c.dom.Document
  20. * @return String
  21. */
  22. public static String documentToString(Document doc) throws TransformerException {
  23. // Create dom source for the document
  24. DOMSource domSource=new DOMSource(doc);
  25. // Create a string writer
  26. StringWriter stringWriter=new StringWriter();
  27. // Create the result stream for the transform
  28. StreamResult result = new StreamResult(stringWriter);
  29. // Create a Transformer to serialize the document
  30. TransformerFactory tFactory =TransformerFactory.newInstance();
  31. Transformer transformer = tFactory.newTransformer();
  32. transformer.setOutputProperty("indent","yes");
  33. // Transform the document to the result stream
  34. transformer.transform(domSource, result);
  35. return stringWriter.toString();
  36. }
  37. }

API DOM

Exercices sur le site du prof ici, ou dans le projet Eclipse ci-dessus

API SAX

Exercices sur le site du prof ici, ou dans le projet Eclipse ci-dessus

Jeudi 6 avril

Web services

Étapes à suivre sur le mémo de labunix

  • Fibonacci : project eclipse pour le web service décrit dans le mémo
  • GetIP : project eclipse pour un autre web service qui retourne l'adresse IP du serveur ou d'un nom de domaine sur internet

IMPORTANT

Vous devez inclure les librairies de Apache Axis dans le dossier WEB-INF/lib des projet.

Jeudi 13 avril

XML-RPC

  • HelloXmlRpc : project eclipse pour le client/serveur XML-RPC Hello et GetIp

Jeudi 20 avril

Révision

  • XML, DTD, DOM, SAX
  • EJB
  • WS, WSDL
  • XML-RPC
  • Autres...