La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Documents > J2SE APIs > J2EE APIsJ2SE APIsJ2EE APIs

Présentations similaires


Présentation au sujet: "1 Documents > J2SE APIs > J2EE APIsJ2SE APIsJ2EE APIs"— Transcription de la présentation:

1 1 Documents > J2SE APIs > J2EE APIsJ2SE APIsJ2EE APIs > Bibliographical references > Description of All ComponentsBibliographical referencesDescription of All Components

2 2 Applications Web

3 3 Java Javascript JSP taglib XML RMI Struts HTML MDBean Entity Bean Servlet Cookie Visual Age Eclipse Tomcat JBoss ant CVS Websphere Weblogic php.net MySQL JDO Hybernate J2EE Rechercher: J2EE, PHP, Apache JSF

4 4 LAMP (pas présenté) Browser PHP Test PHP Network Client Server DB Linux, Apache, MySQL, PHP

5 5 JBoss Tomcat Application Web sur J2EE Entity EJB Browser Entity EJB Session EJB x.html Network Client Server DB Servlet proxy

6 6 Pages HTML et Servlettes Livre Software Engineering Sections 7.5, 7.7

7 7 Page HTML Tests/test function init() { // Javascript alert("Bonjour") } Contenu de la page

8 8 Elements HTML Un grand titre Un paragraphe

ligne1 colonne 1 ligne1, colonne 2
ligne1 colonne 1 ligne1, colonne 2">

9 9 Elements actifs dans une form AAA BBB CCC DDD

10 10 Sélections EEE FFF HHH JJJ

11 11 Autres éléments ha ! ha ! ha ! Click

12 12 Form... elements des pages précédentes... Envoyé au serveur (une seule ligne) &txInput2=initial &simpleSelection=eee &myValue=not_seen &thetext=+++++ha+!+ha+!+ha+!%0D%0A++ &button=Envoyer

13 13 Upload de fichiers

14 14 HTML: Test.html Tomcat, Apache... (serveur) Browser (client) Accès au serveur HTML link Internet

15 15 Servlet Objet généralisé Possède une méthode doGet Est exécuté dans un serveur Web Appelé par un browser Browser Servlet doGet() { … } Serveur Web URL avec paramètres

16 16 Servlet qui lit les données entrées dans des champs Bouton submit

17 17 Formulaire HTML

18 18 Formulaire HTML (Paragraphe 7.5.2) add: val:

19 19 HTML page servlet: Test.java Serveur JBossBrowser Appeler une servlette Internet page HTML Exécution de Java

20 20 Servlette: traitement des données public class Test extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println (" "); out.println (" Title "); } La page html est produite automatiquement quand la méthode se termine. Javadoc J2EE

21 21 Classes Http Servlet HttpServletRequest.html, ServletRequest.htmlHttpServletRequest.html ServletRequest.html HttpServletResponse.html, ServletResponse.htmlHttpServletResponse.html ServletResponse.html HttpSession.html

22 22 Décodage dun paramètre dans une servlette (voir J2EE Javadoc) yyy Servlette

23 23 Décodage dun paramètre dans une servlette (voir J2EE Javadoc) valueParam = request.getParameter("txtInp"); dans la servlette valueParam.equals("yyy") Java Navigateur

24 24 Production du contenu dune page HTML par une servlette java.io.PrintWriter out = response.getWriter(); out.println( Titre );

25 25 WebLang Crée les sources des composants, les fichiers auxiliaires et les fichiers ant

26 26 Fichier.cg servlet SomeServlet { package servletPack; public void someCall (PrintWriter out, String name, double number) { out.println(name + " " + number); }

27 27 Module servlet en WebLang servlet TestServlet { package packageName; int attribute; // dangereux public void add ( PrintWriter out, int number) { attribute += number; out.println(attribute); } public void sub (int number) { attribute = number; } determine la form HTML

28 28 WebLang génère les fichiers: servlet: Test.java doGet() {... } m1(int a, String b) {... } m2(String c, long d) {... } html: InputForms a b m1 c b m2

29 29 Avec plus de détails servlette: Test.java doGet() { a = getParameters(a); m1(a, b); or m2(c, d); } m1(int a, String b) {... } m2(String c, long d) {... } html: InputForms

30 30 Préparation et chargement dune servlette Serveur web.xml myServlet.java myPage.html Navigateur Eclipse fichier.cg CodeGen doGet() { } xdoclet packaging web.xml projet.ear WebLang

31 31 bouton droit de la souris Compilation dun fichier.cg

32 32 Déploiement dun projet WebLang Run As… > CGxdoclet.xml Run As… > CGpackaging.xml

33 33 Démarrer le serveur JBoss Il est possible de gérer le serveur JBoss, ou dautres serveurs à partir dEclipse. Les manipulations de préparation sont présentées ci-dessous. Ces manipulations préparent en même temps les librairies nécessaires aux projets J2EE

34 34 Nettoyer les programmes dans JBoss Eliminez les programmes et structures laissés par l'étudiant précédent. Pensez à le faire dans les leçons suivantes également ! 1.Effacez les répertoires tmp, data, log et work qui se trouvent dans C:\jboss GA\server\default 2.Effacez tous les fichiers se terminant par.ear (pour archive) ou.war se trouvant dans C:\jboss GA\server\ default \deploy Pour arrêter JBoss, cliquer le carré rouge dans la fenêtre serveur et attendez quil se termine!

35 35 Singleton ( pour lexercice ) public class BD { private static BD localBD = null; public static BD getBD() { if (localBD==null) { localBD = new BD(); } return localBD; } private String name; // autres paramètres } // utilisation BD.getBD().list(); Une seule instanciation, à la première utilisation.

36 36 Définition dune classe en WebLang class MyClass { package aPackage; import java.util; access remote; // optional, default is local outputchannel myCh (queue, A); // future Bean bean; public void aMethod() throws Exception { System.out.println("a method called"); Bean b = beanHome.create(); // future b.method(); } Génère une classe habituelle et introduit les références et fonctions qui permettront de la charger dans le serveur.

37 37 Affichage pour dépanner System.out.print(xxx); affiche ses sorties dans la console dEclipse

38 38 Exercice 1: une application Web Singleton (à la place dune base de données) Servlet store(String x) list() quit() Page HTML entrée Servlet login() cancel() correct nom incorrect Page HTML entrée transition entre états introduction de données

39 39 Structure et scripts dun projet JEE

40 40 Structure dun projet JEE servlets librairies JEE fichier dappel de tous les objets générés fichiers dappel des méthodes des servlets JSP définition des servlets scripts ant de préparation tout est génére à partir de ce fichier

41 41 xDoclets Outil standard pour créer une partie des fichiers indiqués dans les pages précé- dentes

42 42 xDoclet crée le fichier web.xml import javax.rmi.PortableRemoteObject;... /** * name = "MyServletServlet" * display-name = "TestServlet" * description = "A simple Servlet" * url-pattern = "/MyServlet" */ public class TestServlet extends HttpServlet { public void doGet (HttpServletRequest request,...

43 43 Script ant pour appeler XDoclet généré automatiquement par WebLang

44 44 MyServletServlet MyServlet serv.MyServlet MyServletServlet /MyServlet Google Contenu de web.xml généré automatiquement par xdoclet

45 45 CGPackaging.xml

46 46 Session de client (Paragraphe 7.8.5) Chaque client a une zone pour ses variables Lié à la session par les cookies La servlette retrouve les variables de lappelant automatiquement

47 47 Serveur Objets de session dans des servlettes Client 1 (cookie) Client 2 (cookie) Java bean Client 2 Servlet y = session.getAttribute("xx"); Java bean Client 21 xx

48 48 Trouver les Java beans dans la session public public void doGet ( HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); MyObject myObject = new MyObject (); session.setAttribute("myObject", my Object ); x = session.getAttribute("myObject");...

49 49 JSP: Java Server Page (Section 7.8) JSP (exécuté sur le serveur) Javascript (exécuté dans le browser) http ://java.sun.com/products/jsp/docs.html voir Servlets and JavaServer Pages: A Tutorial

50 50 Comparaison servlettes - JSPs public class Test extends HttpServlet { public void doGet (request, response) { out.println (" "); out.println ( x.toString() ); out.println (" "); }

51 51 Création dune JSP JSP ( code ) ( + ) ( html ) html Servlet Java code serveur browser html Servlet Java source JSP compilateurJava compilateurExécution Réseau

52 52 File Example <% code Java %> Nouvelle valeur de l'attribut: Exemple dune page JSP (Vue globale)

53 53 Page JSP: déclaration

54 54 Affichage dune valeur de variable: Affichage du retour dune méthode: <% // Java code out.println( "Text " ); %> Page JSP: affichage

55 55 Conditional statements Error:

56 56 Conditional statements ( code généré ) if (error!=null) { out.print( Error:); out.print(error.message(); }

57 57 URL dune JSP

58 58 request, response et session sont définis par défaut dans une JSP Autres instructions JSP

59 59 Standard Tags JSP jsp:include jsp:useBean jsp:setProperty jsp:getProperty jsp:forward jsp:plugin http ://java.sun.com/products/jsp/docs.html Voir 2.0 PDF ou HTML et Servlets and JavaServer Pages: A Tutorial

60 60 Applet

61 61 Session / Java bean class InputForm { int attribute; // getter/setter créés au moyen dEclipse }

62 62 Définition: Utilisation: Utiliser un tag non standard

63 63 package pack; import java.io.IOException; /** * name = "myTag" * description = "A test class for tags" */ public class myTag extends TagSupport { public int doStartTag() { JspWriter out = pageContext.getOut(); out.println("I am a tag"); return 33; } Classe tag Correspondante

64 64 ?xml version="1.0" encoding="UTF-8"?> xdoclet-build myTag pack.myTag Créé par les xDoclets Description dun tag: MyTag.tld

65 65 Où se retrouve le fichier JSP compilé en Java? C:\jboss-4.0.0\server\default\work… (nest compilé que lorsquon lappelle)

66 66 Java bean package p; public class Result implements Serializable { public Result() { } // optionnel int xxx; public int getXxx() { return xxx; } public void setXxx(int xxx) { this.xxx = xxx; } Dans Eclipse: sélectionner int xxx clic-droit sur la sélection Source > Generate Getter…

67 67 Utilisation dune session et dun Java bean Page HTMLServletPage JSPServlet Java bean sendRedirect Session client (cookies)

68 68 Java Bean Résultat Architecture de lexercice 1 Page.jsp Affichage résultat Nouvelle entrée Servlette.java Calcul

69 69 Même Page.jsp Java bean Résultat Architecture de lexercice 2 Page.jsp Calcul + Affichage résultat Nouvelle entrée Page.jsp Calcul + Affichage résultat Nouvelle entrée

70 70 Database access with the help of persistent objects EJB: Enterprise Java Beans

71 71 Web Application (J2EE) JBoss Container Container Entity EJB Browser Entity EJB Session EJB Tomcat x.html Network Client Server DB Servlet proxies

72 72 Client-server Application (J2EE) JBoss Container Container Entity EJB Client Entity EJB Session EJB Network Server Client DB proxies

73 73 CMP entity beans (Container Managed Persistency) BMP, Bean Managed Persistency will not be studied as there are better alternatives

74 74 Specification of CMP entity beans in WebLang CMP bean:relations methods attributes finders / creators

75 75 Definition of an object in WebLang cmpbean Town { package geo; String name; // DB attributes int numero; public void myMet (String s) { System.out.println(s); } // creators - finders }

76 76 cmpbean Person { package beans; String firstName; String lastName; // attributes = DB columns int age; public Person createPerson (String firstName, String lastName ); // age not initialised } // the arguments of the create must correspond // to the attributes. They are stored in the latter. CMP Bean: method create

77 77 Creation and use of an object in WebLang Town t ; Country c ; t = townHome.create("Lausanne"); c = countryHome.create("Switzerland"); System.out.println( t.getName() ); c.setName( "Suisse" );

78 78 CMP Bean: finder method Town findByName (String s) { query = "SELECT OBJECT(o) FROM Town o WHERE o.name=?1" } // more details later

79 79 Find an object in WebLang Town t ; try { t = townHome.findByName("Lausanne"); } catch (javax.ejb.FinderException fe) { t = townHome.create("Lausanne"); } System.out.println( t.getNumber() );

80 80 Servlet using a bean servlet myservlet { package servlets; public void newPerson ( PrintWriter out, String firstName, String lastName, int age) throws Exception { Person aPers; aPers = personHome.createPerson (firstName, lastName); aPers.setAge(age); } // it is a simple means to test CMP beans, an html // file that calls this servlet is created automatically

81 81 Java Client (remote) jclient Ouf { package clientPack; public void method1 (String s1, String s2) { Person aPers; Course aCourse; aPers = personHome.createPerson("a", s1); aCourse = courseHome.createCourse("prof", s2); } // WebLang generates automatically a remote access

82 82 Reading the HSQLDB database Select: service=Hypersonic (fifth line under jboss) Select invoke (below startDatabaseManager) Look at the task bar and let the DB window appear. Click View/Refresh tree in this window Examine the tables (Command > Select …)

83 83 Fichiers auxiliaires des CMP entity beans (générés par WebLang et par XDoclet)

84 84 Files generated by WebLang and by the xDoclets src/control Game.java GameCMP.java GameLocalHome.java GameLocal.java GameHome.java GameUtil.java sources of the beans interfaces of the proxies

85 85 servlet other EJB Parts of a CMP entity bean XxxxLocal userMethods XxxxLocalHome create findByPrimaryKey EJBContainer XxxxEntityBean Xxxx ejbCreate ejbPostCreate ejbFindByPrimaryKey ejbLoad ejbStore userMethods

86 86 XxxxHomeProxy create findByPrimaryKey EJB XxxxObjectProxy userMethods Instantiation of a persistent object client servlet bean InitialContext lookup EJB XxxxObjectProxy userMethods XxxxObjectProxy userMethods EJB 1 2 3

87 87 Lookup to get a home proxy TownLocalHomeProxy townLocalHomeProxy = null; Context context = new InitialContext(); Object ref = context.lookup("store_PersonLocal"); townLocalHomeProxy = (TownLocalHomeProxy) PortableRemoteObject.narrow ( ref, TownLocalHomeProxy.class ); // narrow = cast from object to TownLocalHomeProxy

88 88 Class specifying a CMP entity bean package store.ejb; import javax.ejb.EntityBean; import javax.rmi.PortableRemoteObject; /** * name = "Customer" * display-name = "CMP Entity Bean" * description = "Description of the CMP Entity Bean" * view-type = "both" * type = "CMP" * primkey-field = "pk" * jndi-name = "store_CustomerRemote" * local-jndi-name = "store_CustomerLocal" * class ="java.lang.Long" */ public abstract class Customer implements EntityBean { EntityContext entityContext;...

89 89 CMP entity bean (primary key) /** * Attribute Pk is used as primary key by default. */ public abstract java.lang.Long getPk(); public abstract void setPk(java.lang.Long pk); /** * Default remove method RemoveException */ public void ejbRemove() throws RemoveException {}

90 90 CMP entity bean: Attributes /** * A pair of getter / setter for each attribute * * view-type = "both" */ public abstract String getAtt() ; /** * view-type = "both" */ public abstract void setAtt(String att) ;

91 91 Control files generated by the xDoclets META-INF ejb-jar.xml jboss.xml jbosscmp-jdbc.xml

92 92 Extrait de ejb-jar.xml (src/META-INF) CMP Entity Bean Patient predimed.PatientHome predimed.Patient predimed.PatientLocalHome

93 93 Fichier.ear deploy application.xml // références les fichiers ci-dessous Fichier.jar // contient les EJBs Fichier.war // contient les servlettes, passé à Tomat Test.jar data/jboss-app/application.xml Test.war /Test Fichier.ear

94 94 Session beans (Pattern de façade)

95 95 Collections gérées par une session bean collection JBoss Entity EJB Browser Entity EJB Session EJB Network Client Server Servlet proxies Entity EJB Entity EJB Les collections (relations) doivent être gérées dans des session ou CMP beans

96 96 Une session bean en WebLang sbean ControllerSession { package beans; state Stateful; // optionnel String st; public ControllerSession create (String st); public void newPerson (String firstName, String lastName, int age) throws Exception { Person aPers; aPers = personHome.createPerson(firstName, lastName, age);}

97 97 Bean Managed Transaction sbean ControllerSession { package beans; (Container managed transaction) transaction Bean; // optionnel, par défaut une CMT est créée state Stateful; // optionnel String st; public ControllerSession create (String st); public void newPerson (String firstName, String lastName, int age) throws Exception { Person aPers; beanContext.getUserTransaction().begin(); // optionnel aPers = personHome.createPerson(firstName, lastName, age); beanContext.getUserTransaction().commit(); // abort() } }

98 98 Relations entre CMP beans

99 99 1:N Relation WebLang, object view: cmpbean X { relation Y; } X Y N 1

100 100 1:1 Relation (bidirectionnelle) 234 WebLang: cmpbean X { relation Y; } cmpbean Y { relation X; } X Y

101 101 N:M Relation X Y

102 102 N:M Relation (toujours bidirectionnelle) WebLang: cmpbean X { relation Y; …attributes… } cmpbean Y { relation X; …attributes… }

103 103 xdoclets pour les relations /** * Implementation of the relationship: getCollection * view-type = "local" * name="Courses-Students-NM" * role-name="Courses-N-role" * target-ejb="Students" * target-role-name="Students-M-role" * target-multiple="yes" * style="relation-table" * table-name="CoursesXStudents" * related-pk-field = "pk" * fk-column="students_pk" * fk-constraints = "false" * related-pk-field = "pk" * fk-column = "courses_pk" * fk-constraints = "false" */ public abstract java.util.Collection getStudentsN();

104 104 Operations concernant les relations entre beans (WebLang)

105 105 Relations utilisées dans les pages suivantes cmpbean Country { relation Town; } cmpbean Town { relation Country; }

106 106 Utilisation dune référence bidirectionnelle 1:1 Town t = townHome.create("Bern"); Country c = countryHome.create("Switzerland"); t.setIsLocatedIn(c); System.out.println( t.getIsLocatedIn().getName() ); // setIsLocatedIn est automatiquement définie quand on spécifie la relation isLocatedIn Country-Capital

107 107 Addition dun élément à une relation Town v ; Country c ; t = townHome.create("Lausanne"); c = countryHome.create("Switzerland"); t.setIsLocatedIn(c); // 1:1 side t = townHome.create("Bern"); c.addHasTown(t); // 1:N side Country (1) – Town (N)

108 108 Déposer une relation et y accéder Collection collection = aCountry.getHasTown(); Iterator it = collection.iterator(); while (it.hasNext()) { // Java 1.4 System.out.println( ( (Town) it.next() ).getName() ); }

109 109 Déposer une relation et y accéder Collection collection = aCountry.getHasTown(); for (Object o: collection) { // Java 1.6 System.out.println( ( (Town) o ).getName() ); }

110 110 addHasTown est introduit par WebLang void addHasTown(t) { getHasTown().add(t); } // standard add et remove de Collections // ajouté automatiquement par WebLang removeHasTown(t) { getHasTown().remove(t); } Les collections doivent être manipulées à lintérieur de transactions

111 111 Résumé des relations et de leurs méthodes indication in Xxxx Other end in Yyyy methods available in Xxxx Yyyyno relation Xxxx Xxxx Yyyy y = getElemX() setElemX(yyyy) Yyyyno relation Xxxx Yyyy y = getElemY() setElemY(yyyy) Yyyyno relation Xxxx Collection y = getCollY() setCollY(collection) addCollY(yyyy), removeCollY(yyyy) Yyyyno relation Xxxx Collection y = getCollY() setCollY(collection) addCollY(yyyy), removeCollY(yyyy)

112 112 Comparaisons entre objets CB h1 = cBHome.create("5"); CB h2 = cBHome.findH("5"); if (h1 == h2) ; // pas valable ! if (h1.getPrimaryKey().equals(h2.getPrimaryKey()) System.out.println("2 x the same bean"); if ( ((Long)h1.getPrimaryKey()).intValue() == ((Long)h2.getPrimaryKey()).intValue()) System.out.println("2 x the same bean");

113 113 Finders (voir exemple du paragraphe )

114 114 Finder retournant un objet ( WebLang ) Course findCourse (java.lang.String name) { query = "SELECT OBJECT(o) FROM Course o WHERE o.courseName=?1" }

115 115 Source dun finder /** * Pays CMP Entity Bean * * name = "Pays" * display-name = "CMP Entity Bean" * description = "Description of the CMP Entity Bean" * view-type = "both" * type = "CMP" * primkey-field = "pk" * jndi-name = "geo_PaysRemote" * local-jndi-name = "geo_PaysLocal" * class ="java.lang.Long" * signature = "java.util.Collection findByVilleAvecM (java.lang.String s)" * query = "SELECT OBJECT (p) FROM Pays p, IN (p.contient) v WHERE v.nom LIKE CONCAT(?1, '%')" */ public abstract class PaysBean implements EntityBean {

116 116 Build/classes/META-INF/ejb-jar.xml... findVille java.lang.String ...

117 117 Tester si un objet existe en WebLang Country c = null; try { c = countryHome.findByName("Switzerland"); } catch (javax.ejb.FinderException fe) { c = countryHome.create("Switzerland"); }

118 118 Finder retournant une collection java.util.Collection findCourses () { query = "SELECT OBJECT(o) FROM Course o" } Note: les collections retournées par les finders peuvent être manipulées dans servlets. ( ici la table entière )

119 119 Références cascadées 1:1 Option findOptionByProf (java.lang.String profName) { query = "SELECT OBJECT(s) FROM Option o WHERE o.course.profName=?1" } // le finder doit être inclus dans le CMP bean // qui définit lobjet retourné

120 120 Relation 1:1 retournant une collection de membres appartenant à la relation public java.util.Collection findCountryByCapital (java.lang.String capital) { query = "SELECT c.capital FROM Country c WHERE c.capital.name LIKE CONCAT('_', CONCAT(?1, '%)) " } // On utilise une collection, parce quon suppose que // plusieurs beans peuvent correspondre au même critère

121 121 Relation 1:N Country Town public java.util.Collection findCountryByTownName (java.lang.String name) { query = Country "SELECT OBJECT(c) FROM Country c, IN (c.contains) t WHERE t.name=?1" }

122 122 Relations 1:N cascadées Country : contains Town : hasNb Number public java.util.Collection findCountryByNumber (int number, java.lang.String name) { query = "SELECT OBJECT(n) FROM Country c, IN (c.contains) t, IN (t.hasNb) n WHERE c.name = CONCAT("%", ?2) AND n.value < ?1" }

123 123 Relations cascadées A 1:1 B 1:1 C 1:1 D - dd public A findAByX (java.lang.String name) { query = "SELECT OBJECT (o) FROM A o WHERE o.b.c.d.dd=?1" }

124 124 Relations cascadées An 1:N Bn 1:N Cn 1:N Dn - dd public java.util.Collection findA(java.lang.String name) { query = "SELECT OBJECT (o) FROM An o, IN(o.bnN) bx, IN(bx.cnN) cx, IN(cx.dnN) dx WHERE dx.dd=?1" }

125 125 Relations en cascade An 1:1 Bn 1:N Cn 1:1 Dn - dd public java.util.Collection findAn (java.lang.String name) { query = "SELECT OBJECT (o) FROM An o, IN(o.bn.cnN) cx WHERE cx.dn.dd=?1" } // à introduire dans un bean An (la query retourne un An)

126 126 Relations en cascade An 1:1 Bn 1:N Cn 1:1 Dn - dd public java.util.Collection findBn (java.lang.String s) { query = "SELECT o.bn FROM An o, IN(o.bn.cnN) cx WHERE o.aa=?1" } // à introduire dans un bean Bn car il retourne une // collection de Bn ( la query retourne un Bn )

127 127 Transactions

128 128 Transactions dans les session beans transaction Bean; La transaction nest pas gérée automatiquement, le développeur doit insérer le code qui la gère.

129 129 Relation N:M manipulée depuis une session bean CoursEtudiants N M Expérience: Enregistrer un étudiant dans un cours Voir si létudiant est visible depuis le cours

130 130 beanContext.getUserTransaction().begin(); s1.addCourse(c1); // s1, s2 are students and s1.addCourse(c2); // c1,c2 courses s1.addCourse(c3); s2.addCourse(c3); System.out.println("Additions terminées"); Thread.sleep(10000); // suspendue pendant 10 sec pour voir // dans la base de données for (Students s : c3.getStudentsN()) { System.out.println("c3.collection"+s.getName()); } beanContext.getUserTransaction().commit();

131 131 CMP Bean A CMP Bean B Transaction présente avant dentrer B Transaction crée par le conteneur pour B Transactions

132 132 Dans le CMP bean (WebLang) transaction RequiresNew; Dans la méthode du CMP bean beanContext.setRollbackOnly();

133 133 Type de transaction Transaction avant lexécution Réaction du conteneur Requiredprésente aucune est gardée une nouvelle RequiresNewprésente aucune une nouvelle Mandatoryprésente aucune est gardée erreur Types de transaction

134 134 Appels locaux/distants Les programmes situés sur des ordinateurs autres que le serveur peuvent accéder à une session beans ou une CMP entity beans de la même manière que les servlets ( mais par le biais de Xxx RemoteHomeProxy ) Il ne peuvent pas manipuler les relations des CMP beans (pour plusieurs raisons)

135 135 Classes / jclients de WebLang WebLang gèrent les home interfaces, les entités CMP et les noms des classes des session beans de même que les input/output channels dans la plupart des modules En particulier dans les jclients et dans les classes. Note:les classes doivent contenir lindication access Remote; si elles ne sont pas dans le serveur.

136 136 class or jclient Module jclient Ouf { package clientPack; inputchannel varName (topic, "TopicName") { … } void method1 (String s) { Person aPers; Course aCourse; aPers = personHome.createPerson(s+"pers"); // CMP bean aCourse = courseHome.createCourse(s+"course"); } void method2 () { List aList; String str = "Text = "+listHome.create().text(); // session bean System.out.println(str);}

137 137 Struts

138 138 Servlet JSP PersonManagementSportManagement person sport personName personForm sportName location Basic structure of struts sportForm The forms are saved in the HTTP session Under the name derived from the class ! Servlet

139 139 Output of data (same for input) Struts sportForm.setLocation("xxx") JSP sportForm location No direct connection !

140 140 Servlet JSP PersonManagementSportManagement person sport personName personForm sportName location Basic structure of struts sportForm The forms are saved in the client session Under the name derived from the class ! Servlet

141 141 /** name="personForm" */ public final class PersonForm extends ActionForm { private String name; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } } // ActionForm has code to fill in the form from the URL 1 Librairies Struts: Action Form ( = java bean )

142 142 JSP: input.jsp personForm.sportForm sportName // Plusieurs paramètres de laction sont définis dans struts-config.xml // en particulier une form est attribuée à cette action et name est le nom dun // champ de cette form 2 Librairie JSP pour Struts: HTML Form

143 143 public final class PersonManagement extends Action { PersonForm f; public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { try { f = (PersonForm) form; f.getName(); return (mapping.findForward("sport")); } catch(Exception e) { // trap exceptions that may occur in your servlet e.printStackTrace(); // you will get better error messages ! return (mapping.findForward("error")); } } } // Laction form passèe comme argument est automatiquement // remplie à partir des arguments de lURL 3 Struts: Action Servlet

144 144 (généré par xDoclet) Fichier auxiliaire: struts-config.xml

145 145 Action Forms CMP Beans PersonForm Main personForm[] Person Course Person[] finder ou getCollection Recrée une collection et copie ses éléments dans lautre collection // code prochaine page Action forms CMP beans

146 146 Action Forms CMP Beans PersonForm Main personForm[] per Person Course Person[] per Pseudo-code course.setPer( new ArrayList() ) for (each main.per[]) { x = personHome.create(per[].attributes) course.addPer(x) } PersonFormPerson

147 147 - Action forms, - arrays of action forms, - trees of action forms

148 148 Action In/out Input In/out PersonManagement SportManagement job person sport personName personForm jobName location sportForm[ ] jobForm[ ] jobName location jobName location sportForm Java beans composés jobName location jobName location sportName location Pas supporté jobName location jobName location jobName location sportName location // Toutes les Action Form envoyées à // une action doivent avoir le même type

149 149 /** name="personForm" */ public final class PersonForm extends ActionForm {... private SportForm sportForm; // sub-form public SportForm getSportForm () { return (this.sportForm); } public void setSportForm (SportForm sportForm) { this.sportForm = sportForm; } Tree of action forms

150 150 ( x[ ] or Collection or Set ) /** name="personForm" */ public final class PersonForm extends ActionForm {... private Collection sportForms; public Collection getSportForms () { return (this.sportForms); } public void setSportForms (Collection sportForms) { this.sportForms = sportForms; } Array of sub-action forms

151 151 In the action servlet f.getName(); In the JSP the form in which name is looked for is linked to the JSP by a definition introduced in struts-config.xml Reference to an attribute of an Action Form

152 152 In the action servlet f.getSportForm().getName(); In the JSP the form is linked to the JSP within struts-config.xml Reference to an attribute of a Sub-Action Form

153 153 In the action servlet (first element ! ) o = ((ArrayList) f.getSportForms(); name = ((SportForm) o.get(0)).getName(); // f is linked to the JSP in struts-config.xml In the JSP // The element passed to the property can be // an ArrayList or an array such as String[] Reference to an array of Sub-Action Forms

154 154 Tags in the JSP and the Struts // prints the value of the property on the page

155 155 HTML form in a JSP PetForm name submit

156 156 Array in an HTML form subName number check

207 207 Creation dun Web Service Laccès à une application est fait au moyen de servlettes développées dans le projet Axis et qui appellent lobjet désigné par lutilisateur

208 208 Test du service (après avoir compilé la classe) Service Explorer WebContent/wsdl/Xxx.wsdl > right click > Web Services > Test with Web Services Explorer JSP de test classe.java > right click > Web Services > Generate Sample JSPs

209 209 Top Down : Java bean service WSDL file (par exemple sur une page WEB qui décrit le service) On obtient un squelette à compléter

210 210 Web service en WebLang (seuls les types simples supportés) webservice Simple { package xxx; public int add (int i, int j) { return i+j; }

211 211 Transfer of data From an action form to a CMP bean and vice-versa

212 212 Action Forms CMP Beans PersonForm Main resultFormN Person Course personN finder or getCollection Recreates a collection and copies one into the other member by member // code next page Action forms CMP beans

213 213 Action Forms CMP Beans String courseName = result.getCourseForm().getName(); // reads an action form java.util.Collection coll = personHome.findPersonInCourse(courseName); java.util.Collection c = new ArrayList (); for (Person aPerson: coll) { // scan the collection of CMP beans PersonForm personF = new PersonForm(); personF.setFirstName(aPerson.getFirstName()); personF.setLastName(aPerson.getLastName()); c.add(personF); // creates the collection of action forms } result.setPersonFormN( c );

214 214 Checking which submit has been clicked If (submit.equals(OK)) {... } page supply { petForm.thingN [ ] (OK, Cancel) readwrite name; } }

215 215 Generated automatically WebLang modules Lottery application implemented with Struts Draw first a diagram with the html forms, the action forms, the state machine and the database CMP bean: Customer name struts: Lottery - register(String) - login() - displayResults() CMP bean: Token number Exercise html: lottery Start struts

216 216 EJB - Hibernate 3 Hibernate 3 allows the beans to be either attached to or detached from the database The beans can thus be used as action forms too, which avoids the tedious transfers from the beans to the action forms The version we will use is based on introduced in Java 1.5 See the page WebLang about Hibernate

217 217 Annotations (replace xDoclets) /** name="jeton" public class Jeton implements java.io.Serializable = GeneratorType.AUTO) public long getId() { return id; public loterie.Client getClient() { return (client); } Note: En WebLang, tous les ejb3 doivent se trouver dans le même package

218 218 WebLang module (same as cmpbean, but no finders, no creators: they are made in the users space) ejb3 MyCountry { package myPackage; relations (Town=1:N); String name; int number; public Country(String name) throws Exception { this.name = name; } public String toString() { String str = "Country id=" + getId() + " name=" + getName(); java.util.Collection tlist = getTownN(); for (Town town: tlist) { str = str + "\n Town=" + town; } return (str); }

219 219 Configuration parameters config { deploypath = "C:/jboss-4.0.0/server/standard/deploy/"; hibernate_driver = "org.hsqldb.jdbcDriver"; hibernate_url = "jdbc:hsqldb:hsql://localhost:1701"; // for the JBoss database as prepared here hibernate_username = "sa"; hibernate_password = ""; hibernate_dialect = "org.hibernate.dialect.HSQLDialect"; hibernate_dbauto = "create-drop"; // if present, // recreates the tables at each restart }here

220 220 Use of a Hibernate bean javax.persistence.EntityManager em; javax.persistence.EntityTransaction tx; em = hibernate_utility.Manager.open(); tx = em.getTransaction(); tx.begin(); Country c = new Country("Switzerland"); em.persist(c); c.setNumber(1291); // DB updated at commit tx.commit(); // tx.commit() or tx.rollback(); hibernate_utility.Manager.close();

221 221 Finding objects with Hibernate javax.persistence.Query qt; qt = em.createQuery( "select t from Town t where t.name=?"); qt.setParameter(1, name); try { town = (Town)qt.getSingleResult(); } catch (javax.persistence.EntityNotFoundException enf) { town = new Town(name); em.persist(town); }

222 222 Finding lists of objects with Hibernate javax.persistence.Query qt; qt = em.createQuery("select t from Town t"); try { townN = (Collection)qt.getResultList(); } catch (Exception e) { // some error }

223 223 Using Hibernate objects (size() not written - lazy evaluation) tx.begin();... proprietaire = qt.getSingleResult(); Collection c = proprietaire.getVoitureN(); // The elements of the... // collection are retrieved only when needed tx.commit(); for (Voiture v: proprietaire.getVoitureN()) { out.println(v.getName()); // accessed outside the transaction } 09:22:28,774 INFO [STDOUT] org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: package.Proprietaire.voitureN, no session or session was closed

224 224 Using the objects of a Hibernate relationship outside the transaction tx.begin();... owner = qt.getSingleResult(); owner.getCarN().size();... tx.commit(); required to force the computation (other functions may also be used) for (Car c: owner.getCarN()) { otherwise not available out.println(v.getName()); } Owner Car 1 N

225 225 Both Action form and Hibernate bean ejb3 MyCountry extends strutsStateMachine.StateForm { package myPackage; relations (Town=1:N); String name; int number; }

226 226 Create and Persist an Action Form // town is assumed to be a form filled in by the user town.setId(0); // be sure it has not been left // attached by some previous action javax.persistence.EntityManager em; javax.persistence.EntityTransaction tx; em = hibernate_utility.Manager.open(); tx = em.getTransaction(); tx.begin(); em.persist(town); tx.commit(); hibernate_utility.Manager.close(); }

227 227 Transaction store into the DB Transaction Transactions and display get from the DB display, let the user modify the data No transaction Java bean (ActionForm/EJB) Must reconnect the bean to a transaction

228 228 Reconnect an EJB3 to the DB tx.begin(); // a first call to a servlet em.persist(x); tx.commit(); …Displaying… tx.begin(); // a subsequent call y = em.merge(x); // copy x to a new y y.setName(new value); // and persists y tx.commit();

229 229 Handling a relationship tx.begin(); em.persist(owner); for (Car c: cars) { em.persist(c) owner.add(c); c.setCar(owner); // indispensable to introduce it into the DB } // because the reference is defined in table car tx.commit(); Owner Car 1 N

230 230 Merging a relationship (could be done by using cascade) tx.begin(); x = em.merge(owner); for (Car c: owner.getCarN()) { x.add(em.merge(c)); // reintroduce the merged } // objects into the new object owner = x; // optional: remettre lobjet dans son pointeur request.getSession().setAttribute(owner, owner); // et tx.commit(); // dans la servlet-session Owner Car 1 N x : Owner c : Car 1 N

231 231 SQL beans SQL beans have been devised at the EPFL: they present the same structure as Hibernate 3 (particularly within WebLang), but they only use JDBC and the standard SQL Much simpler to debug, as all statements may be traced within the debugger No home, the object must be created to hold the finder (instantiation by new)

232 232 SQL Bean Example sqlbean Town extends strutsStateMachine.StateForm { package appliT; relations ( Country = N:1, Country); String name; public long findPK_OfTown() throws Exception { query = "SELECT * FROM Town WHERE name=$name;" } } TownN { public void findN_TownList(String s) throws Exception { query = "SELECT * FROM Town WHERE name>$s" }

233 233 Use of an SQL bean // we assume that country has been created // and filled by the Struts mechanism case State_1: long pkC = country.findPK_OfCountry(); if (pkC!=0) { country.reloadAll(pkC); } else { country.store(); } country.addTownN(town); // town.setCountry(country); // either this line or the line // above; the second one is // called automatically

234 234 Finders TownN tn = new TownN(); try { tn.findTownList(N); } catch (weblangUtils.SQLException we) { System.out.println(Not found); } for (Town t: tn) { System.out.println(t.getName()); } …………………………………………………………….. TownN { String name; public void findTownList (String s) throws Exception { query = "SELECT * FROM Town WHERE name>$s" } }

235 235 Detached object Attached object pk!=0 Attached + linked + connected object pk!=0 rel!=0 Linked object pk==0 o.delete() o.findXx() o.store() o.set(null) o.remove(o1) o.set(o1) o.add(o1) o.set(null) o.remove(o1) o.set(o1) o.add(o1) o.reload(0) o.reloadAll() o.storeAll() o.deleteAll() o.reload() o.reloadAll() o.update() o.updateAll() o.delete() o.store() o.delete() o = new Xxx() FSM of the SQL beans o.reload(pk) pk=o.findPKXx()

236 236 States of the SQL objects Detached:The object has been instantiated Attached: The object has a corresponding set of data in the database Linked: The object is embedded in a structure, but it has no primary key Attached, linkedThe object is available in the database, and connected: as well as in memory, within some relationship

237 237 Operations of the SQL beans store Copies the data of the object into the database, new primary key inserted in the object findXxx Query method returning a DB row, the object must be instantiated before the method is called findPKXxx Returns the value of the primary key (or 0), method may also throw an exception reload(pk) Method copies the data of the object into a DB row with primary key pk update Dual of the reload, updates the database row that has the PK found in memory

238 238 More Operations delete Removes the data in the database, not the memory, resets the objects primary key set, add Establishes connections between remove the objects, the two directions of the relationship are handled storeAll Call all the objects bound by deleteAll a relationship (not recursively) reloadAll updateAll

239 239 RMI Application Client Server Xxxx (stub) RemoteXxxx interface Xxxx Xxxx (skeleton) interface Xxxx

240 240 RMI: inverse communication (by transmitting the stub) Client Server MyRemote (skeleton) MyRemote (stub) rmiregistry Transfer (stub) Transfer (skeleton) myRemStub

241 241 RMI Module rmi Test { package rmis; public void print (String s) { System.out.println("X "+s); } } jclient Client { package rmis; Test x;// as Test corresponds to an rmi interface, // x is automatically initialized RemoteTest y;// y is not automatically initialized, the client // must call new RemoteConnection(true) public void print (String s) { try { x.print(s); } catch (Exception e) { e.printStackTrace(); } } }

242 242 Software Engineering

243 243 Application / implementation Craig: ( ) Specifying software means components, interfaces, archit- ectures, or what is sometimes referred to as the "How". Specifying applications means features, capabilities, options, or what is sometimes referred to as the "What". So, it seems odd to me (i.e., Craig ) to use UML (a "how" language) as a universal specification language.

244 244 My View Library (Librarian, book shelves, quiet room) Soft Library (simulator) (terminals, server, software) Each time a book is borrowed in the real library, the librarian borrows a book here Software application (terminals, server, software) = Borrow a book Look for a user A book has been lost Check differences Sort books Reserve a book Actually, you want to describe the software, the how. The customer can often not read any schema and will require a fast prototype, which is indeed the software.

245 245 Administrator Struts Three tiers (overview) browseForm.petForm[ ] (form) basket.petFrom[ ] (form) PetOrder status = ordered OrderItems* (CMP+CMR) PetOrder status = awaitInvoice OrderItems* (CMP+CMR) PetOrder status = toBeChecked OrderItems* (CMP+CMR) file OrderForm.petForm[ ] not accept (form) Buying Struts 0 1 showBasket not confir- med browser (JSP) order- registered (JSP) showBasket (JSP) 2 SendSupplierPO MDBean 0 select login confirmed 1 OK areYouThe- Administrator (JSP) checkOrders (JSP) DisplayBusiness Layer Database + Dataflow DisplayBusiness Layer Queue

246 246 Exercise of Software Engineering (8) Creation of a stock exchange application. Customers are connected to the bank. The bank keeps a portfolio for each client, transmits the customer orders to the stock exchange. The stock exchange keeps an order book that contains the stocks that customers want to buy or sell, with the prices (or price range) they are willing to pay or get. Create a diagram that specifies a customer, a bank and a stock exchange, with CMP beans, queues, session beans… Create a diagram of the software system that will run the application, not of the application itself.

247 247 Exercice: Compléter la loterie pour que le client voie une annonce quand le manager a sélectionné les jetons Créer les fonctions qui permettent dentrer des jetons depuis le client Java (rich client)

248 248 Client Serveur cmpbean: Client String nom cmpbean: Jeton int numero attente int etat gagnant perdant sbean: AccesJetons - addJeton(Client, Jeton) - listeResultats(Client) 1N1N html: display_Enregistrement - enregistre(String) - login(String) html: display_Manager - tireJetons(int) servlet: Manager - tireJetons(int) - afficheJetons() servlet: GestionJeton - remplitJeton(int) - afficheResultats() servlet: Enregistrement - enregistre(String) - login(String) html généré Loterie Java bean: LotteryData - constantes générales - client html: display_GestionJeton - remplitJeton(int) - afficheResultats()

249 249 Loterie Browser Serveur cmpbean: Client String nom cmpbean: Jeton int numero attente int etat gagnant perdant 1N1N html: display_Manager - tireJetons(int) servlet: Manager - tireJetons(int) - afficheJetons() Java bean: LotteryData - constantes générales - client Client topic: testTopic listener: class: LoterieGUI (created with Visual Editor)

250 250 Loterie Browser Serveur cmpbean: Client String nom cmpbean: Jeton int numero attente int etat gagnant perdant 1N1N html: display_Manager - tireJetons(int) servlet: Manager - tireJetons(int) - afficheJetons() Java bean: LotteryData - constantes générales - client Client topic: testTopic listener: class: LoterieGUI - display: TextArea - login: TextField - tireJeton: TextField display(String) class: Business - login(String) - tireJeton(int) invokeLater sbean: ClientBean - login(String) - tireJeton(int)


Télécharger ppt "1 Documents > J2SE APIs > J2EE APIsJ2SE APIsJ2EE APIs"

Présentations similaires


Annonces Google