Cet article présente l’intégration de deux produits d’un de nos partenaires préférés : la base de données et le bus de service.
Nous allons montrer comment le Bus de Services (OSB – Oracle Service Bus) interagit avec le base de données (Oracle Database).
- Ce premier article montre comment l’OSB peut réagir à un événement de la base : inbound message.
- Un second article montrera comment déclencher une opération sur la base à partir de l’osb : outbound message.
Ces deux techniques s’appuient sur le monde Java et répondent à plusieurs problématiques comme l’accès aux systèmes d’information d’entreprise (eis), les transactions (XA), etc.
Nous nous intéressons ici au connecteur de type base de données, implémenté chez Oracle sous le nom : Oracle Database Adapter (Oracle JCA Adapter for Database).
Prérequis :
- Oracle Database
- Oracle SQLDeveloper
- Oracle JDeveloper
- Eclipse avec Oracle Enterprise for Eclipse
- Oracle Service Bus
Etape 1 – Préparer la base
Utilisez SQLDeveloper (à défaut SQL+ ou votre IDE habituel) et soumettez le script (ddl) ci-dessous pour créer les objets nécessaires à l’exercice.
Création du user :
create user demo identified by demo default tablespace users temporary tablespace temp; grant connect, resource to demo;
Création de la table :
connect demo/demo create table jcademo (value_to_change varchar2(32), mark_as_read number);
Préparez votre jeu de données : insertion et de validation (dml)
insert into jcademo values ('A',0); commit;
Etape 2 – Créer l’adapteur
Utilisez JDeveloper pour développer le connecteur JCA.
2.1 Créez un projet de type « Empty Composite ».
2.2 Faite glisser un Database Adapter dans le SCA composite sur la partie gauche du composite.xml.
La partie gauche permettra d’exploiter le composant en message inbound.
Suivez ensuite le wizard JDeveloper :
2.3 Choisissez le nom de votre connecteur.
2.4 Définissez une connexion vers le schéma de base défini précédemment.
Cette connexion sert uniquement lors de la conception.
(par exemple : jdbc:oracle:thin:@localhost:1521:xe, user de connexion : demo/demo)
2.5 Importez la table demo.
Il existe plusieurs types d’opérations :
- Delete the Row(s) that were Read
- Update a Field in the [Table_Name] Table (Logical Delete)
- Update a Sequencing Table
- Update an External Sequencing Table on a Different Database
- Control Table Strategy
- Update a Sequencing File
2.5.1 Dans notre exemple, nous utilisons la suppression logique de donnée (Logical delete aussi appelé « data polling ») par opposition à la suppression physique de données (physical delete) :
“Poll for New or Changed Records in a Table”.
2.5.2 Sélectionnez la table précédemment créée avec SQLDeveloper.
2.5.3 Choisissez une clef primaire logique.
Il ne s’agit pas d’une primary key de définition de table.
2.5.4 Cette exemple est basée sur une table unique : vous pouvez passer l’étape « Relationship ».
2.5.5 N’excluez pas de colonne de la requête.
2.5.6 Nous allons mettre à jour la colonne « MARK_AS_READ » pour signifier la prise en compte de la modification de donnée par l’osb (logical delete).
Choisissez deux valeurs représentatives :
- 0: pas de supression,
- 1: supression.
2.5.7 Polling
Passez Cette l’étape de configuration du polling ; non nécessaire pour notre exemple.
2.5.8 Définissions vos critères de SELECT
2.5.9 Advanced Options
2.5.10 Finish
Good job!
Etape 3 – Créer le service et le lier au message inbound
Cette fois-ci, utilisez Eclipse avec avec Oracle Enterprise Pack for Eclipse pour intégrer le connecteur dans l’OSB.
3.1 Ouvrez Eclipse et créez un nouveau projet de type Oracle Service Bus Configuration Project.
3.2 Créez un projet Oracle Service Bus Project.
3.3 Importez le connecteur créé précédemment.
3.3.1 Import >> Import.
3.3.2 Choisissez File System et recherchez le fichier jca créé avec JDeveloper.
3.3.3 Prenez les composants :
- xml,
- xsd,
- wsdl,
- jca.
3.4 Corrigez la description de service.
Vous constatez que le wsdl est en erreur.
Vous devez modifier le source pour faire pointer vers la bonne xsd.
3.5 Créez le service.
Vos efforts seront bientôt récompensés !
3.5.1 Cliquez droit sur le jca : Oracle Service Bus puis puis Generate Service.
3.5.2 Vous avez votre Business Service que vous pouvez utiliser tout à fait classiquement dans OEPE !
Etape 4 – Testez votre composant
Vous pouvez maintenant mettre à jour votre ligne :
update jcademo set value_to_change = 'B'
Vérifiez que le flag est mis à jour
select * from jcademo VALUE_TO_CHANGE MARK_AS_READ ---------------------- --------------- B 1
Voilà : l’information que vous venez de mettre à jour en base de donnée a déclenché un événement sur le Bus ‘Mark as read ».
Cet exemple est basé sur la version 11g des produits.
La technologie de la version 12 est changée et rend l’opération beaucoup plus simple.