OpenJPA pool with DBCP

Wojtek <[email protected]>
Newsgroups gmane.comp.jakarta.james.user
Message-ID <[email protected]>
I'm trying to configure/use connection pool with OpenJPA and DBCP. When adding commons-dbcp:1.4 to 
the classpath I get error: 
"org.apache.openjpa.persistence.PersistenceException/SQLException/com.mysql.cj.exceptions.StatementIsClosedException: 
No operations allowed after statement closed." and no pool, coonections being re-created constantly 
and higher memory usage.

With commons-dbcp2:2.9.0 I do get constant connection pool (lsof, same ports after a couple of 
tries) but James floods logs with exceptions about multithreading operation (below) and imapsync 
dies shortly due to erroring out.


Is connection pooling supported? How to correctly configure it?


OpenJPA configuration 
(https://openjpa.apache.org/builds/3.2.2/apache-openjpa/docs/manual.html#openjpa.jdbc.DriverDataSource) 
seems to indicate, that DBCP2 should be available in the classpath, which seems to be picked up 
corrently and create the pool, but there seem to be issue with James utilizing it?

----

StackTraces/logs


1:55:39.878 [WARN ] i.n.c.DefaultChannelPipeline - An exceptionCaught() event was fired, and it 
reached at the tail of the pipeline. It usually means the last handler in the pipeline did not 
handle the exception.
org.apache.openjpa.persistence.PersistenceException: Multiple concurrent threads attempted to access 
a single broker. By default brokers are not thread safe; if you require and/or intend a broker to be 
accessed by more than one thread, set the openjpa.Multithreaded property to true to override the 
default behavior.
	at org.apache.openjpa.kernel.BrokerImpl.endOperation(BrokerImpl.java:2083)
	at org.apache.openjpa.kernel.BrokerImpl.isActive(BrokerImpl.java:2028)
	at org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:521)
	at org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.java:812)
	at org.apache.openjpa.persistence.PersistenceExceptions$2.translate(PersistenceExceptions.java:82)
	at org.apache.openjpa.kernel.DelegatingBroker.translate(DelegatingBroker.java:108)
	at org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:523)
	at org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.java:812)
	at org.apache.james.backends.jpa.EntityManagerUtils.safelyClose(EntityManagerUtils.java:37)
	at org.apache.james.mailbox.jpa.JPATransactionalMapper.endRequest(JPATransactionalMapper.java:91)
	at 
org.apache.james.mailbox.store.MailboxSessionMapperFactory.endProcessingRequest(MailboxSessionMapperFactory.java:143)
	at 
org.apache.james.mailbox.store.StoreMailboxManager.endProcessingRequest(StoreMailboxManager.java:915)
	at org.apache.james.mailbox.MailboxManager.lambda$manageProcessing$10(MailboxManager.java:436)
	at reactor.core.publisher.MonoUsing$MonoUsingSubscriber.onComplete(MonoUsing.java:275)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205)
	at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onComplete(FluxHide.java:147)
	at 
reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2205)
	at reactor.core.publisher.MonoRunnable.subscribe(MonoRunnable.java:50)
	at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4444)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
	at 
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.maybeOnError(FluxConcatMapNoPrefetch.java:326)
	at 
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:211)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
	at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:471)
	at 
reactor.core.publisher.SinkManyEmitterProcessor$EmitterInner.drainParent(SinkManyEmitterProcessor.java:615)
	at reactor.core.publisher.FluxPublish$PubSubInner.request(FluxPublish.java:602)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at 
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:336)
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
	at reactor.core.publisher.Operators$DeferredSubscription.request(Operators.java:1717)
	at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:192)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:149)
	at reactor.core.publisher.MonoHasElement$HasElementSubscriber.onNext(MonoHasElement.java:72)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.onNext(MonoSubscribeOn.java:146)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at reactor.core.publisher.MonoCallable$MonoCallableSubscription.request(MonoCallable.java:156)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74)
	at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:48)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4444)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at 
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1623)
21:55:39.885 [ERROR] o.a.j.i.p.AbstractMailboxProcessor - Unexpected error during IMAP processing
org.apache.openjpa.persistence.PersistenceException: Multiple concurrent threads attempted to access 
a single broker. By default brokers are not thread safe; if you require and/or intend a broker to be 
accessed by more than one thread, set the openjpa.Multithreaded property to true to override the 
default behavior.
	at org.apache.openjpa.kernel.BrokerImpl.endOperation(BrokerImpl.java:2083)
	at org.apache.openjpa.kernel.BrokerImpl.isActive(BrokerImpl.java:2028)
	at org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:521)
	at org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.java:812)
	at org.apache.openjpa.persistence.PersistenceExceptions$2.translate(PersistenceExceptions.java:82)
	at org.apache.openjpa.kernel.DelegatingBroker.translate(DelegatingBroker.java:108)
	at org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:523)
	at org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.java:812)
	at org.apache.james.mailbox.jpa.JPATransactionalMapper.rollback(JPATransactionalMapper.java:81)
	at 
org.apache.james.mailbox.store.transaction.TransactionalMapper.lambda$executeReactive$1(TransactionalMapper.java:52)
	at com.github.fge.lambdas.consumers.ConsumerChainer.lambda$sneakyThrow$9(ConsumerChainer.java:73)
	at reactor.core.publisher.Mono.lambda$doOnError$20(Mono.java:2741)
	at 
reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:250)
	at 
reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:258)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:255)
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165)
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.onNext(MonoSubscribeOn.java:146)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
	at reactor.core.publisher.MonoCallable$MonoCallableSubscription.request(MonoCallable.java:156)
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74)
	at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:48)
	at reactor.core.publisher.Mono.subscribe(Mono.java:4444)
	at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at 
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1623)
	Suppressed: org.apache.openjpa.persistence.PersistenceException: Multiple concurrent threads 
attempted to access a single broker. By default brokers are not thread safe; if you require and/or 
intend a broker to be accessed by more than one thread, set the openjpa.Multithreaded property to 
true to override the default behavior.
		at org.apache.openjpa.kernel.BrokerImpl.endOperation(BrokerImpl.java:2083)
		at org.apache.openjpa.kernel.BrokerImpl.isActive(BrokerImpl.java:2028)
		at org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:521)
		at org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.java:812)
		at org.apache.openjpa.persistence.PersistenceExceptions$2.translate(PersistenceExceptions.java:82)
		at org.apache.openjpa.kernel.DelegatingBroker.translate(DelegatingBroker.java:108)
		at org.apache.openjpa.kernel.DelegatingBroker.begin(DelegatingBroker.java:1028)
		at org.apache.openjpa.persistence.EntityManagerImpl.begin(EntityManagerImpl.java:684)
		at org.apache.james.mailbox.jpa.JPATransactionalMapper.begin(JPATransactionalMapper.java:59)
		... 25 common frames omitted
	Wrapped by: org.apache.james.mailbox.exception.MailboxException: Begin of transaction failed
		at org.apache.james.mailbox.jpa.JPATransactionalMapper.begin(JPATransactionalMapper.java:61)
		at com.github.fge.lambdas.runnable.RunnableChainer.lambda$sneakyThrow$215(RunnableChainer.java:71)
		at reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:73)
		at reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:32)
		at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:252)
		... 21 common frames omitted
-- 
Wojtek
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.