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)
> > >
> > > :
> > >
>
>
>
>