The snippet you provided wasn't complete. I looked at the original attachment 
and it looks like this:

ForEach (parallel=yes)
    Scope
        CS esbRequest
        Sequence
            Invoke (CS=esbRequest, pattern=request)
            Receive (CS=esbRequest)

This pattern is valid since the correlation set referenced is defined within 
the parallel scope. As such, each scope instance should have its own 
correlation set. If the invoke and receive referenced a correlation set outside 
of the enclosing scope then you'd definitely have problems but the way it's 
defined in the example provided is valid and in fact a very common pattern.



On 2/25/09 10:24 AM, "Rafal Rusin" <[email protected]> wrote:



Your bpel contains following:

<forEach counterName="commandCounter" parallel="yes">
                                <receive createInstance="no"
                                    name="ESBResult" operation="ESBResult"
partnerLink="ESBResult"
                                    portType="tns:ESBResult"
variable="ESBMessage" xml:ID="19">

                                    <correlations>
                                        <correlation initiate="no"
                                            set="esbRequest" />
                                    </correlations>
                                </receive>
</forEach>


According to bpel specification, this will cause conflictingReceive error
when forEach has >1 items.

Regards,
Rafal Rusin

http://www.mimuw.edu.pl/~rrusin/


Andi Abes wrote:
>
> I'm trying to get a relatively simple process which performs a
> correlated receive in parallel for-each loop (attached) - just the sweet
> spot for BPEL ;)
>
> I've tried with:
> -     Derby/JPA - java.sql.SQLException: A lock could not be obtained
> due to a deadlock (full stack in earlier emails)
> -     Hibernate/Oracle - the exception is below (hibernate 3.2.5/
> oracle 10.2)
> -     JPA / Oracle - This didn't produce exceptions, but it produced
> the following error, which killed the process instance...
> o     ERROR - GeronimoLog.error(104) | The message exchange seems to
> be in an unconsistent state, you're probably missing a reply on a
> request/response interaction.
> INFO - GeronimoLog.info(79) | ActivityRecovery: Registering activity 25,
> failure reason: org.apache.ode.bpel.iapi.BpelEngineException: Engine
> requested response
>  while the message exchange hqejbhcnphr426192c3r3o was in the state
> COMPLETED_OK on channel 45
>
> Any thoughts?
> The last 2 cases sound to me as a bug...
>
>
>
>  <<BPEL_2.zip>>
>
> Exception with Hibernate/Oracle:
>
>
> DEBUG - GeronimoLog.debug(66) |
> org.apache.ode.daohib.bpel.hobj.HProcess{created=null, active=false,
> events=<uninitialized>, processId={urn:bpel:BpelMock}BPELMo
> ck-1, deployDate=2009-02-24 10:33:55, id=1, version=1,
> messageExchanges=<uninitialized>, deploymentPartnerLinks=[],
> typeName=BPELMock, lock=0, correlators=<unin
> itialized>, deployer=null, typeNamespace=urn:bpel:BpelMock,
> instances=<uninitialized>, guid=hqejbhcnphr42in8iaul6m}
> DEBUG - GeronimoLog.debug(66) |
> org.apache.ode.daohib.bpel.hobj.HCorrelator{created=2009-02-24 10:33:55,
> lock=0, process=org.apache.ode.daohib.bpel.hobj.HProces
> s#1, correlatorId=25.ESBResult, messageCorrelations=<uninitialized>,
> selectors=<uninitialized>, id=2}
> DEBUG - GeronimoLog.debug(66) |
> org.apache.ode.daohib.bpel.hobj.HProcessInstance{created=2009-02-24
> 10:34:25, jacobState=org.apache.ode.daohib.bpel.hobj.HLargeD
> ata#168, events=<uninitialized>, previousState=10,
> lastActiveTime=2009-02-24 10:34:33, fault=null,
> correlationSets=<uninitialized>, sequence=27, id=7, activityF
> ailureCount=0, messageExchanges=<uninitialized>, lock=0,
> correlatorSelectors=<uninitialized>, activityFailureDateTime=null,
> scopes=<uninitialized>, process=org.
> apache.ode.daohib.bpel.hobj.HProcess#1,
> activityRecoveries=<uninitialized>, state=20,
> instantiatingCorrelator=org.apache.ode.daohib.bpel.hobj.HCorrelator#3}
> DEBUG - GeronimoLog.debug(66) | about to open PreparedStatement (open
> PreparedStatements: 0, globally: 3)
> DEBUG - GeronimoLog.debug(66) | opening JDBC connection
> DEBUG - GeronimoLog.debug(70) | Cannot open connection [???]
> java.sql.SQLException: ORA-01453: SET TRANSACTION must be first
> statement of transaction
>         at
> oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:11
> 2)
>         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
>         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
>         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
>         at
> oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
>         at
> oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:957)
>         at
> oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.
> java:1170)
>         at
> oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:
> 1696)
>         at
> oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1662)
>         at
> oracle.jdbc.driver.PhysicalConnection.setTransactionIsolation(PhysicalCo
> nnection.java:1661)
>         at
> org.apache.tomcat.dbcp.dbcp.DelegatingConnection.setTransactionIsolation
> (DelegatingConnection.java:340)
>         at
> org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
> .setTransactionIsolation(PoolingDataSource.java:332)
>         at
> org.apache.ode.daohib.DataSourceConnectionProvider.getConnection(DataSou
> rceConnectionProvider.java:45)
>         at
> org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.ja
> va:423)
>         at
> org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.jav
> a:144)
>         at
> org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher
> .java:139)
>         at
> org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
>         at
> org.hibernate.loader.hql.QueryLoader.iterate(QueryLoader.java:399)
>         at
> org.hibernate.hql.ast.QueryTranslatorImpl.iterate(QueryTranslatorImpl.ja
> va:380)
>         at
> org.hibernate.engine.query.HQLQueryPlan.performIterate(HQLQueryPlan.java
> :224)
>         at
> org.hibernate.impl.SessionImpl.iterateFilter(SessionImpl.java:1492)
>         at
> org.hibernate.impl.CollectionFilterImpl.iterate(CollectionFilterImpl.jav
> a:38)
>         at
> org.apache.ode.daohib.bpel.CorrelatorDaoImpl.dequeueMessage(CorrelatorDa
> oImpl.java:89)
> :
>
>
>

--
View this message in context: 
http://www.nabble.com/Correlated-receive-in-parallel-for-each-loop-tp22184207p22204983.html
Sent from the Apache Ode User mailing list archive at Nabble.com.





--
Mark Ford
MIT Lincoln Laboratory
244 Wood Street
Lexington MA 02420
(781) 981-1843

Reply via email to