You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ode.apache.org by Andi Abes <aa...@progress.com> on 2009/03/04 19:21:11 UTC

RE: Correlated receive in parallel for-each loop

I'm not sure what the proper etiquette here is - 

I have a reproducible case where I get the exceptions listed below. I've
tried various JPA/Oracle and Hibernate/Oracle (as well as JPA/Derby)
configurations.

 

I'm not really familiar with the unit test framework used by ODE, so my
testcase is built around a simple Java test client that both invokes and
response to the BPEL process.

 

Should I open a JIRA with the artifacts mentioned?

Is there another approach to getting this resolved?

 

 

TIA,

a.

 

________________________________

From: Matthieu Riou [mailto:matthieu.riou@gmail.com] 
Sent: Thursday, February 26, 2009 9:38 PM
To: Andi Abes
Cc: user@ode.apache.org
Subject: Re: Correlated receive in parallel for-each loop

 

On Wed, Feb 25, 2009 at 12:09 PM, Andi Abes <aa...@progress.com> wrote:

	Matthieu,
	 Was the log useful?
	 Show I open a JIRA? I do have some code to drive the BPEL
process that
	can easily reproduce this behavior (it does rely on CXF runtime)


Sorry I haven't had any time to look at it today, I'll check tomorrow.
 

	
	 I couldn't find a way to avoid the SET TRANSACTION exception...
is
	there a way of avoiding it that you can recommend?


Just don't explicitly set ode.connection.isolation, this way we will
leave it alone and Oracle uses the proper value by default.

Matthieu
 

	 

	
	a.
	
	
	> -----Original Message-----
	> From: Matthieu Riou [mailto:matthieu.riou@gmail.com]

	> Sent: Tuesday, February 24, 2009 11:17 AM
	> To: user@ode.apache.org

	> Subject: Re: Correlated receive in parallel for-each loop
	>
	> On Tue, Feb 24, 2009 at 7:44 AM, Andi Abes
<aa...@progress.com> 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
	> > COMPLElTED_OK on channel 45
	> >
	> > Any thoughts?
	> >
	> The above looks like a bug yes, could you provide a full debug
log to
	see
	> what's happening exactly?
	>
	> Your second problem is due to the Oracle JDBC driver that
refuses to
	alter
	> the transaction isolation level after the transaction has been
	started,
	> even
	> if it's the first statement in the transaction. So basically
we can't
	set
	> it, it has to be set at the driver level.
	>
	> The good news though is that READ_COMMITTED is the default on
Oracle
	so
	> you
	> don't need to force the isolation level, removing the
environment
	variable
	> should solve it.
	>
	> Cheers,
	> Matthieu
	>
	>
	> > 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.
	ja
	> va:1170)
	> >
	> >         at
	> >
	>
	
oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:
	16
	> 96)
	> >
	> >         at
	> >
	
oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1662)
	> >
	> >         at
	> >
	>
	
oracle.jdbc.driver.PhysicalConnection.setTransactionIsolation(PhysicalCo
	nn
	> ection.java:1661)
	> >
	> >         at
	> >
	>
	
org.apache.tomcat.dbcp.dbcp.DelegatingConnection.setTransactionIsolation
	(D
	> elegatingConnection.java:340)
	> >
	> >         at
	> >
	>
	
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
	.s
	> etTransactionIsolation(PoolingDataSource.java:332)
	> >
	> >         at
	> >
	>
	
org.apache.ode.daohib.DataSourceConnectionProvider.getConnection(DataSou
	rc
	> eConnectionProvider.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
	.j
	> ava: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
	:2
	> 24)
	> >
	> >         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
	oI
	> mpl.java:89)
	> >
	> > :
	> >

 


Re: Correlated receive in parallel for-each loop

Posted by Alex Boisvert <bo...@intalio.com>.
Yes, I suggest opening a Jira and attach everything you can so that we can
easily reproduce the situation.

Getting to a point where we can reproduce the issue is you best bet for
getting it resolved.

alex


On Wed, Mar 4, 2009 at 10:21 AM, Andi Abes <aa...@progress.com> wrote:

> I'm not sure what the proper etiquette here is -
>
> I have a reproducible case where I get the exceptions listed below. I've
> tried various JPA/Oracle and Hibernate/Oracle (as well as JPA/Derby)
> configurations.
>
>
>
> I'm not really familiar with the unit test framework used by ODE, so my
> testcase is built around a simple Java test client that both invokes and
> response to the BPEL process.
>
>
>
> Should I open a JIRA with the artifacts mentioned?
>
> Is there another approach to getting this resolved?
>
>
>
>
>
> TIA,
>
> a.
>
>
>
> ________________________________
>
> From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
> Sent: Thursday, February 26, 2009 9:38 PM
> To: Andi Abes
> Cc: user@ode.apache.org
> Subject: Re: Correlated receive in parallel for-each loop
>
>
>
> On Wed, Feb 25, 2009 at 12:09 PM, Andi Abes <aa...@progress.com> wrote:
>
>        Matthieu,
>         Was the log useful?
>         Show I open a JIRA? I do have some code to drive the BPEL
> process that
>        can easily reproduce this behavior (it does rely on CXF runtime)
>
>
> Sorry I haven't had any time to look at it today, I'll check tomorrow.
>
>
>
>         I couldn't find a way to avoid the SET TRANSACTION exception...
> is
>        there a way of avoiding it that you can recommend?
>
>
> Just don't explicitly set ode.connection.isolation, this way we will
> leave it alone and Oracle uses the proper value by default.
>
> Matthieu
>
>
>
>
>
>        a.
>
>
>        > -----Original Message-----
>        > From: Matthieu Riou [mailto:matthieu.riou@gmail.com]
>
>        > Sent: Tuesday, February 24, 2009 11:17 AM
>        > To: user@ode.apache.org
>
>        > Subject: Re: Correlated receive in parallel for-each loop
>        >
>        > On Tue, Feb 24, 2009 at 7:44 AM, Andi Abes
> <aa...@progress.com> 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
>        > > COMPLElTED_OK on channel 45
>        > >
>        > > Any thoughts?
>        > >
>        > The above looks like a bug yes, could you provide a full debug
> log to
>        see
>        > what's happening exactly?
>        >
>        > Your second problem is due to the Oracle JDBC driver that
> refuses to
>        alter
>        > the transaction isolation level after the transaction has been
>        started,
>        > even
>        > if it's the first statement in the transaction. So basically
> we can't
>        set
>        > it, it has to be set at the driver level.
>        >
>        > The good news though is that READ_COMMITTED is the default on
> Oracle
>        so
>        > you
>        > don't need to force the isolation level, removing the
> environment
>        variable
>        > should solve it.
>        >
>        > Cheers,
>        > Matthieu
>        >
>        >
>        > > 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.
>        ja
>        > va:1170)
>        > >
>        > >         at
>        > >
>        >
>
> oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:
>        16
>        > 96)
>        > >
>        > >         at
>        > >
>
> oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1662)
>        > >
>        > >         at
>        > >
>        >
>
> oracle.jdbc.driver.PhysicalConnection.setTransactionIsolation(PhysicalCo
>        nn
>        > ection.java:1661)
>        > >
>        > >         at
>        > >
>        >
>
> org.apache.tomcat.dbcp.dbcp.DelegatingConnection.setTransactionIsolation
>        (D
>        > elegatingConnection.java:340)
>        > >
>        > >         at
>        > >
>        >
>
> org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
>        .s
>        > etTransactionIsolation(PoolingDataSource.java:332)
>        > >
>        > >         at
>        > >
>        >
>
> org.apache.ode.daohib.DataSourceConnectionProvider.getConnection(DataSou
>        rc
>        > eConnectionProvider.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
>        .j
>        > ava: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
>        :2
>        > 24)
>        > >
>        > >         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
>        oI
>        > mpl.java:89)
>        > >
>        > > :
>        > >
>
>
>
>