Gestion de conflits par convention de nommage des fichiers en sortie de l'OSB

Dans cet article, nous allons aborder une méthode de spécification de convention de nommage des fichiers en sortie de l’Oracle Service Bus en répondant à cette question :

Comment puis-je éviter une collision dans la génération d’un nouveau fichier lorsqu’un fichier de même nom est déjà présent ?

Réponse : L’utilisation de la configuration des propriétés JCA
art-Capture2
Il existe une multitude de propriétés pouvant être utilisées pour aider à spécifier nos conventions de nommage de fichiers. Ces propriétés sont accessibles par le biais de l’utilisation d’adaptateurs de fichiers JCA.
Ici, nous allons nous accorder à décrire simplement 2 des propriétés dynamiques mises à disposition par JCA dans le cadre d’une gestion de conflits à la création de fichiers :

  • Append :
    Si la propriété est à « true », alors l’Oracle File et l’adaptateur FTP agrègent le message cible dans le message de même nom existant. Ainsi, si le fichier n’existe pas, cela créera un nouveau message. Cela permet ainsi d’éviter que le fichier soit écrasé en spécifiant l’opération à réaliser en cas de conflit.
  • FileNamingConvention :
    Propriété permettant de spécifier une convention de nommage structurée à l’aide de patterns.
    > Exemple :
    <property name= »FileNamingConvention » value= »%yyyyMMdd_HHmmSSss%_CR.xml »/>
    nom de la forme =>  » 20170404_163625_CR.xml

N.B : Afin de lutter contre une potentielle collision sur un fichier créé à la même unité de temps, on pourra y spécifier un numéro de séquence auto-incrémentale par le pattern %SEQ%.
> Exemple :
<property name= »FileNamingConvention » value= »%yyyyMMdd_HHmmSSss%_%SEQ%_CR.xml »/>
nom de la forme =>  » 20170404_163625_1_CR.xml
Le fichier de configuration JCA utilisé pourra donc être de la forme suivante :

<adapter-config name="CR" adapter="File Adapter" wsdlLocation="../wsdl/CR.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
  <connection-factory location="eis/HAFileAdapter" adapterRef=""/>
  <endpoint-interaction portType="Write_ptt" operation="Write">
    <interaction-spec className="oracle.tip.adapter.file.outbound.FileInteractionSpec">
      <property name="PhysicalDirectory" value="/OSB/CR/output"/>
      <property name="FileNamingConvention" value="%yyyyMMdd_HHmmSSss%_%SEQ%_CR.xml"/>
      <property name="Append" value="false"/>
      <property name="NumberMessages" value="1"/>
    </interaction-spec>
  </endpoint-interaction>
</adapter-config>