Ecl j2ee-igc2

Post on 07-Jul-2015

219 views 0 download

description

OpenROAD – Serveur d’Application Plateforme J2EE

Transcript of 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

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