# IllegalArgumentException: org.hibernate.jdbc.ConnectionWrapper referenced from a method is not visible from class loader when using parallelStream

**URL:** <https://discourse.hibernate.org/t/illegalargumentexception-org-hibernate-jdbc-connectionwrapper-referenced-from-a-method-is-not-visible-from-class-loader-when-using-parallelstream/2717>\
**Category:** Hibernate ORM\
**Created:** [May 15, 2019, 6:41pm UTC](https://discourse.hibernate.org/t/illegalargumentexception-org-hibernate-jdbc-connectionwrapper-referenced-from-a-method-is-not-visible-from-class-loader-when-using-parallelstream/2717 "2019-05-15T18:41:54Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mikess](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/mikess/32/593_2.png) [@mikess](https://discourse.hibernate.org/u/mikess)\
**Post date:** [May 15, 2019, 6:41pm UTC](https://discourse.hibernate.org/t/illegalargumentexception-org-hibernate-jdbc-connectionwrapper-referenced-from-a-method-is-not-visible-from-class-loader-when-using-parallelstream/2717/1 "2019-05-15T18:41:54Z")

</div>

Hello,

I’m looking for advice on a problem I’m experiencing after upgrading to OpenJDK 12 with Hibernate 3.2.6. I realize that version of Hibernate is quite old, but we are not prepared to upgrade at the moment. So, I’d appreciate any guidance.

The issue is that when I create a new transaction inside a parallelStream call as in:

```auto
someList.parallelStream().map(someItem -> transactionalMethodCall(someItem))

```

I get the following exception:

```auto
rg.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.IllegalArgumentException: org.hibernate.jdbc.ConnectionWrapper referenced from a method is not visible from class loader
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:598)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
	at com.hannonhill.cascade.aspect.TransactionalExceptionDecoderAspect.process(TransactionalExceptionDecoderAspect.java:42)
	at jdk.internal.reflect.GeneratedMethodAccessor563.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
	at com.hannonhill.cascade.aspect.RetryTransactionAspect.doTransaction(RetryTransactionAspect.java:57)
	at jdk.internal.reflect.GeneratedMethodAccessor562.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
	at com.hannonhill.cascade.aspect.TransactionExceptionAspect.doTransaction(TransactionExceptionAspect.java:48)
	at jdk.internal.reflect.GeneratedMethodAccessor561.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
	at com.hannonhill.cascade.aspect.ServiceAspectLogger.logServiceMethodCall(ServiceAspectLogger.java:40)
	at jdk.internal.reflect.GeneratedMethodAccessor560.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at com.sun.proxy.$Proxy232.assign(Unknown Source)
	at com.hannonhill.cascade.model.service.ContentOwnershipServiceImpl.lambda$assignContentOwnerForSelectedEntities$5(ContentOwnershipServiceImpl.java:431)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
	at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
	at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
	at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.IllegalArgumentException: org.hibernate.jdbc.ConnectionWrapper referenced from a method is not visible from class loader
	at java.base/java.lang.reflect.Proxy$ProxyBuilder.ensureVisible(Proxy.java:856)
	at java.base/java.lang.reflect.Proxy$ProxyBuilder.validateProxyInterfaces(Proxy.java:679)
	at java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:625)
	at java.base/java.lang.reflect.Proxy.lambda$getProxyConstructor$1(Proxy.java:425)
	at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329)
	at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205)
	at java.base/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:423)
	at java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1004)
	at org.hibernate.jdbc.BorrowedConnectionProxy.generateProxy(BorrowedConnectionProxy.java:67)
	at org.hibernate.jdbc.ConnectionManager.borrowConnection(ConnectionManager.java:163)
	at org.hibernate.jdbc.JDBCContext.borrowConnection(JDBCContext.java:111)
	at org.hibernate.impl.SessionImpl.connection(SessionImpl.java:359)
	at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:508)
	... 59 more

```

I came across this older Hibernate issue [https://hibernate.atlassian.net/browse/HHH-3529](https://hibernate.atlassian.net/browse/HHH-3529) and applied the associated patch to a fresh build of Hibernate 3.2, but it did not address the issue. I also tried upgrading to Hibernate 3.5.3 which also did not address the issue.

This issue only occurs with parallelStream and not anywhere else.

Any advice?
