SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Ecl j2ee-igc2

GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGCh'ti JUG
 
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGiLa plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGiDidier Donsez
 
Demystification de Spring Une histoire de Pattern.pptx
Demystification de Spring Une histoire de Pattern.pptxDemystification de Spring Une histoire de Pattern.pptx
Demystification de Spring Une histoire de Pattern.pptxletourneur2
 
Restlet et le multi-plateforme
Restlet et le multi-plateformeRestlet et le multi-plateforme
Restlet et le multi-plateformeJerome Louvel
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeMicrosoft
 
TelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeTelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeGhassen Chaieb
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tousMicrosoft
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaDocDoku
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp FrGregory Renard
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 

Similaire à Ecl j2ee-igc2 (20)

GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUG
 
La plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGiLa plateforme de services dynamiques OSGi
La plateforme de services dynamiques OSGi
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
Demystification de Spring Une histoire de Pattern.pptx
Demystification de Spring Une histoire de Pattern.pptxDemystification de Spring Une histoire de Pattern.pptx
Demystification de Spring Une histoire de Pattern.pptx
 
Restlet et le multi-plateforme
Restlet et le multi-plateformeRestlet et le multi-plateforme
Restlet et le multi-plateforme
 
Architecture j2 ee
Architecture j2 eeArchitecture j2 ee
Architecture j2 ee
 
1 Introduction
1 Introduction1 Introduction
1 Introduction
 
Introduction JavaEE
Introduction JavaEEIntroduction JavaEE
Introduction JavaEE
 
De A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicativeDe A à Z : Choisir une architecture pour sa solution applicative
De A à Z : Choisir une architecture pour sa solution applicative
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
TelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeTelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhicule
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous
 
Liste des stages 07 02 2017
Liste des stages 07 02 2017Liste des stages 07 02 2017
Liste des stages 07 02 2017
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp Fr
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
Mysql
MysqlMysql
Mysql
 

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é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
  • 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) 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’é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 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
  • 20. 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
  • 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 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’S Software & Services - 1998-2008 Présentation ECL IP’S Software