DB-Adapter : "Hein ? In… Invalid Data Type !?"

Lorsque vous travaillez avec le DB-Adapter, vous êtes amené à générer une XSD qui reflète le résultat de l’appel (une procédure PL-SQL par exemple). Lors d’une modification du format, vous vous retrouvez avec une erreur « ORA-00902: invalid datatype exception » ! Pourtant vous avez bien reporté et re-généré le format ! Alors pourquoi ?!

La cause de votre erreur

Apparemment, l’erreur est connue et présentée dans la documentation Oracle : cette erreur survient en effet après la modification d’un schéma en rapport avec le DBAdapter.
La solution proposée consiste à faire des modifications sur la configuration de la datasource :
If you re-create an Oracle Database PL/SQL statement or other schema object (such as a data type), or recompile a package body, and re-deploy a SOA composite that uses the Oracle Database Adapter, then the Oracle Database Adapter runtime will throw an ORA-00902: invalid datatype exception.
The workaround for this issue is to set the following Oracle WebLogic Server properties:

  • Data Source :
    • Initial Capacity: 0
    • Statement Cache Size: 0
  • Adapter Connection Pool:
    • Initial Capacity: 0

Et si ce n’est pas possible : redémarrer le serveur.
If your SOA composite is incompatible with these property settings, the workaround for this issue is to stop and start the Oracle WebLogic Server.
A première vue, ces solutions paraissent plutôt très contraignantes :

  • Soit on configure une Data Source avec des valeurs qui vont purement et simplement enlever tout cache sur la Data Source … vraiment dommage.
  • Soit on redémarre le serveur…

Ces solutions fonctionnent mais ne paraissent pas très acceptables dans le cadre d’un serveur de production…
Heureusement, il existe une alternative !

L’alternative

En effet, à la vue de la solution proposée, on peut en déduire que finalement cette erreur est liée à un cache associé à la Data Source.
Via la console d’administration, on peut se rendre sur les Data Sources concernées par la modification et les contrôler (Domaine -> Services -> Sources de données).

santony_invaliddatatype_02

Choisissez la Data Source à manipuler et rendez vous dans son onglet « contrôle ». Il ne reste plus qu’à réinitialiser (reset) le pool de connexion pour voir l’erreur disparaître !

santony_invaliddatatype_01

Conclusion… et mieux encore ?

L’alternative semble un très bon compromis : elle évite le redémarrage ou un paramétrage non désirable. La véritable que je me pose à ce jour, c’est pourquoi elle n’est pas proposée dans les solutions de la documentation… si un impact était possible car la Data Source est partagée, préparer une Data Source spécifique peut résoudre le problème. Cela restera pour le moment une interrogation…
De plus, il est possible d’éviter cette manipulation « manuelle » lors de livraisons en l’automatisant. En effet vous pourrez trouver un très bon article d’Edwin Biemont présentant un script permettant d’inclure l’opération lors de vos déploiements.

Sources

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *