This seems like a race condition, and I am not sure that switching the
DB fixes it. I just don't understand how it can possibly happen. Do
you have "Container Managed Transactions" set to on by any chance?
Andrus
On Jun 8, 2010, at 1:26 PM, Andrea Pavan wrote:
> Sorry for double post, it's my first time :)
> Anyway, I solve the problem using H2 instead of Derby and, for now,
> all
> works like a charm!
>
> 2010/6/8 Andrea Pavan <prog.paw..mail.com>
>
>> Hi,
>> I have a very strange problem with Cayenne 3.0 and Derby Embedded
>> database.
>> When i execute my application, first runs a query, then when runs the
>> second one (different from first), it raise this exception:
>>
>> Exception in thread "Thread-5"
>> org.apache.cayenne.CayenneRuntimeException:
>> [v.3.0 Apr 26 2010 09:59:17] Global exception.
>> at
>> org
>> .apache
>> .cayenne
>> .access
>> .DataDomainQueryAction
>> .nextGlobalException(DataDomainQueryAction.java:553)
>> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:
>> 258)
>> at
>> org
>> .apache
>> .cayenne
>> .access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:
>> 422)
>> at
>> org.apache.cayenne.access.DataDomainQueryAction.access
>> $000(DataDomainQueryAction.java:69)
>> at
>> org.apache.cayenne.access.DataDomainQueryAction
>> $2.transform(DataDomainQueryAction.java:395)
>> at
>> org
>> .apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:
>> 840)
>> at
>> org
>> .apache
>> .cayenne
>> .access
>> .DataDomainQueryAction
>> .runQueryInTransaction(DataDomainQueryAction.java:392)
>> at
>> org
>> .apache
>> .cayenne
>> .access.DataDomainQueryAction.execute(DataDomainQueryAction.java:121)
>> at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
>> at
>> org
>> .apache
>> .cayenne
>> .util
>> .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
>> at
>> org
>> .apache
>> .cayenne
>> .util
>> .ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>> at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:
>> 1278)
>> at
>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java:
>> 1267)
>> at
>> minica.server.actions.CANewCertAction.doAction(CANewCertAction.java:
>> 46)
>> at
>> minica
>> .server.parsers.CANewCertParser.parseMessage(CANewCertParser.java:37)
>> at minica.server.CASocketReceiver.run(CASocketReceiver.java:73)
>> at java.lang.Thread.run(Thread.java:619)
>> Caused by: java.lang.IllegalStateException: Transaction must have
>> 'STATUS_ACTIVE' to add a connection. Current status: STATUS_COMMITTED
>> at
>> org
>> .apache
>> .cayenne
>> .access.ExternalTransaction.addConnection(ExternalTransaction.java:
>> 64)
>> at
>> org.apache.cayenne.access.DataNode
>> $TransactionDataSource.getConnection(DataNode.java:365)
>> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:
>> 248)
>> ... 15 more
>>
>> The second query is executed in a different thread.
>> This is a code I use to get the DataContext object:
>>
>> public ObjectContext getContext() {
>> try {
>> return BaseContext.getThreadObjectContext();
>> } catch(IllegalStateException e) {
>>
>> BaseContext
>> .bindThreadObjectContext(DataContext.createDataContext(false));
>> return BaseContext.getThreadObjectContext();
>> }
>> }
>>
>> Both queries are simply SelectQuery:
>>
>> 1.
>> ObjectContext context =
>> CertificationAuthority.getInstance().getContext();
>> SelectQuery select1 = new SelectQuery(DBCertificate.class);
>> List<DBCertificate> l = context.performQuery(select1);
>>
>> 2.
>> ObjectContext context =
>> CertificationAuthority.getInstance().getContext();
>> Expression clause =
>> ExpressionFactory.matchExp(DBUser.NAME_PROPERTY,
>> subject);
>> SelectQuery query = new SelectQuery(DBUser.class, clause);
>> List<DBUser> result = context.performQuery(query);
>>
>> The very strange thing is that the app raises exception only at
>> first time,
>> when DB is empty and, more strange, if I execute in debug mode, all
>> works
>> well !
>> I try anything but I don't find any solution.
>>
>> Any suggestions?
>>
>> *Andrea*
>>
This archive was generated by hypermail 2.0.0 : Tue Jun 08 2010 - 20:47:01 UTC