ECL IP’S Software

                                              OpenROAD – Serveur
                                                Présentation SOLUCOM
                                             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
Démo
                                                                                               Portable
                                                                                         Virtual Machine
                                                                                      Serveur Linux




                                                                Clients riches


                                                                                 Ingres SGBD




                                                                                   JOnAS AS

                                                     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
                                                      Web components                Entreprise Java Beans
                                                            - JSPs
                                                            - Servlets




OpenROAD
  Client                                                                                                            Databases




                                                             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




                                                                             JDBC
                                                     ker_ligne_devis_tHome


                                                                                    Ingres 2006 r3
                                                                                    Base kero_boss




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



                                                                                                                          load_ed_bud()




                                                                                                         cls_k_lignedevis_t



res.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
Implémentation Browser intégré (1)
                                                                             Utilisation des JSP et Servlet générant un flux HTML



                                              Webbrowser.navigate(url)



                                                                             HTML                    Vector
                                                                                                                            EJBs




res.browser.navigate(web.url);




  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)




                                                                               cls_k_lignedevis_t




                                                                                                                                                        External
                                                                                                                                                        Library Class
                                                                                                                                                        Microsoft XMLHTTP




                                                                   Vector
                                                 EJBs

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_cou
res.load_ed_bud_rawhttp(url=url);


     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;                                                                           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
Implémentation via Xml (1)




                                                                               cls_k_lignedevis_t


                                                                                                                                 ExtLib
                                                                                                                                MSXmlHttp


                                                                                                                                            XML




                                                                    Vector                                                     XML                       External
                                                                                                                                                         Library Class
                                               EJBs                                                                                                      Microsoft XMLHTTP

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_co
res.load_ed_bud_xml(url=url);


     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
Implémentation via Xml (3)
         Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_xml


method load_ed_bud_xml(url=varchar(2000) not null)
=
declare
xm=xml!xmlhttp;
nodelist = ixmldomnodelist default null;
dxml=xml!domdocument;
                                                                                                                External library class MSXMLHTTP
i=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
Implémentation via JNI (1)


                                                                                                                                                               JNI/DLL




                                                                               cls_k_lignedevis_t




                                                                    Vector
                                               EJBs

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_co
res.load_ed_bud_xml(url=url);


     Copyright ECL IP’S Software & Services - 1998-2008                                                                                       Présentation ECL IP’S Software
Implémentation via JNI (2)
         Extrait du Code de la classe cls_k_ligne_devis_t methode load_ed_bud_jni


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));                                     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
Implémentation via JNI (3)
        Extrait du Code de la dll
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);                                                                        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
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
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ératif

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

Ecl J2ee Igc2

  • 1.
    ECL IP’S Software OpenROAD – Serveur Présentation SOLUCOM d’Application Plateforme J2EE Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 2.
    Plate forme utiliséepour 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
  • 3.
    Démo Portable Virtual Machine Serveur Linux Clients riches Ingres SGBD JOnAS AS Clients légers Copyright 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 - Servlets OpenROAD 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 HTTP Copyright 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 vecteur Copyright 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 bean Copyright 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_boss Copyright 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) CopyrightECL 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’écran Copyright 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_t res.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 EJBs res.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 WebLoadEdBud Copyright 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 navigateur Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 16.
    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
  • 17.
    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
  • 18.
    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
  • 19.
    Implémentation via rawHTTP (1) cls_k_lignedevis_t External Library Class Microsoft XMLHTTP Vector EJBs 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_cou res.load_ed_bud_rawhttp(url=url); Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 20.
    Implémentation via rawHTTP (2)  Utilisation du JSP ORLoadEdBud.jsp dans un navigateur Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 21.
    Implémentation via rawHTTP (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 XMLHTTP 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_co res.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 Output Copyright 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_xml method load_ed_bud_xml(url=varchar(2000) not null) = declare xm=xml!xmlhttp; nodelist = ixmldomnodelist default null; dxml=xml!domdocument; External library class MSXMLHTTP i=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 EJBs 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_co res.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_jni 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)); 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 dll 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); 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ératif Copyright ECL IP’S Software & Services - 1998-2008 Présentation ECL IP’S Software
  • 30.
    Copyright ECL IP’SSoftware & Services - 1998-2008 Présentation ECL IP’S Software