Hi Patrick, Here is the stack trace of the second call to getConnection():
java.lang.Exception: Stack trace at java.lang.Thread.dumpStack(Thread.java:1158) at ex5.ConnectionPool.getConnection(ConnectionPool.java:325) at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:106) at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87) at org.apache.openjpa.jdbc.schema.LazySchemaFactory.generateSchemaObject(LazySchemaFactory.java:140) at org.apache.openjpa.jdbc.schema.LazySchemaFactory.findTable(LazySchemaFactory.java:91) at org.apache.openjpa.jdbc.meta.MappingInfo.createTable(MappingInfo.java:466) at org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:229) at org.apache.openjpa.jdbc.meta.strats.FullClassStrategy.map(FullClassStrategy.java:71) at org.apache.openjpa.jdbc.meta.ClassMapping.setStrategy(ClassMapping.java:345) at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:55) at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:313) at org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:605) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:492) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:288) at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:524) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:484) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:288) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:343) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:154) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:134) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:214) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:184) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:177) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$500(JPQLExpressionBuilder.java:64) at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1671) at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:55) at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:148) at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:649) at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:630) at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:596) at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:658) at org.apache.openjpa.kernel.QueryImpl.getOperation(QueryImpl.java:1483) at org.apache.openjpa.kernel.DelegatingQuery.getOperation(DelegatingQuery.java:123) at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:219) at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:269) at ex5.DatabaseCommandProcessor.processPendingCommands(DatabaseCommandProcessor.java:342) at ex5.DatabaseCommandProcessor.access$1(DatabaseCommandProcessor.java:326) at ex5.CommandScanner.run(DatabaseCommandProcessor.java:460) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462) The code looks like this: EntityManager manager = factory.createEntityManager(); Query query = manager.createQuery( "some query on objects with named parameters" ); query.getResultList(); If it helps, the objects queried are of type AddShapeCommand, which is part of a three-level object hierarchy: Command -> ShapeCommand -> AddShapeCommand. I also include the annotations related to inheritance: @Entity @Table( name="command" ) @Inheritance( strategy=InheritanceType.SINGLE_TABLE ) @DiscriminatorColumn( name="command_type", discriminatorType=DiscriminatorType.INTEGER ) @DiscriminatorValue( "0" ) public class Command { ... } @MappedSuperclass public abstract class ShapeCommand extends Command { ... } @Entity @DiscriminatorValue( "2" ) public class AddShapeCommand extends ShapeCommand { .. } Christian On 8/23/07, Patrick Linskey <[EMAIL PROTECTED]> wrote: > Hi, > > Can you post a thread dump from the deadlock? > > My guess would be that we're using the second connection to fetch an > ID value from a sequence table. Otherwise, we should not be obtaining > multiple. > > -Patrick > > On 8/23/07, Christian Defoy <[EMAIL PROTECTED]> wrote: > > Hello, > > > > Quick question about connection usage: > > > > I was performing some tests and I noticed that my connection pool was > > configured for 10 connections but theoretically, I should need only > > one so I set the connection pool size to 1. Now, my application > > deadlocks because it appears that getEntityManager() requests a > > connection and query.getResultList() requests one too. > > > > When I read section 4.8 "Configuring the Use of JDBC Connections", I > > thought that setting openjpa.ConnectionRetainMode to "always" would > > have the entity manager retain its connection (that part works fine) > > but that it would have the entity manager share that connection with > > queries... > > > > Is there a way to make that happen? My server is kind of counting on > > the fact that a single connection is used to process a single > > request... > > > > Christian > > > > > -- > Patrick Linskey > 202 669 5907 >