Your SlideShare is downloading. ×

Ecl j2ee-igc2

180

Published on

OpenROAD – Serveur d’Application Plateforme J2EE

OpenROAD – Serveur d’Application Plateforme J2EE

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
180
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ECL IP’S Software OpenROAD – Serveur Présentation SOLUCOM d’Application Plateforme J2EECopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 2. Plate forme utilisée pour le POC  Serveur Linux  Kernel 2.6.9-67.0 (RedHat)  Base de données  Ingres 2006 Release 3 Linux Version II 9.2.0 (int.lnx/118)NPTL  Serveur d’application J2EE  JONAS Application Server 4.8.6  Client OpenROAD  OpenROAD 4.1  Développement Java  Eclipse 3.2Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 3. Démo Portable Virtual Machine Serveur Linux Clients riches Ingres SGBD JOnAS AS Clients légersCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 4. Architecture du POC JoNAS Application Server Web Container EJB Container Web components Entreprise Java Beans - JSPs - ServletsOpenROAD Client Databases kerosene_java.ear Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 5. Architecture Projet EJB : kerosene_java  Package ker_ligne_devis_t  ker_ligne_devis_t : Interface Distante  ker_ligne_devis_tEJB : StateLess Session bean  ker_ligne_devis_tHome : Home Interface pour le bean ker_ligne_devis_t  Classes  ker_ligne_devis : Identique en déclaration à la classe OR  Servlets  WebLoadEdBud : Génération des résultats en HTML  XmlLoadEdBud : Générationdes résultats en XML  JSPs  loadedbud.jsp : Génération des résultats en HTML  ORLoadEdBud.jsp : Génération des résultats en raw HTTPCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 6. ker_ligne_devis_tEJB  Implémentation  public static Vector loadEdBud  Connexion à la base de données  Via JDBC  Construction de la requête  PrepareStatement  Execution de la requête  executeQuery  Stockage des données issues de la requête  Dans un vecteurCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 7. ker_ligne_devis_tHome  Role  Permet de réaliser les appels de l’EJB  Tous les servlets et JSP utilisent cette interface  Un bean est créé à partir de cette interface  Ce bean lance la méthode loadEdBud  Le vecteur est traité dans le servlet ou le jsp utilisant ce beanCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 8. Implémentation JDBC ker_ligne_devis_tHome Ingres 2006 r3 Base kero_bossCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 9. Implementation OpenROAD (1) Édition permettant de visualiser le budget par ressource Application Kérosène Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 10. Implementation OpenROAD (2)Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 11. Classe OR : cls_k_ligne_devis_t  Rassemble toutes les méthodes de chargement  Implémentation classique – load_ed_bud()  Implémentation via Xml – load_ed_bud_xml()  Implémentation via raw http – load_ed_bud_rawhttp()  Implémentation JNI – load_ed_bud_jni()  Les appels pour les pages html sont fait directement dans l’écranCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 12. Implémentation classique OR>DB load_ed_bud() cls_k_lignedevis_tres.load_ed_bud(flgfc=cs_ker_cout_direct,i=byref(ind),nocommit=false,typedit=typedit,natedit=natedit); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 13. Implémentation Browser intégré (1)  Utilisation des JSP et Servlet générant un flux HTML Webbrowser.navigate(url) HTML Vector EJBsres.browser.navigate(web.url); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 14. Implémentation Browser intégré (2) Utilisation du servlet WebLoadEdBudCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 15. Implémentation Browser intégré (3) Utilisation du servlet WebLoadEdBud dans un navigateurCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 16. Implémentation Browser intégré (4) Utilisation du JSP loadedbud.jspCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 17. Implémentation Browser intégré (5) Utilisation du JSP loadedbud.jsp dans un navigateurCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 18. Implémentation Browser intégré (6) Attention à la gestion des erreursCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 19. Implémentation via raw HTTP (1) cls_k_lignedevis_t External Library Class Microsoft XMLHTTP Vector EJBsurl=http://192.168.0.6:9000/kerosene_java/ORLoadEdBud.jsp?cdentite=+g_etude.cdentite+&cdetude=+g_etude.cdetude+&cdsel=+varchar(g_etude.cdsel)+&flgfc=+varchar(cs_ker_coures.load_ed_bud_rawhttp(url=url); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 20. Implémentation via raw HTTP (2) Utilisation du JSP ORLoadEdBud.jsp dans un navigateurCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 21. Implémentation via raw HTTP (3) Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_rawhttp method load_ed_bud_rawhttp(url=varchar(2000) not null) = declare i=integer not null;j=integer not null; tok=u_token_str_t;resp=u_token_str_t; str=stringobject;resp_str=stringobject; xm=xml!xmlhttp; External library class MSXMLHTTP tmp=stringobject; { xm.open(GET,url,false); xm.send(); Construction, Appel, stockage du retour dans un stringobject resp_str=xm.responseText; resp.explode(l=resp_str,token=hc_newline); for i=1 to resp.t.lastrow do tmp.value=resp.t[i].token; tok._clear(); tok.explode(l=tmp,token=;); if(tok.t.lastrow!=10)then continue; endif; Transformation j=j+1; :$c.t[j].flgfc=int4(tok.t[1].token); :$c.t[j].cdres=tok.t[2].token; :$c.t[j].cdrubnt=tok.t[3].token; … endfor; }Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 22. Implémentation via Xml (1) cls_k_lignedevis_t ExtLib MSXmlHttp XML Vector XML External Library Class EJBs Microsoft XMLHTTPurl=http://192.168.0.6:9000/kerosene_java/XmlLoadEdBud.jsp?cdentite=+g_etude.cdentite+&cdetude=+g_etude.cdetude+&cdsel=+varchar(g_etude.cdsel)+&flgfc=+varchar(cs_ker_cores.load_ed_bud_xml(url=url); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 23. Implémentation via Xml (2) Utilisation du servlet XmlLoadEdBud dans un navigateur -> Xml OutputCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 24. Implémentation via Xml (3)  Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_xmlmethod load_ed_bud_xml(url=varchar(2000) not null)=declarexm=xml!xmlhttp;nodelist = ixmldomnodelist default null;dxml=xml!domdocument; External library class MSXMLHTTPi=integer not null;j=integer not null;k=integer not null;resp_str=stringobject;{ xm.open(GET,url,false); xm.send(); Construction, Appel, stockage du retour dans un stringobject puis dans object xml resp_str=xm.responseText; dxml.loadXML(resp_str); Traitement du flux XML k=dxml.selectnodes(/records/record).length; nodelist=dxml.selectnodes(//records/record); for i=0 to k-1 do j=j+1; :$c.t[j].flgfc=int4(nodelist.item(i).SelectSingleNode(flgfc).text); :$c.t[j].cdres=nodelist.item(i).SelectSingleNode(cdres).text; :$c.t[j].cdrubnt=nodelist.item(i).SelectSingleNode(cdrubnt).text; :$c.t[j].lbres=nodelist.item(i).SelectSingleNode(lbres).text; Affectation :$c.t[j].cduo=nodelist.item(i).SelectSingleNode(cduo).text; :$c.t[j].qtres=float8(nodelist.item(i).SelectSingleNode(qtres).text); :$c.t[j].mtres=float8(nodelist.item(i).SelectSingleNode(mtres).text); :$c.t[j].mttotal=float8(nodelist.item(i).SelectSingleNode(mttotal).text); endfor;} Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 25. Implémentation via JNI (1) JNI/DLL cls_k_lignedevis_t Vector EJBsurl=http://192.168.0.6:9000/kerosene_java/XmlLoadEdBud.jsp?cdentite=+g_etude.cdentite+&cdetude=+g_etude.cdetude+&cdsel=+varchar(g_etude.cdsel)+&flgfc=+varchar(cs_ker_cores.load_ed_bud_xml(url=url); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 26. Implémentation via JNI (2)  Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_jnimethod load_ed_bud_jni(url=varchar(2000) not null)=declarei=integer not null;j=integer not null;tok=u_token_str_t;tmp=stringobject;{ callproc p4_loadedbud(t=byref(t)); Appel de la l3g encapsulée par une l4gl for i=1 to t.lastrow do tmp.value=t[i].lg; tok._clear(); tok.explode(l=tmp,token=|); curmethod.trace(text=varchar(tok.t.lastrow)); if(tok.t.lastrow!=9)then continue; endif; j=j+1; :$c.t[j].flgfc=int4(tok.t[1].token); :$c.t[j].cdres=tok.t[2].token; :$c.t[j].cdrubnt=tok.t[3].token; :$c.t[j].lbres=tok.t[4].token; :$c.t[j].cduo=tok.t[5].token; Affectation :$c.t[j].qtres=float8(tok.t[6].token); :$c.t[j].mtres=float8(tok.t[7].token); :$c.t[j].resdivcoef=float8(tok.t[8].token); :$c.t[j].mttotal=float8(tok.t[9].token); endfor;} Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 27. Implémentation via JNI (3)  Extrait du Code de la dllDLLIMPORT int p3_loadedbud (ah)long ah;{ int i,j; JNIEnv * env; JavaVM * jvm; jclass clsH=NULL; jmethodID midGet=NULL; jobject jobjRetData = NULL; jsize len; const char *str; jobject myobj; env = create_vm(&jvm); Création de la machine virtuelle if (env == NULL) return 1; clsH = (*env)->FindClass(env,"ker_ligne_devis_t/ker_ligne_devis_tClient"); Recherche de la classe à appeler if (clsH != NULL) midGet= (*env)->GetStaticMethodID(env,clsH, "ReturnBud", "()Ljava/lang/Object;"); Recherche de la méthode à appeler if(midGet != NULL){ jobjRetData = (jobject)(*env)->CallStaticObjectMethod(env,clsH, midGet, NULL); len=(*env)->GetArrayLength(env,jobjRetData); Appel de la méthode for(j=0;i<len;j++) { i++; myobj = (*env)->GetObjectArrayElement(env, jobjRetData,j); str = (*env)->GetStringUTFChars(env, myobj, 0); Communication vers OpenROAD IIG4irInsRow(ah,i,0,0,0); Chargement direct d’un tableau if (IIG4chkobj(ah,3,i,2) == 0) { IIG4saSetAttr("lg",(short *)0,1,32,0,str); } } } int n = (*jvm)->DestroyJavaVM(jvm); return (0);} Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 28. Conclusions (1) POC réussi Plusieurs solutions possibles Solutions techniquement viables Temps pour adapter les écrans Kérosène faible Architecture des dev kérosène ~= « java like » Implémentation Xml vraiment très élégante Communications bi directionnelle (param/data)Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 29. Conclusions (2) JNI possible pour les traitements complexes Pas de modification des écrans dans les implémentation rawhttp, xml, et JNI Attention à la gestion des erreurs -> écrans avec navigateurs intégrés Performances des SA, clustering impératif Préparation des applications OpenROAD impératifCopyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 30. Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software

×