cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrea Pavan <prog.p...@gmail.com>
Subject Re: Transaction STATUS problem
Date Tue, 08 Jun 2010 20:26:21 GMT
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.pawz@gmail.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*
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message