SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
Utilisation de JAVA coté Application serveur
                     couplé avec Oracle Forms
                                      Hafed Benteftifa
                              www.degenio.com Novembre 2008

Introduction
Forms 10g permet l’utilisation du JAVA côté client et côté application serveur. L’utilisation
du JAVA au niveau serveur n’est pas aisée car on doit recourir à l’utilisation d’un bridge natif
PLS/SQL vers JAVA au niveau de Oracle Forms.




                                                                   & '    (      )     *
                                                                      Java coté AS


                                                                         !"#$%




                        Java coté client                                               Java coté BD




Dans ce tutoriel, on reprend un exemple décrit au niveau d’OTN et concerne l’utilisation d’un
web service commercial (StrikeIron.com) pour l’envoi d’un SMS. Le tutoriel Oracle peut être
trouvé sur :
http://www.oracle.com/technology/products/forms/htdocs/10gr2/howto/webservicefromforms
/ws_10_1_3_from_forms.html

Java avec Oracle Forms
Pour la plupart des développeurs Oracle Forms, il existe un problème pour situer exactement
le tier où l’on peut utiliser une classe JAVA. Comme le montre la figure ci-dessus, on peut
faire appel à une classe JAVA à tous les niveaux de l’architecture Forms 9i-10g.

Client
Au niveau client, on fera appel aux classes JAVA grâce à l’utilisation des PJC/Javabeans.
L’avantage de cette approche est que l’exécution se fait au niveau du client et ainsi les
ressources serveur seront disponibles pour d’autres tâches.


Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                   1
Serveur d’applications
Dans le cas où il est impossible de délocaliser les classes JAVA au niveau des clients, comme
par exemple le cas des services web, on sera dans l’obligation de fournir ces classes côté
serveur d’applications.

Cette approche nécessite la mise en place de wrappers PL/SQL-JAVA au niveau du module
Forms. Ceci permettra au module d’accéder aux classes JAVA par l’intermédiaire de
packages-procédures PL/SQL.

La délocalisation coté serveur d’applications implique le lancement de la JVM au niveau de
ce tier. L’impact de cette approche est que le serveur sera très sollicité et de ce fait un réglage
en termes de pooling JVM est requis.

Dans ce tutoriel, on utilisera des classes JAVA côté serveur d’applications.

Serveur Bases de données
Comme pour les procédures stockées, on sera aussi amené à créer des classes JAVA côté BD.
Des appels similaires que pour les appels PL/SQL seront utilisés pour accéder aux
fonctionnalités des classes stockées.
Néanmoins, cette approche semble ne pas être très utilisée.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                      2
Préparation des classes gestion des envois au niveau AS
Dans la section suivante, on montre les étapes nécessaires pour préparer les classes (JAR)
nécessaires pour l’envoi d’un SMS.

Il faut noter qu’un certain nombre de classes seront créées mais ne seront pas nécessaires pour
cet exemple. Ceci est dû au fait que lors de la création, on fait appel au WSDL1 du web
service.

On utilise l’outil de développement JDeveloper fourni par Oracle. La version utilisée dans ce
tutoriel est 10.1.3




1
 WSDL : web service definition language. Permet de définir les méthodes nécessaires à mettre en œuvre pour
exploiter ce web service. Cette étape est mise en place par le fournisseur de service.


Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                                 3
On choisira un nom d’application adéquat. Dans notre cas, on a appelé cette application
SMSApp.

Au niveau de cette application et selon la terminologie JDeveloper, on créera un certain
nombre de projets. Pour le moment, le projet qui contiendra les classes d’envoi SMS sera
appelé SMSGateway




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                               4
Pour spécifier le type de projet, on changera quelques options au niveau des propriétés comme
le montre la figure ci-dessus.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                               5
Dans le cas qui nous concerne et spécialement en raison du fait que nous allons importer les
classes créées au niveau de Forms developer, il est important de spécifier la JDK utilisée pour
l’exécution de nos FMX. Étant donné que la version actuelle de Forms est 10.1.2, la JDK à
utiliser est 1.4




Nous allons ensuite définir le type de projet. Dans notre cas, c’est l’utilisation d’un web
service commercial fourni par www.strikeiron.com. On sélectionnera l’option Business Tier
et spécialement l’option –Web services-

L’item qui nous intéresse est –web services proxy-




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                  6
Dans l’écran qui suit, on renseigne l’url de description du service web. Dans notre cas, celle-
ci est : http://ws.strikeiron.com/SMSAlerts4?WSDL

JDeveloper va se connecter pour lire le document de description du service web et par la suite
construira le modèle qui sera disponible au niveau de JDeveloper. Une classe ayant un préfixe
SoapClient sera alors visible. Elle contient les méthodes nécessaires pour l’envoi du SMS.

Noter que l’on peut aussi suivre la même approche pour un autre service commercial
(www.esendex.com décrit dans OTN).




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                      7
Pour tester notre setup, on peut lancer l’envoi d’un SMS à partir de JDeveloper. On apportera
les modifications suivantes :

Au niveau de la méthode main(), ajouter la section suivante.




Note : pour tester votre envoi, il est nécessaire de créer un compte d’essai sur
www.strikeiron.com. Vous recevrez un mot de passe pour votre userID.

Une fois que vous avez validé votre envoi et étant donné que l’on utilisera seulement la
méthode senMessage(), on effectuera une modification au niveau de la méthode d’envoi.
Ceci est nécessaire pour s’authentifier au niveau du service web lorsqu’on se connectera à
partir de Forms.




La dernière étape consiste à spécifier le déploiement de nos classes. On crée un modèle de
déploiement de JAR comme le montre la figure suivante :




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                 8
On veillera à inclure les options nécessaires et spécialement le répertoire de destination




Afin d’obtenir le JAR utilisable au niveau de Forms, on sélectionnera le modèle de
déploiement.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                 9
Le JAR qui a été généré, soit sms.jar sera mis dans le repertoire de notre installation
fonctionnelle de Forms. Dans notre cas, c’est /forms/java.




Afin de permettre la visibilité de nos JAR et des classes nécessaires au moment du runtime,
on devra modifier le classpath au niveau de default.env de Forms (ou de la configuration
nommée s’il en existe une).

Exemple de classpath :




Création du module Forms
Étape 1 : création du module
On devra créer un module simple au niveau de forms builder.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                  10
Étape 2 : importation des classes d’envoi de SMS

Au niveau de builder, cliquer sur l’option de menu, Importer classes JAVA tel que le montre
l’écran suivant.




Dans l’écran de sélection, on veillera à importer la classe adéquate. Pour se repérer, on
comparera avec les classes disponibles au niveau de JDeveloper.

Il est important de veiller à importer les méthodes et variables nécessaires.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                11
Si l’on compare au niveau de JDeveloper, on voit que l’on a besoin des objets LicenseInfo et
SubscriptionInfoHolder. On répète alors la même procédure d’importation pour ces deux
classes. Pour les localiser plus facilement, on devra au préalable noter les packages de chaque
classe et les sélectionner ensuite de l’arbre d’importation.

Pour finaliser, on devra aussi importer deux autres classes nécessaires au niveau de notre
module, à savoir String et Exception.

L’écran suivant montre l’importation de la classe Exception.




Suite à cette importation, on inspecte les unités de programmes de notre module.




La classe qui nous intéresse et à savoir GlobalSMSProSoapClient contient l’appel vers la
méthode JAVA qui se charge de l’envoi proprement dit.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                 12
A partir du bouton, on peut inspecter le When-Validate-Item et on a :




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-            13
Étape 3 : compilation et exécution




Conclusion
On a présenté dans ce tutoriel les étapes nécessaires pour l’utilisation d’une classe JAVA côté
serveur d’applications.

Cette approche peut être étendu à d’autres services web et la mise en place doit être conçue
selon les spécifications du fournisseur de services web.

Il est à noter que le fait d’utiliser des classes Java coté serveur d’applications implique une
étude de performance selon l’utilisation escomptée du service. En effet, à chaque fois qu’un
appel de classe est fait, une instance JVM sera lancée au niveau du serveur d’applications.
Dans le cas d’un très grand nombre d’appel, un engorgement des capacités processeur est à
prévoir et ceci peut conduire à un étouffement du serveur.

Dans ce cas précis, il est indiqué de faire un pooling JVM selon le nombre de connexions
possibles. Les réglages peuvent être faits par l’administrateur du serveur d’applications.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                      14
Annexe
On peut se poser la question de savoir si l’on peut éviter d’utiliser cette classe JAVA et
remplacer cette fonctionnalité par du PL/SQL.

Évidemment, dans le cas des services web, on peut facilement utiliser une procédure ou
fonction PL/SQL en remplacement de la méthodologie décrite ci-dessus. Il faut noter
néanmoins que ce tutoriel décrit les étapes pour la mise en place d’une classe JAVA et de ce
fait la même technique peut être réutilisée dans les cas où il est impossible d’utiliser du
PL/SQL.

On montre dans ce qui suit comment on peut envoyer un SMS en utilisant une procédure
stockée PL/SQL (Utilisation protocole HTTP GET sur fournisseur SMS www.wadja.com).

Noter que la même approche est décrite dans http://www.inside-oracle-
apex.com/2007/05/sending-sms-to-mobile-phone.html et que l’utilisation du package
UTL_HTTP facilite la mise en place de cette procédure. Le plus important est que la requête
soumise au service soit écrite suivant les spécifications du fournisseur de service SMS.

create or replace PROCEDURE sendSMS
   ( pRecipient IN VARCHAR2
   , pBody      IN VARCHAR2
   )
IS
     sms_key constant varchar2(40) := 'DB09D6XXXXXX';--clé à obtenir sur wadja.com
    --
    vRequest       Utl_Http.req;
    vGetText      VARCHAR2(500);
    vResponse      Utl_Http.resp;
    vResponseText VARCHAR2(2000);
    vErrorText     VARCHAR2(200);
BEGIN
    ----------------------------------------------------------------------------
    -- Build text for the get action.
    -- For a field description, see
    -- http://sms.wadja.com/partners/sms/default.aspx
    ----------------------------------------------------------------------------
    vGetText :=
        'key=' ||Utl_Url.escape(sms_key, TRUE)||CHR(38)||
        'msg='     ||Utl_Url.escape(pBody, TRUE) ||CHR(38)||
        'to='||Utl_Url.escape(pRecipient, TRUE)||CHR(38)||
       'from='||Utl_Url.escape('wadja.com',TRUE)||CHR(38)||
       'unicode='||Utl_Url.escape('no', TRUE)||CHR(38)||
       'send='||Utl_Url.escape('1', TRUE);
    vRequest := Utl_Http.begin_request
                  ( url    => 'http://sms.wadja.com/partners/sms/default.aspx'
                  , method => 'GET'
                  );
    Utl_Http.set_header
      ( r     => vRequest
      , name => 'Content-Type'
      , value => 'application/x-www-form-urlencoded'
      );
    Utl_Http.set_header
      ( r     => vRequest
      , name => 'Content-Length'
      , value => LENGTH(vGetText)
      );
    Utl_Http.write_text
      ( r    => vRequest
      , data => vGetText
      );
    vResponse := Utl_Http.get_response(vRequest);
    IF vResponse.status_code = '200'
    THEN


Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                 15
Utl_Http.read_text(vResponse, vResponseText);
           --
           IF vResponseText NOT LIKE '%batchID%'   --A verifier avec specs wadja.com
           THEN
                vErrorText := vResponseText;
           END IF;
    ELSE
         vErrorText := 'HTTP status: '||vResponse.status_code||'-
'||vResponse.reason_phrase;
    END IF;
    --
    Utl_Http.end_response(vResponse);
    --
    IF vErrorText IS NOT NULL
    THEN
         RAISE_APPLICATION_ERROR(-20001, 'Sending SMS failed with '||vErrorText);
    END IF;
END sendSMS;




Et au niveau de la form, faire l’appel en utilisant le numéro destinataire et texte du message.




Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms-                                  16

Contenu connexe

Tendances

J2eeintro
J2eeintroJ2eeintro
J2eeintromedbmb
 
Module 7 intégration d'ajax et les services web dans les applications asp.net
Module 7   intégration d'ajax et les services web dans les applications asp.netModule 7   intégration d'ajax et les services web dans les applications asp.net
Module 7 intégration d'ajax et les services web dans les applications asp.netMohammed Amine Mostefai
 
Présentation prime facesfinal
Présentation prime facesfinalPrésentation prime facesfinal
Présentation prime facesfinalAymen Drira
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring IntégrationArrow-Institute
 
Alphorm.com Formation PowerShell : Niveau Initiation
Alphorm.com Formation PowerShell : Niveau InitiationAlphorm.com Formation PowerShell : Niveau Initiation
Alphorm.com Formation PowerShell : Niveau InitiationAlphorm
 
Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Nazih Heni
 
Asp.net Présentation de L'application "Organizer"
Asp.net Présentation de L'application "Organizer"Asp.net Présentation de L'application "Organizer"
Asp.net Présentation de L'application "Organizer"Nazih Heni
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsVincent Perrin
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les ProfessionnelsFabien Potencier
 
Module 2 introduction à asp.net web forms
Module 2   introduction à asp.net web formsModule 2   introduction à asp.net web forms
Module 2 introduction à asp.net web formsMohammed Amine Mostefai
 
Building Entreprise App With Spring Portfolio
Building Entreprise App With Spring PortfolioBuilding Entreprise App With Spring Portfolio
Building Entreprise App With Spring Portfoliomaknihamdi
 
Apache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsApache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsOuadie LAHDIOUI
 

Tendances (20)

J2eeintro
J2eeintroJ2eeintro
J2eeintro
 
Module 7 intégration d'ajax et les services web dans les applications asp.net
Module 7   intégration d'ajax et les services web dans les applications asp.netModule 7   intégration d'ajax et les services web dans les applications asp.net
Module 7 intégration d'ajax et les services web dans les applications asp.net
 
Websphere
WebsphereWebsphere
Websphere
 
Présentation prime facesfinal
Présentation prime facesfinalPrésentation prime facesfinal
Présentation prime facesfinal
 
Tech Days Spring Intégration
Tech Days Spring IntégrationTech Days Spring Intégration
Tech Days Spring Intégration
 
Alphorm.com Formation PowerShell : Niveau Initiation
Alphorm.com Formation PowerShell : Niveau InitiationAlphorm.com Formation PowerShell : Niveau Initiation
Alphorm.com Formation PowerShell : Niveau Initiation
 
Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"
 
Wasxposefinal
WasxposefinalWasxposefinal
Wasxposefinal
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Asp.net Présentation de L'application "Organizer"
Asp.net Présentation de L'application "Organizer"Asp.net Présentation de L'application "Organizer"
Asp.net Présentation de L'application "Organizer"
 
Introduction àJava
Introduction àJavaIntroduction àJava
Introduction àJava
 
J2EE vs .NET
J2EE vs .NETJ2EE vs .NET
J2EE vs .NET
 
WebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet ApplicationsWebSphere Portal & Rich Internet Applications
WebSphere Portal & Rich Internet Applications
 
Netbeans Install
Netbeans InstallNetbeans Install
Netbeans Install
 
3 Jsf
3 Jsf3 Jsf
3 Jsf
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnels
 
Module 2 introduction à asp.net web forms
Module 2   introduction à asp.net web formsModule 2   introduction à asp.net web forms
Module 2 introduction à asp.net web forms
 
Building Entreprise App With Spring Portfolio
Building Entreprise App With Spring PortfolioBuilding Entreprise App With Spring Portfolio
Building Entreprise App With Spring Portfolio
 
Java Server Faces 2
Java Server Faces 2Java Server Faces 2
Java Server Faces 2
 
Apache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsApache camel et les entreprise integration patterns
Apache camel et les entreprise integration patterns
 

En vedette

En vedette (20)

Chapitre 12 et 13 de la " Lettre à tous les résignés et indignés qui veulent ...
Chapitre 12 et 13 de la " Lettre à tous les résignés et indignés qui veulent ...Chapitre 12 et 13 de la " Lettre à tous les résignés et indignés qui veulent ...
Chapitre 12 et 13 de la " Lettre à tous les résignés et indignés qui veulent ...
 
Cuadros o formatos
Cuadros o formatosCuadros o formatos
Cuadros o formatos
 
Trabajo final
Trabajo final Trabajo final
Trabajo final
 
Presentación2q
Presentación2qPresentación2q
Presentación2q
 
LAS VENTAJAS DE LAS REDES SOCIALES
LAS VENTAJAS DE LAS REDES SOCIALESLAS VENTAJAS DE LAS REDES SOCIALES
LAS VENTAJAS DE LAS REDES SOCIALES
 
Identifico el comerciante
Identifico el comercianteIdentifico el comerciante
Identifico el comerciante
 
Chapter 6 l'ancien et le soutien de l'eglise
Chapter 6 l'ancien et le soutien de l'egliseChapter 6 l'ancien et le soutien de l'eglise
Chapter 6 l'ancien et le soutien de l'eglise
 
Cabernets
CabernetsCabernets
Cabernets
 
Poland avril 2011
Poland avril 2011Poland avril 2011
Poland avril 2011
 
Jieun.ppt
Jieun.pptJieun.ppt
Jieun.ppt
 
ResearchTalks Vol. 5 - Repenser les food systems
ResearchTalks Vol. 5 -  Repenser les food systemsResearchTalks Vol. 5 -  Repenser les food systems
ResearchTalks Vol. 5 - Repenser les food systems
 
Le silence
Le silenceLe silence
Le silence
 
Social Commerce : Mythes et Réalités
Social Commerce : Mythes et RéalitésSocial Commerce : Mythes et Réalités
Social Commerce : Mythes et Réalités
 
Twitter
TwitterTwitter
Twitter
 
Diseño estructurado
Diseño estructuradoDiseño estructurado
Diseño estructurado
 
Proyecto plp
Proyecto plpProyecto plp
Proyecto plp
 
Netiqueta
NetiquetaNetiqueta
Netiqueta
 
Bellas plumas undesfiledemodas
Bellas plumas undesfiledemodasBellas plumas undesfiledemodas
Bellas plumas undesfiledemodas
 
Briller grâce aux talents latents
Briller grâce aux talents latentsBriller grâce aux talents latents
Briller grâce aux talents latents
 
2012_2_ciBasico_Tema2BibliotecaJoanRegla
2012_2_ciBasico_Tema2BibliotecaJoanRegla2012_2_ciBasico_Tema2BibliotecaJoanRegla
2012_2_ciBasico_Tema2BibliotecaJoanRegla
 

Similaire à Envoi sms oracle_forms_10g

Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbHINDGUENDOUZ
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EEYassine Badri
 
JEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdfJEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdfMahmoudiOussama
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbcKarim Amane
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfRachida19
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystémeAlgeria JUG
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?GreenIvory
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcabderrahim marzouk
 

Similaire à Envoi sms oracle_forms_10g (20)

Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
Java j2ee
Java j2eeJava j2ee
Java j2ee
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
JEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdfJEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdf
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbc
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Cours spring
Cours springCours spring
Cours spring
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdf
 
.NET DotNet CF - 3
.NET DotNet CF - 3.NET DotNet CF - 3
.NET DotNet CF - 3
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?Flex, une techno RIA incontournable pour les futures app web ?
Flex, une techno RIA incontournable pour les futures app web ?
 
[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker
 
Mysql
MysqlMysql
Mysql
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvc
 

Dernier

The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)IES VE
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensErol GIRAUDY
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311Erol GIRAUDY
 
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Infopole1
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleErol GIRAUDY
 
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapMaxime Huran 🌈
 

Dernier (6)

The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)The Importance of Indoor Air Quality (French)
The Importance of Indoor Air Quality (French)
 
Mes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examensMes succès sur Microsoft LEARN et examens
Mes succès sur Microsoft LEARN et examens
 
KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311KIT-COPILOT and more Article du 20240311
KIT-COPILOT and more Article du 20240311
 
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
Workshop l'IA au service de l'industrie - Présentation générale - Extra 14...
 
Les Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence ArtificielleLes Metiers de l'Intelligence Artificielle
Les Metiers de l'Intelligence Artificielle
 
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en BootstrapInstallation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
Installation de Sylius 2.0 et découverte du nouveau backoffice en Bootstrap
 

Envoi sms oracle_forms_10g

  • 1. Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Introduction Forms 10g permet l’utilisation du JAVA côté client et côté application serveur. L’utilisation du JAVA au niveau serveur n’est pas aisée car on doit recourir à l’utilisation d’un bridge natif PLS/SQL vers JAVA au niveau de Oracle Forms. & ' ( ) * Java coté AS !"#$% Java coté client Java coté BD Dans ce tutoriel, on reprend un exemple décrit au niveau d’OTN et concerne l’utilisation d’un web service commercial (StrikeIron.com) pour l’envoi d’un SMS. Le tutoriel Oracle peut être trouvé sur : http://www.oracle.com/technology/products/forms/htdocs/10gr2/howto/webservicefromforms /ws_10_1_3_from_forms.html Java avec Oracle Forms Pour la plupart des développeurs Oracle Forms, il existe un problème pour situer exactement le tier où l’on peut utiliser une classe JAVA. Comme le montre la figure ci-dessus, on peut faire appel à une classe JAVA à tous les niveaux de l’architecture Forms 9i-10g. Client Au niveau client, on fera appel aux classes JAVA grâce à l’utilisation des PJC/Javabeans. L’avantage de cette approche est que l’exécution se fait au niveau du client et ainsi les ressources serveur seront disponibles pour d’autres tâches. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 1
  • 2. Serveur d’applications Dans le cas où il est impossible de délocaliser les classes JAVA au niveau des clients, comme par exemple le cas des services web, on sera dans l’obligation de fournir ces classes côté serveur d’applications. Cette approche nécessite la mise en place de wrappers PL/SQL-JAVA au niveau du module Forms. Ceci permettra au module d’accéder aux classes JAVA par l’intermédiaire de packages-procédures PL/SQL. La délocalisation coté serveur d’applications implique le lancement de la JVM au niveau de ce tier. L’impact de cette approche est que le serveur sera très sollicité et de ce fait un réglage en termes de pooling JVM est requis. Dans ce tutoriel, on utilisera des classes JAVA côté serveur d’applications. Serveur Bases de données Comme pour les procédures stockées, on sera aussi amené à créer des classes JAVA côté BD. Des appels similaires que pour les appels PL/SQL seront utilisés pour accéder aux fonctionnalités des classes stockées. Néanmoins, cette approche semble ne pas être très utilisée. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 2
  • 3. Préparation des classes gestion des envois au niveau AS Dans la section suivante, on montre les étapes nécessaires pour préparer les classes (JAR) nécessaires pour l’envoi d’un SMS. Il faut noter qu’un certain nombre de classes seront créées mais ne seront pas nécessaires pour cet exemple. Ceci est dû au fait que lors de la création, on fait appel au WSDL1 du web service. On utilise l’outil de développement JDeveloper fourni par Oracle. La version utilisée dans ce tutoriel est 10.1.3 1 WSDL : web service definition language. Permet de définir les méthodes nécessaires à mettre en œuvre pour exploiter ce web service. Cette étape est mise en place par le fournisseur de service. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 3
  • 4. On choisira un nom d’application adéquat. Dans notre cas, on a appelé cette application SMSApp. Au niveau de cette application et selon la terminologie JDeveloper, on créera un certain nombre de projets. Pour le moment, le projet qui contiendra les classes d’envoi SMS sera appelé SMSGateway Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 4
  • 5. Pour spécifier le type de projet, on changera quelques options au niveau des propriétés comme le montre la figure ci-dessus. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 5
  • 6. Dans le cas qui nous concerne et spécialement en raison du fait que nous allons importer les classes créées au niveau de Forms developer, il est important de spécifier la JDK utilisée pour l’exécution de nos FMX. Étant donné que la version actuelle de Forms est 10.1.2, la JDK à utiliser est 1.4 Nous allons ensuite définir le type de projet. Dans notre cas, c’est l’utilisation d’un web service commercial fourni par www.strikeiron.com. On sélectionnera l’option Business Tier et spécialement l’option –Web services- L’item qui nous intéresse est –web services proxy- Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 6
  • 7. Dans l’écran qui suit, on renseigne l’url de description du service web. Dans notre cas, celle- ci est : http://ws.strikeiron.com/SMSAlerts4?WSDL JDeveloper va se connecter pour lire le document de description du service web et par la suite construira le modèle qui sera disponible au niveau de JDeveloper. Une classe ayant un préfixe SoapClient sera alors visible. Elle contient les méthodes nécessaires pour l’envoi du SMS. Noter que l’on peut aussi suivre la même approche pour un autre service commercial (www.esendex.com décrit dans OTN). Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 7
  • 8. Pour tester notre setup, on peut lancer l’envoi d’un SMS à partir de JDeveloper. On apportera les modifications suivantes : Au niveau de la méthode main(), ajouter la section suivante. Note : pour tester votre envoi, il est nécessaire de créer un compte d’essai sur www.strikeiron.com. Vous recevrez un mot de passe pour votre userID. Une fois que vous avez validé votre envoi et étant donné que l’on utilisera seulement la méthode senMessage(), on effectuera une modification au niveau de la méthode d’envoi. Ceci est nécessaire pour s’authentifier au niveau du service web lorsqu’on se connectera à partir de Forms. La dernière étape consiste à spécifier le déploiement de nos classes. On crée un modèle de déploiement de JAR comme le montre la figure suivante : Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 8
  • 9. On veillera à inclure les options nécessaires et spécialement le répertoire de destination Afin d’obtenir le JAR utilisable au niveau de Forms, on sélectionnera le modèle de déploiement. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 9
  • 10. Le JAR qui a été généré, soit sms.jar sera mis dans le repertoire de notre installation fonctionnelle de Forms. Dans notre cas, c’est /forms/java. Afin de permettre la visibilité de nos JAR et des classes nécessaires au moment du runtime, on devra modifier le classpath au niveau de default.env de Forms (ou de la configuration nommée s’il en existe une). Exemple de classpath : Création du module Forms Étape 1 : création du module On devra créer un module simple au niveau de forms builder. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 10
  • 11. Étape 2 : importation des classes d’envoi de SMS Au niveau de builder, cliquer sur l’option de menu, Importer classes JAVA tel que le montre l’écran suivant. Dans l’écran de sélection, on veillera à importer la classe adéquate. Pour se repérer, on comparera avec les classes disponibles au niveau de JDeveloper. Il est important de veiller à importer les méthodes et variables nécessaires. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 11
  • 12. Si l’on compare au niveau de JDeveloper, on voit que l’on a besoin des objets LicenseInfo et SubscriptionInfoHolder. On répète alors la même procédure d’importation pour ces deux classes. Pour les localiser plus facilement, on devra au préalable noter les packages de chaque classe et les sélectionner ensuite de l’arbre d’importation. Pour finaliser, on devra aussi importer deux autres classes nécessaires au niveau de notre module, à savoir String et Exception. L’écran suivant montre l’importation de la classe Exception. Suite à cette importation, on inspecte les unités de programmes de notre module. La classe qui nous intéresse et à savoir GlobalSMSProSoapClient contient l’appel vers la méthode JAVA qui se charge de l’envoi proprement dit. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 12
  • 13. A partir du bouton, on peut inspecter le When-Validate-Item et on a : Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 13
  • 14. Étape 3 : compilation et exécution Conclusion On a présenté dans ce tutoriel les étapes nécessaires pour l’utilisation d’une classe JAVA côté serveur d’applications. Cette approche peut être étendu à d’autres services web et la mise en place doit être conçue selon les spécifications du fournisseur de services web. Il est à noter que le fait d’utiliser des classes Java coté serveur d’applications implique une étude de performance selon l’utilisation escomptée du service. En effet, à chaque fois qu’un appel de classe est fait, une instance JVM sera lancée au niveau du serveur d’applications. Dans le cas d’un très grand nombre d’appel, un engorgement des capacités processeur est à prévoir et ceci peut conduire à un étouffement du serveur. Dans ce cas précis, il est indiqué de faire un pooling JVM selon le nombre de connexions possibles. Les réglages peuvent être faits par l’administrateur du serveur d’applications. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 14
  • 15. Annexe On peut se poser la question de savoir si l’on peut éviter d’utiliser cette classe JAVA et remplacer cette fonctionnalité par du PL/SQL. Évidemment, dans le cas des services web, on peut facilement utiliser une procédure ou fonction PL/SQL en remplacement de la méthodologie décrite ci-dessus. Il faut noter néanmoins que ce tutoriel décrit les étapes pour la mise en place d’une classe JAVA et de ce fait la même technique peut être réutilisée dans les cas où il est impossible d’utiliser du PL/SQL. On montre dans ce qui suit comment on peut envoyer un SMS en utilisant une procédure stockée PL/SQL (Utilisation protocole HTTP GET sur fournisseur SMS www.wadja.com). Noter que la même approche est décrite dans http://www.inside-oracle- apex.com/2007/05/sending-sms-to-mobile-phone.html et que l’utilisation du package UTL_HTTP facilite la mise en place de cette procédure. Le plus important est que la requête soumise au service soit écrite suivant les spécifications du fournisseur de service SMS. create or replace PROCEDURE sendSMS ( pRecipient IN VARCHAR2 , pBody IN VARCHAR2 ) IS sms_key constant varchar2(40) := 'DB09D6XXXXXX';--clé à obtenir sur wadja.com -- vRequest Utl_Http.req; vGetText VARCHAR2(500); vResponse Utl_Http.resp; vResponseText VARCHAR2(2000); vErrorText VARCHAR2(200); BEGIN ---------------------------------------------------------------------------- -- Build text for the get action. -- For a field description, see -- http://sms.wadja.com/partners/sms/default.aspx ---------------------------------------------------------------------------- vGetText := 'key=' ||Utl_Url.escape(sms_key, TRUE)||CHR(38)|| 'msg=' ||Utl_Url.escape(pBody, TRUE) ||CHR(38)|| 'to='||Utl_Url.escape(pRecipient, TRUE)||CHR(38)|| 'from='||Utl_Url.escape('wadja.com',TRUE)||CHR(38)|| 'unicode='||Utl_Url.escape('no', TRUE)||CHR(38)|| 'send='||Utl_Url.escape('1', TRUE); vRequest := Utl_Http.begin_request ( url => 'http://sms.wadja.com/partners/sms/default.aspx' , method => 'GET' ); Utl_Http.set_header ( r => vRequest , name => 'Content-Type' , value => 'application/x-www-form-urlencoded' ); Utl_Http.set_header ( r => vRequest , name => 'Content-Length' , value => LENGTH(vGetText) ); Utl_Http.write_text ( r => vRequest , data => vGetText ); vResponse := Utl_Http.get_response(vRequest); IF vResponse.status_code = '200' THEN Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 15
  • 16. Utl_Http.read_text(vResponse, vResponseText); -- IF vResponseText NOT LIKE '%batchID%' --A verifier avec specs wadja.com THEN vErrorText := vResponseText; END IF; ELSE vErrorText := 'HTTP status: '||vResponse.status_code||'- '||vResponse.reason_phrase; END IF; -- Utl_Http.end_response(vResponse); -- IF vErrorText IS NOT NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Sending SMS failed with '||vErrorText); END IF; END sendSMS; Et au niveau de la form, faire l’appel en utilisant le numéro destinataire et texte du message. Hafed Benteftifa- Envoi SMS à partir de module Oracle Forms- 16