OSB : Utilisation de l’encodage de transfert en bloc

Fonctionnement de l’encodage de transfert en bloc

Au lieu d’être envoyée en une seule requête HTTP, un message peut être envoyé par bloc. Chaque bloc est transmis l’un à la suite de l’autre et se termine par le transfert d’un bloc vide pour signifié la fin.
Une des conséquences de ce mécanisme est que la taille complète du message transmise dans l’entête HTTP ne peut pas être renseignée et est remplacé par la valeur « Chunked transfer encoding »
Cette optimisation est pertinente principalement lors de l’envoi de message volumineux.

Utilisation de l’encodage de transfert en bloc au sein d’OSB

Lors de la création d’un « Business Service » de type WebService, l’utilisation le l’encodage de transfert en bloc est configuré par défaut pour utiliser l’encodage de transfert en bloc.
Pour accéder à ce paramétrage, se rendre dans la section de configuration « HTTP Transport »
Puis développer la zone des paramètres avancés « Advanced Setting »
La case à cochée « Use Chuncked Streaming Mode » est sélectionnée
osb_chunked_01
Cette configuration correspond à la partie ci dessous du code source du « Business Service »
<http:chunked-streaming-mode>true</http:chunked-streaming-mode>
Au niveau de la console OSB pour accéder à ce paramétrage se rendre dans la configuration du « Business Service »
La traduction française de l’option « Use Chuncked Streaming Mode » est « Utiliser le mode continu par tranches de mémoire »
osb_chunked_02
Ce paramétrage est modifiable directement depuis la console OSB et prit en compte lors de l’activation de la session Weblogic précédemment créée.

Erreurs liées à l’utilisation de l’encodage de transfert en bloc

Cependant certains serveurs ou progiciels ne supporte pas ce mode de transport.
Les 3 erreurs courantes pouvant être rencontrées sont les suivantes :

  • Client requests get a read timed out error
  • The BEA-380000 error « Request Entity Too Large » appears in the logs
  • The last executed OSB instance continuously retries every 5 minutes

L’erreur suivante peut être difficile a diagnostiquer :

<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-380000</con:errorCode>
<con:reason>Request Entity Too Large</con:reason>
<con:location>
<con:node>RouteNodeLeesDeclaratieCompleet</con:node>
<con:path>response-pipeline</con:path>
</con:location>
</con:fault>

En effet elle peut apparaître comme venant d’un message volumineux alors que même l’envoie un message d’une ligne le provoquera
La raison est l’absence de support de l’encodage de transfert en bloc ce qui provoque l’impossibilité d’interpréter la taille du message.

Conclusion

L’utilisation de l’encodage de transfert en bloc qui est défini par défaut défini un comportement optimal dans la majorité des cas. Cependant il n’est pas toujours supporté ou pertinent.