JCA Adapter: quand la base prend le bus

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.
exposedservices
Suivez ensuite le wizard JDeveloper :
acws1o4
 

2.3 Choisissez le nom de votre connecteur.
acws2o4

 

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”.
acws4o4

2.5.2 Sélectionnez la table précédemment créée avec SQLDeveloper.
acws5o13

 

2.5.3 Choisissez une clef primaire logique.

Il ne s’agit pas d’une primary key de définition de table.
acws6o13
 

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.
acws8o13

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).
acws9o13

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
acws12o13

 

2.5.9 Advanced Options
acws13o13

2.5.10 Finish

Good job!
exposedservices
 

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.
oepe1

 

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.
oepe4

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.