Ecl j2ee-igc2

30

Click here to load reader

description

OpenROAD – Serveur d’Application Plateforme J2EE

Transcript of Ecl j2ee-igc2

Page 1: Ecl j2ee-igc2

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

Page 2: Ecl j2ee-igc2

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

Page 3: Ecl j2ee-igc2

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

Page 4: Ecl j2ee-igc2

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

Page 5: Ecl j2ee-igc2

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

Page 6: Ecl j2ee-igc2

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

Page 7: Ecl j2ee-igc2

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

Page 8: Ecl j2ee-igc2

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

Page 9: Ecl j2ee-igc2

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

Page 10: Ecl j2ee-igc2

Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software

Implementation OpenROAD (2)

Page 11: Ecl j2ee-igc2

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

Page 12: Ecl j2ee-igc2

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()

Page 13: Ecl j2ee-igc2

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

Page 14: Ecl j2ee-igc2

Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software

Implémentation Browser intégré (2)

Utilisation du servlet WebLoadEdBud

Page 15: Ecl j2ee-igc2

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

Page 16: Ecl j2ee-igc2

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

Page 17: Ecl j2ee-igc2

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

Page 18: Ecl j2ee-igc2

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

Page 19: Ecl j2ee-igc2

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

Page 20: Ecl j2ee-igc2

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

Page 21: Ecl j2ee-igc2

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

Page 22: Ecl j2ee-igc2

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

Page 23: Ecl j2ee-igc2

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

Page 24: Ecl j2ee-igc2

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

Page 25: Ecl j2ee-igc2

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

Page 26: Ecl j2ee-igc2

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

Page 27: Ecl j2ee-igc2

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

Page 28: Ecl j2ee-igc2

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

Page 29: Ecl j2ee-igc2

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

Page 30: Ecl j2ee-igc2

Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software