View
287
Download
7
Category
Preview:
DESCRIPTION
OpenROAD – Serveur d’Application Plateforme J2EE
Citation preview
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Présentation SOLUCOM
ECL IP’S Software
OpenROAD – Serveur d’Application Plateforme
J2EE
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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.2
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Serveur Linux
Ingres SGBD
JOnAS AS
Virtual Machine
Serveur Linux
Ingres SGBD
JOnAS AS
Virtual Machine
Serveur Linux
Ingres SGBD
JOnAS AS
Serveur Linux
Ingres SGBD
JOnAS AS
Virtual Machine
Démo
Portable
Clients riches
Clients légers
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Architecture du POC
JoNAS Application Server
Web Container EJB Container
- JSPs
- Servlets
Databases
OpenROAD Client
Web components Entreprise Java Beans
kerosene_java.ear
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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 HTTP
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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 vecteur
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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 bean
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation
Ingres 2006 r3 Base kero_boss
ker_ligne_devis_tHome JDBC
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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
Implementation OpenROAD (2)
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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’écran
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation classique OR>DB
res.load_ed_bud(flgfc=cs_ker_cout_direct,i=byref(ind),nocommit=false,typedit=typedit,natedit=natedit);
cls_k_lignedevis_t
load_ed_bud()
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (1)
res.browser.navigate(web.url);
Utilisation des JSP et Servlet générant un flux HTML
Webbrowser.navigate(url)
EJBs HTML Vector
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (2)
Utilisation du servlet WebLoadEdBud
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (3)
Utilisation du servlet WebLoadEdBud dans un navigateur
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (4)
Utilisation du JSP loadedbud.jsp
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (5)
Utilisation du JSP loadedbud.jsp dans un navigateur
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation Browser intégré (6)
Attention à la gestion des erreurs
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via raw HTTP (1)
url='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_cout_direct); res.load_ed_bud_rawhttp(url=url);
cls_k_lignedevis_t
External Library Class Microsoft XMLHTTP
Vector
EJBs
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via raw HTTP (2)
Utilisation du JSP ORLoadEdBud.jsp dans un navigateur
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
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; tmp=stringobject; { xm.open('GET',url,false); xm.send(); 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; 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; }
External library class MSXMLHTTP
Construction, Appel, stockage du retour dans un stringobject
Transformation
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via Xml (1)
url='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_cout_direct); res.load_ed_bud_xml(url=url);
cls_k_lignedevis_t
External Library Class Microsoft XMLHTTP
Vector XML
ExtLib MSXmlHttp
XML
EJBs
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via Xml (2)
Utilisation du servlet XmlLoadEdBud dans un navigateur -> Xml Output
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
method load_ed_bud_xml(url=varchar(2000) not null) = declare xm=xml!xmlhttp; nodelist = ixmldomnodelist default null; dxml=xml!domdocument; i=integer not null;j=integer not null;k=integer not null; resp_str=stringobject; { xm.open('GET',url,false); xm.send(); resp_str=xm.responseText; dxml.loadXML(resp_str); 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; :$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; }
Implémentation via Xml (3)
Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_xml
External library class MSXMLHTTP
Construction, Appel, stockage du retour dans un stringobject puis dans object xml
Affectation
Traitement du flux XML
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via JNI (1)
url='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_cout_direct); res.load_ed_bud_xml(url=url);
cls_k_lignedevis_t
JNI/DLL
Vector EJBs
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
method load_ed_bud_jni(url=varchar(2000) not null) = declare i=integer not null; j=integer not null; tok=u_token_str_t; tmp=stringobject; { callproc p4_loadedbud(t=byref(t)); 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; :$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; }
Implémentation via JNI (2)
Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_jni
Appel de la l3g encapsulée par une l4gl
Affectation
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Implémentation via JNI (3)
Extrait du Code de la dll
Création de la machine virtuelle
Communication vers OpenROAD Chargement direct d’un tableau
DLLIMPORT 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); if (env == NULL) return 1; clsH = (*env)->FindClass(env,"ker_ligne_devis_t/ker_ligne_devis_tClient"); if (clsH != NULL) midGet= (*env)->GetStaticMethodID(env,clsH, "ReturnBud", "()Ljava/lang/Object;"); if(midGet != NULL){ jobjRetData = (jobject)(*env)->CallStaticObjectMethod(env,clsH, midGet, NULL); len=(*env)->GetArrayLength(env,jobjRetData); for(j=0;i<len;j++) { i++; myobj = (*env)->GetObjectArrayElement(env, jobjRetData,j); str = (*env)->GetStringUTFChars(env, myobj, 0); IIG4irInsRow(ah,i,0,0,0); if (IIG4chkobj(ah,3,i,2) == 0) { IIG4saSetAttr("lg",(short *)0,1,32,0,str); } } } int n = (*jvm)->DestroyJavaVM(jvm); return (0); }
Recherche de la classe à appeler
Recherche de la méthode à appeler
Appel de la méthode
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Conclusions (1)
POC réussi
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)
Plusieurs solutions possibles
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Conclusions (2)
JNI possible pour les traitements complexes
Performances des SA, clustering impératif
Attention à la gestion des erreurs -> écrans avec navigateurs intégrés
Préparation des applications OpenROAD impératif
Pas de modification des écrans dans les implémentation rawhttp, xml, et JNI
Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
Recommended