Hangende BPEL processen

Ik had pas geleden wat problemen met wait activities in BPEL. Bij grote loads op de SOA Suite bleek dat er regelmatig processen bleven ‘hangen’. Na wat rond zoeken op het OTN Forum, vond ik een post van Harald Reinmueller met een oplossingsrichting voor dit probleem.

Het blijkt dat de wait en onAlarm activities in BPEL worden afgehandeld met behulp van de open source Quartz library. Deze library levert timing functionaliteit. De BPEL Process Manager start standaard een aantal threads voor Quartz, die worden gebruikt voor de wait en onAlarm activities. Bij hoge belasting van de server kan het voorkomen dat al deze Quartz threads bezet zijn, waardoor nieuwe wait of onAlarm activities geen timer thread krijgen toegewezen. Het resultaat is dat het BPEL proces ‘hangt’.


Om dit probleem op te lossen moeten er twee akties worden ondernomen:

  1. Het upgraden van de Quartz library naar een nieuwere versie
  2. de configuratie van de Oracle SOA Suite OC4J container zodat er meer threads voor Quartz worden gestart

Ik heb het opgelost door Quartz 1.6.0 te downloaden vanaf hier, en deze uit te pakken in een tijdelijke directory op de server (in dit voorbeeld /home/oracle/quartz). Vervolgens heb ik de server.xml file van de SOA Suite container aangepast. Deze is te vinden op locatie $ORACLE_HOME/j2ee/<container>/config/server.xml, in mijn geval is de gebruikte container oc4j_soa. Zoek de volgende sectie:

<shared name="oracle.bpel.common" version="10.1.3">

Voeg in dit shared library gedeelte verwijzingen naar de twee Quartz JAR files toe:

<code-source path="/home/oracle/quartz/quartz-1.6.0.jar"/>
<code-source path="/home/oracle/quartz/lib/build/jdbc2_0-stdext.jar"/>

Herstart de applicatie server zodat de wijzigingen worden overgenomen. Effectief hebben we nu een nieuwere versie van de Quartz library op een plek eerder in het classpath gezet. Niet heel netjes, maar het werkt desalnietemin.

De volgende, en laatste, stap is het configureren van BPEL om meer threads te starten voor het afhandelen van de wait en onAlarm activities. Dit doen we door het aanpassen van de Quartz properties. Deze zijn te vinden in het bestand: $ORACLE_HOME/bpel/domains/default/config/resources-quartz.properties. In dit bestand moet de property com.oracle.bpel.expirationAgent.threadCount worden veranderd naar een hogere waarde. De standaard instelling is 10, ik heb de mijne op 20 gezet. De problemen met ‘hangende’ BPEL processen zijn zo verholpen.

Tags: , , , , , , ,

Reageren

U moet inloggen om te reageren.