10 Replies Latest reply on Jan 9, 2015 7:58 AM by ctomc

    Adding Jandex Index for 3rd Party JAR Breaks Classloading

    pmm

      TL;DR: It looks to us as if adding a Jandex Index for a 3rd party JARs causes classes from that JAR to no longer being found by the classloader.

       

      In order to speed up deployment time we try to have jandex indices for all of your deployments. For our inhouse JARs we use jandex-maven-plugin so all of them have a META-INF/jandex.idx. This has been working for quite some time. For the 3rd party JARs we tried placing a jandex index file besides the JARs but this has failed for far. Our deployments look something like this

       

      acme.ear
       +- ejb-module-1.jar
       |   \- META-INF/jandex.idx
       \- lib/
           +- acme-module-1.jar
           |  \- META-INF/jandex.idx
           +- spring-jdbc.jar
           \- spring-jdbc.jar.index
      

       

      Placing the the spring-jdbc.jar.index (Jandex Index for spring-jdbc.jar) right beside the spring-jdbc.jar in the lib/ folder of the ear cause the class org.springframework.jdbc.core.JdbcOperations in spring-jdbc.jar to be no longer found. The class loading is initiated by loading a class from acme-module-1.jar.

       

      2014-11-21 14:23:12,872 WARN  [org.jboss.modules] (ServerService Thread Pool -- 50) Failed to define class com.github.marschall.jandexjdbc.JdbcTemplate in Module "deployment.jandex-issue-ear-1.0.0-SNAPSHOT.ear:main" from Service Module Loader: java.lang.LinkageError: Failed to link com/github/marschall/jandexjdbc/JdbcTemplate (Module "deployment.jandex-issue-ear-1.0.0-SNAPSHOT.ear:main" from Service Module Loader)

          at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:487) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]

          at com.github.marschall.ejb.AnEjb.ejbCreate(AnEjb.java:20) [jandex-issue-ejb-1.0.0-SNAPSHOT.jar:]

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_20]

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_20]

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_20]

          at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_20]

          at org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doLifecycleInterception(Jsr299BindingsInterceptor.java:114) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:103) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)

          at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]

          at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.weld.injection.WeldInjectionInterceptor.processInvocation(WeldInjectionInterceptor.java:53) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:109)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.weld.ejb.Jsr299BindingsCreateInterceptor.processInvocation(Jsr299BindingsCreateInterceptor.java:94) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:273) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:369) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)

          at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)

          at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)

          at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:160)

          at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:133)

          at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:89)

          at org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:122) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:137) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)

          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_20]

          at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_20]

          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_20]

          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_20]

          at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20]

          at org.jboss.threads.JBossThread.run(JBossThread.java:122)

      Caused by: java.lang.NoClassDefFoundError: org/springframework/jdbc/core/JdbcOperations

          at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_20]

          at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_20]

          at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.3.Final]

          ... 66 more

      Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.core.JdbcOperations from [Module "deployment.jandex-issue-ear-1.0.0-SNAPSHOT.ear:main" from Service Module Loader]

          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]

          ... 70 more

       

      2014-11-21 14:23:12,898 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: Failed to start service jboss.deployment.subunit."jandex-issue-ear-1.0.0-SNAPSHOT.ear"."jandex-issue-ejb-1.0.0-SNAPSHOT.jar".component.AnEjb.START: org.jboss.msc.service.StartException in service jboss.deployment.subunit."jandex-issue-ear-1.0.0-SNAPSHOT.ear"."jandex-issue-ejb-1.0.0-SNAPSHOT.jar".component.AnEjb.START: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance

          at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_20]

          at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_20]

          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_20]

          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_20]

          at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_20]

          at org.jboss.threads.JBossThread.run(JBossThread.java:122)

      Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance

          at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:133) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:89) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:122)

          at org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:137)

          at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          ... 6 more

      Caused by: javax.ejb.EJBException: JBAS014580: Unexpected Error

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187)

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:369)

          at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:160) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          ... 11 more

      Caused by: java.lang.LinkageError: Failed to link com/github/marschall/jandexjdbc/JdbcTemplate (Module "deployment.jandex-issue-ear-1.0.0-SNAPSHOT.ear:main" from Service Module Loader)

          at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:487) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]

          at com.github.marschall.ejb.AnEjb.ejbCreate(AnEjb.java:20)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_20]

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_20]

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_20]

          at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_20]

          at org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doLifecycleInterception(Jsr299BindingsInterceptor.java:114)

          at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:103)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55)

          at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.weld.injection.WeldInjectionInterceptor.processInvocation(WeldInjectionInterceptor.java:53)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:109) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.weld.ejb.Jsr299BindingsCreateInterceptor.processInvocation(Jsr299BindingsCreateInterceptor.java:94)

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]

          at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) [jboss-invocation-1.2.1.Final.jar:1.2.1.Final]

          at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:273)

          ... 27 more

      Caused by: java.lang.NoClassDefFoundError: org/springframework/jdbc/core/JdbcOperations

          at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_20]

          at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_20]

          at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.3.Final]

          ... 66 more

      Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.core.JdbcOperations from [Module "deployment.jandex-issue-ear-1.0.0-SNAPSHOT.ear:main" from Service Module Loader]

          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final]

          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final]

          ... 70 more

      We created a GitHub project to reproduce the issue. For now we checked the index in. In the actual code the index would have been produced by a Maven plugin.

       

      The index was produced with:

      java -jar jandex-1.2.2.Final.jar -o spring-jdbc-4.1.2.RELEASE.jar.index jandex-issue-ear//target/jandex-issue-ear-1.0.0-SNAPSHOT/lib/spring-jdbc-4.1.2.RELEASE.jar

       

      We do not think this is a Spring issue because no application context was made, just an instance of a Subclass of a Spring-Class that has some annotations.

       

      Building the project and deploying it to a stock WildFly 8.2 reproduces the issue.

        • 1. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
          pmm

          *bump*

          Is what we're doing here even supported/supposed to work?

          • 2. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
            jaikiran

            An annotation index for a jar (that's what Jandex is for) should not cause issues with classloading of deployment classes. Are you sure that the original spring jar on which the index is based upon, did not get corrupted for whatever reason while generating the index?

             

            Can you post the output of:

             

            jar -tf spring-jdbc.jar

             

            (the one which is within the .ear/lib/ folder of the ear being deployed)

            • 3. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
              ctomc

              I don't think you need to generate jandex index for jars that are part of deployment, that is only needed for static modules.

               

              in any case your CFNE doesn't look related to jandex at all.

              • 4. Re: Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                pmm

                jaikiran pai wrote:

                 

                An annotation index for a jar (that's what Jandex is for) should not cause issues with classloading of deployment classes. Are you sure that the original spring jar on which the index is based upon, did not get corrupted for whatever reason while generating the index?

                 

                Reasonably sure. I deleted the JARs from the local Maven repository, downloaded it again with mvn --strict-checksums, generated the index again and it's identical.

                 

                jaikiran pai wrote:

                 

                Can you post the output of:

                 

                jar -tf spring-jdbc.jar

                 

                (the one which is within the .ear/lib/ folder of the ear being deployed)

                 

                META-INF/

                META-INF/MANIFEST.MF

                org/

                org/springframework/

                org/springframework/jdbc/

                org/springframework/jdbc/SQLWarningException.class

                org/springframework/jdbc/LobRetrievalFailureException.class

                org/springframework/jdbc/UncategorizedSQLException.class

                org/springframework/jdbc/InvalidResultSetAccessException.class

                org/springframework/jdbc/CannotGetJdbcConnectionException.class

                org/springframework/jdbc/BadSqlGrammarException.class

                org/springframework/jdbc/JdbcUpdateAffectedIncorrectNumberOfRowsException.class

                org/springframework/jdbc/IncorrectResultSetColumnCountException.class

                org/springframework/jdbc/datasource/

                org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.class

                org/springframework/jdbc/datasource/DataSourceUtils.class

                org/springframework/jdbc/datasource/SingleConnectionDataSource.class

                org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.class

                org/springframework/jdbc/datasource/AbstractDataSource.class

                org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.class

                org/springframework/jdbc/datasource/ConnectionHolder.class

                org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.class

                org/springframework/jdbc/datasource/DataSourceTransactionManager$1.class

                org/springframework/jdbc/datasource/DataSourceTransactionManager.class

                org/springframework/jdbc/datasource/ConnectionHandle.class

                org/springframework/jdbc/datasource/DriverManagerDataSource.class

                org/springframework/jdbc/datasource/SimpleDriverDataSource.class

                org/springframework/jdbc/datasource/DataSourceTransactionManager$DataSourceTransactionObject.class

                org/springframework/jdbc/datasource/DelegatingDataSource.class

                org/springframework/jdbc/datasource/AbstractDriverBasedDataSource.class

                org/springframework/jdbc/datasource/SimpleConnectionHandle.class

                org/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter.class

                org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.class

                org/springframework/jdbc/datasource/SmartDataSource.class

                org/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter$JdbcUserCredentials.class

                org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.class

                org/springframework/jdbc/datasource/SingleConnectionDataSource$CloseSuppressingInvocationHandler.class

                org/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter$1.class

                org/springframework/jdbc/datasource/DataSourceUtils$ConnectionSynchronization.class

                org/springframework/jdbc/datasource/IsolationLevelDataSourceAdapter.class

                org/springframework/jdbc/datasource/ConnectionProxy.class

                org/springframework/jdbc/datasource/embedded/

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurer.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType.class

                org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.class

                org/springframework/jdbc/datasource/embedded/DataSourceFactory.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryBean.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabase.class

                org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.class

                org/springframework/jdbc/datasource/embedded/HsqlEmbeddedDatabaseConfigurer.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory$EmbeddedDataSourceProxy.class

                org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory$1.class

                org/springframework/jdbc/datasource/embedded/ConnectionProperties.class

                org/springframework/jdbc/datasource/embedded/OutputStreamFactory.class

                org/springframework/jdbc/datasource/embedded/DerbyEmbeddedDatabaseConfigurer.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.class

                org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory$1.class

                org/springframework/jdbc/datasource/embedded/OutputStreamFactory$1.class

                org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.class

                org/springframework/jdbc/datasource/lookup/

                org/springframework/jdbc/datasource/lookup/DataSourceLookup.class

                org/springframework/jdbc/datasource/lookup/MapDataSourceLookup.class

                org/springframework/jdbc/datasource/lookup/BeanFactoryDataSourceLookup.class

                org/springframework/jdbc/datasource/lookup/JndiDataSourceLookup.class

                org/springframework/jdbc/datasource/lookup/DataSourceLookupFailureException.class

                org/springframework/jdbc/datasource/lookup/SingleDataSourceLookup.class

                org/springframework/jdbc/datasource/lookup/IsolationLevelDataSourceRouter.class

                org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.class

                org/springframework/jdbc/datasource/init/

                org/springframework/jdbc/datasource/init/DatabasePopulatorUtils.class

                org/springframework/jdbc/datasource/init/CompositeDatabasePopulator.class

                org/springframework/jdbc/datasource/init/ScriptUtils.class

                org/springframework/jdbc/datasource/init/UncategorizedScriptException.class

                org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.class

                org/springframework/jdbc/datasource/init/DataSourceInitializer.class

                org/springframework/jdbc/datasource/init/DatabasePopulator.class

                org/springframework/jdbc/datasource/init/ScriptException.class

                org/springframework/jdbc/datasource/init/ScriptStatementFailedException.class

                org/springframework/jdbc/datasource/init/ScriptParseException.class

                org/springframework/jdbc/datasource/init/CannotReadScriptException.class

                org/springframework/jdbc/support/

                org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.class

                org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.class

                org/springframework/jdbc/support/SQLExceptionTranslator.class

                org/springframework/jdbc/support/JdbcAccessor.class

                org/springframework/jdbc/support/DatabaseMetaDataCallback.class

                org/springframework/jdbc/support/SQLErrorCodes.class

                org/springframework/jdbc/support/MetaDataAccessException.class

                org/springframework/jdbc/support/AbstractFallbackSQLExceptionTranslator.class

                org/springframework/jdbc/support/JdbcUtils$1.class

                org/springframework/jdbc/support/JdbcUtils.class

                org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistrar.class

                org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistry.class

                org/springframework/jdbc/support/SQLErrorCodesFactory.class

                org/springframework/jdbc/support/KeyHolder.class

                org/springframework/jdbc/support/SQLExceptionSubclassTranslator.class

                org/springframework/jdbc/support/DatabaseStartupValidator.class

                org/springframework/jdbc/support/SqlValue.class

                org/springframework/jdbc/support/CustomSQLErrorCodesTranslation.class

                org/springframework/jdbc/support/GeneratedKeyHolder.class

                org/springframework/jdbc/support/lob/

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator$1.class

                org/springframework/jdbc/support/lob/DefaultLobHandler.class

                org/springframework/jdbc/support/lob/LobCreator.class

                org/springframework/jdbc/support/lob/DefaultLobHandler$DefaultLobCreator.class

                org/springframework/jdbc/support/lob/JtaLobCreatorSynchronization.class

                org/springframework/jdbc/support/lob/SpringLobCreatorSynchronization.class

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator$3.class

                org/springframework/jdbc/support/lob/PassThroughClob.class

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator$2.class

                org/springframework/jdbc/support/lob/LobHandler.class

                org/springframework/jdbc/support/lob/AbstractLobHandler.class

                org/springframework/jdbc/support/lob/PassThroughBlob.class

                org/springframework/jdbc/support/lob/OracleLobHandler$LobCallback.class

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator$5.class

                org/springframework/jdbc/support/lob/TemporaryLobCreator.class

                org/springframework/jdbc/support/lob/OracleLobHandler.class

                org/springframework/jdbc/support/lob/LobCreatorUtils.class

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator$4.class

                org/springframework/jdbc/support/lob/OracleLobHandler$OracleLobCreator.class

                org/springframework/jdbc/support/nativejdbc/

                org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractorAdapter.class

                org/springframework/jdbc/support/nativejdbc/SimpleNativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/WebSphereNativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/CommonsDbcpNativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/OracleJdbc4NativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/WebLogicNativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/C3P0NativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/JBossNativeJdbcExtractor.class

                org/springframework/jdbc/support/nativejdbc/Jdbc4NativeJdbcExtractor.class

                org/springframework/jdbc/support/xml/

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$3.class

                org/springframework/jdbc/support/xml/SqlXmlHandler.class

                org/springframework/jdbc/support/xml/XmlBinaryStreamProvider.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$2.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$4.class

                org/springframework/jdbc/support/xml/XmlResultProvider.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$AbstractJdbc4SqlXmlValue.class

                org/springframework/jdbc/support/xml/SqlXmlObjectMappingHandler.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$5.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler.class

                org/springframework/jdbc/support/xml/Jdbc4SqlXmlHandler$1.class

                org/springframework/jdbc/support/xml/SqlXmlFeatureNotImplementedException.class

                org/springframework/jdbc/support/xml/XmlCharacterStreamProvider.class

                org/springframework/jdbc/support/xml/SqlXmlValue.class

                org/springframework/jdbc/support/rowset/

                org/springframework/jdbc/support/rowset/ResultSetWrappingSqlRowSet.class

                org/springframework/jdbc/support/rowset/SqlRowSetMetaData.class

                org/springframework/jdbc/support/rowset/ResultSetWrappingSqlRowSetMetaData.class

                org/springframework/jdbc/support/rowset/SqlRowSet.class

                org/springframework/jdbc/support/incrementer/

                org/springframework/jdbc/support/incrementer/PostgreSQLSequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/AbstractDataFieldMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/HsqlMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/DB2MainframeSequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/SybaseAnywhereMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/DB2SequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/AbstractSequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/AbstractIdentityColumnMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/HsqlSequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/H2SequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/SqlServerMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/DataFieldMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/SybaseMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/MySQLMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/OracleSequenceMaxValueIncrementer.class

                org/springframework/jdbc/support/incrementer/DerbyMaxValueIncrementer.class

                org/springframework/jdbc/config/

                org/springframework/jdbc/config/DatabasePopulatorConfigUtils.class

                org/springframework/jdbc/config/SortedResourcesFactoryBean$1.class

                org/springframework/jdbc/config/InitializeDatabaseBeanDefinitionParser.class

                org/springframework/jdbc/config/SortedResourcesFactoryBean.class

                org/springframework/jdbc/config/JdbcNamespaceHandler.class

                org/springframework/jdbc/config/EmbeddedDatabaseBeanDefinitionParser.class

                org/springframework/jdbc/core/

                org/springframework/jdbc/core/ConnectionCallback.class

                org/springframework/jdbc/core/SqlReturnType.class

                org/springframework/jdbc/core/JdbcTemplate$1UpdateStatementCallback.class

                org/springframework/jdbc/core/ArgumentTypePreparedStatementSetter.class

                org/springframework/jdbc/core/SqlRowSetResultSetExtractor$1.class

                org/springframework/jdbc/core/SqlParameter.class

                org/springframework/jdbc/core/JdbcTemplate$6.class

                org/springframework/jdbc/core/JdbcTemplate$4.class

                org/springframework/jdbc/core/RowMapper.class

                org/springframework/jdbc/core/CallableStatementCreator.class

                org/springframework/jdbc/core/SqlRowSetResultSetExtractor.class

                org/springframework/jdbc/core/SqlInOutParameter.class

                org/springframework/jdbc/core/PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.class

                org/springframework/jdbc/core/ParameterizedPreparedStatementSetter.class

                org/springframework/jdbc/core/JdbcTemplate$5.class

                org/springframework/jdbc/core/ResultSetSupportingSqlParameter.class

                org/springframework/jdbc/core/ParameterDisposer.class

                org/springframework/jdbc/core/SqlRowSetResultSetExtractor$CachedRowSetFactory.class

                org/springframework/jdbc/core/RowMapperResultSetExtractor.class

                org/springframework/jdbc/core/JdbcTemplate$SimplePreparedStatementCreator.class

                org/springframework/jdbc/core/SqlOutParameter.class

                org/springframework/jdbc/core/JdbcTemplate$1QueryStatementCallback.class

                org/springframework/jdbc/core/BatchUpdateUtils$1.class

                org/springframework/jdbc/core/CallableStatementCallback.class

                org/springframework/jdbc/core/SqlParameterValue.class

                org/springframework/jdbc/core/BatchUpdateUtils.class

                org/springframework/jdbc/core/StatementCreatorUtils.class

                org/springframework/jdbc/core/SqlProvider.class

                org/springframework/jdbc/core/ArgumentPreparedStatementSetter.class

                org/springframework/jdbc/core/JdbcTemplate$SimpleCallableStatementCreator.class

                org/springframework/jdbc/core/BeanPropertyRowMapper.class

                org/springframework/jdbc/core/ResultSetExtractor.class

                org/springframework/jdbc/core/JdbcTemplate$1BatchUpdateStatementCallback.class

                org/springframework/jdbc/core/PreparedStatementCreatorFactory.class

                org/springframework/jdbc/core/JdbcTemplate$2.class

                org/springframework/jdbc/core/StatementCallback.class

                org/springframework/jdbc/core/SqlRowSetResultSetExtractor$SunCachedRowSetFactory.class

                org/springframework/jdbc/core/JdbcTemplate$1.class

                org/springframework/jdbc/core/JdbcTemplate$1ExecuteStatementCallback.class

                org/springframework/jdbc/core/PreparedStatementCreator.class

                org/springframework/jdbc/core/JdbcTemplate.class

                org/springframework/jdbc/core/PreparedStatementCallback.class

                org/springframework/jdbc/core/JdbcOperations.class

                org/springframework/jdbc/core/JdbcTemplate$CloseSuppressingInvocationHandler.class

                org/springframework/jdbc/core/ParameterMapper.class

                org/springframework/jdbc/core/PreparedStatementSetter.class

                org/springframework/jdbc/core/SqlReturnResultSet.class

                org/springframework/jdbc/core/JdbcTemplate$RowCallbackHandlerResultSetExtractor.class

                org/springframework/jdbc/core/BatchPreparedStatementSetter.class

                org/springframework/jdbc/core/DisposableSqlTypeValue.class

                org/springframework/jdbc/core/RowCountCallbackHandler.class

                org/springframework/jdbc/core/SqlReturnUpdateCount.class

                org/springframework/jdbc/core/SqlRowSetResultSetExtractor$StandardCachedRowSetFactory.class

                org/springframework/jdbc/core/CallableStatementCreatorFactory$CallableStatementCreatorImpl.class

                org/springframework/jdbc/core/ColumnMapRowMapper.class

                org/springframework/jdbc/core/CallableStatementCreatorFactory.class

                org/springframework/jdbc/core/RowCallbackHandler.class

                org/springframework/jdbc/core/SingleColumnRowMapper.class

                org/springframework/jdbc/core/JdbcTemplate$3.class

                org/springframework/jdbc/core/InterruptibleBatchPreparedStatementSetter.class

                org/springframework/jdbc/core/SqlTypeValue.class

                org/springframework/jdbc/core/metadata/

                org/springframework/jdbc/core/metadata/DerbyCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory$1.class

                org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.class

                org/springframework/jdbc/core/metadata/SqlServerCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/CallParameterMetaData.class

                org/springframework/jdbc/core/metadata/CallMetaDataContext.class

                org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider$TableMetaData.class

                org/springframework/jdbc/core/metadata/OracleCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/CallMetaDataProviderFactory.class

                org/springframework/jdbc/core/metadata/TableParameterMetaData.class

                org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider$1.class

                org/springframework/jdbc/core/metadata/PostgresCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/DerbyTableMetaDataProvider.class

                org/springframework/jdbc/core/metadata/OracleTableMetaDataProvider.class

                org/springframework/jdbc/core/metadata/TableMetaDataProviderFactory.class

                org/springframework/jdbc/core/metadata/TableMetaDataContext.class

                org/springframework/jdbc/core/metadata/TableMetaDataProviderFactory$1.class

                org/springframework/jdbc/core/metadata/TableMetaDataProvider.class

                org/springframework/jdbc/core/metadata/HsqlTableMetaDataProvider.class

                org/springframework/jdbc/core/metadata/Db2CallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/SybaseCallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/CallMetaDataProvider.class

                org/springframework/jdbc/core/metadata/PostgresTableMetaDataProvider.class

                org/springframework/jdbc/core/simple/

                org/springframework/jdbc/core/simple/AbstractJdbcInsert$1.class

                org/springframework/jdbc/core/simple/AbstractJdbcInsert.class

                org/springframework/jdbc/core/simple/AbstractJdbcInsert$2.class

                org/springframework/jdbc/core/simple/SimpleJdbcDaoSupport.class

                org/springframework/jdbc/core/simple/SimpleJdbcCallOperations.class

                org/springframework/jdbc/core/simple/SimpleJdbcTemplate.class

                org/springframework/jdbc/core/simple/AbstractJdbcInsert$3.class

                org/springframework/jdbc/core/simple/SimpleJdbcCall.class

                org/springframework/jdbc/core/simple/AbstractJdbcCall.class

                org/springframework/jdbc/core/simple/ParameterizedSingleColumnRowMapper.class

                org/springframework/jdbc/core/simple/SimpleJdbcInsert.class

                org/springframework/jdbc/core/simple/ParameterizedRowMapper.class

                org/springframework/jdbc/core/simple/ParameterizedBeanPropertyRowMapper.class

                org/springframework/jdbc/core/simple/SimpleJdbcOperations.class

                org/springframework/jdbc/core/simple/SimpleJdbcInsertOperations.class

                org/springframework/jdbc/core/support/

                org/springframework/jdbc/core/support/SqlLobValue.class

                org/springframework/jdbc/core/support/JdbcDaoSupport.class

                org/springframework/jdbc/core/support/JdbcBeanDefinitionReader$1.class

                org/springframework/jdbc/core/support/AbstractLobCreatingPreparedStatementCallback.class

                org/springframework/jdbc/core/support/AbstractSqlTypeValue.class

                org/springframework/jdbc/core/support/JdbcBeanDefinitionReader.class

                org/springframework/jdbc/core/support/AbstractLobStreamingResultSetExtractor.class

                org/springframework/jdbc/core/support/AbstractInterruptibleBatchPreparedStatementSetter.class

                org/springframework/jdbc/core/namedparam/

                org/springframework/jdbc/core/namedparam/NamedParameterBatchUpdateUtils.class

                org/springframework/jdbc/core/namedparam/NamedParameterJdbcDaoSupport.class

                org/springframework/jdbc/core/namedparam/BeanPropertySqlParameterSource.class

                org/springframework/jdbc/core/namedparam/MapSqlParameterSource.class

                org/springframework/jdbc/core/namedparam/NamedParameterUtils$ParameterHolder.class

                org/springframework/jdbc/core/namedparam/ParsedSql.class

                org/springframework/jdbc/core/namedparam/AbstractSqlParameterSource.class

                org/springframework/jdbc/core/namedparam/SqlParameterSourceUtils.class

                org/springframework/jdbc/core/namedparam/SqlParameterSource.class

                org/springframework/jdbc/core/namedparam/NamedParameterBatchUpdateUtils$1.class

                org/springframework/jdbc/core/namedparam/NamedParameterUtils.class

                org/springframework/jdbc/core/namedparam/NamedParameterJdbcOperations.class

                org/springframework/jdbc/core/namedparam/EmptySqlParameterSource.class

                org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.class

                org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate$1.class

                org/springframework/jdbc/object/

                org/springframework/jdbc/object/GenericSqlQuery.class

                org/springframework/jdbc/object/StoredProcedure.class

                org/springframework/jdbc/object/SqlUpdate.class

                org/springframework/jdbc/object/MappingSqlQuery.class

                org/springframework/jdbc/object/RdbmsOperation.class

                org/springframework/jdbc/object/SqlOperation.class

                org/springframework/jdbc/object/SqlQuery.class

                org/springframework/jdbc/object/UpdatableSqlQuery$RowMapperImpl.class

                org/springframework/jdbc/object/SqlCall.class

                org/springframework/jdbc/object/MappingSqlQueryWithParameters$RowMapperImpl.class

                org/springframework/jdbc/object/BatchSqlUpdate.class

                org/springframework/jdbc/object/UpdatableSqlQuery.class

                org/springframework/jdbc/object/SqlFunction.class

                org/springframework/jdbc/object/MappingSqlQueryWithParameters.class

                org/springframework/jdbc/object/GenericStoredProcedure.class

                org/springframework/jdbc/object/BatchSqlUpdate$1.class

                META-INF/spring.handlers

                META-INF/spring.schemas

                META-INF/spring.tooling

                org/springframework/jdbc/support/sql-error-codes.xml

                org/springframework/jdbc/config/spring-jdbc-3.1.xsd

                org/springframework/jdbc/config/spring-jdbc.gif

                org/springframework/jdbc/config/spring-jdbc-3.2.xsd

                org/springframework/jdbc/config/spring-jdbc-4.0.xsd

                org/springframework/jdbc/config/spring-jdbc-3.0.xsd

                org/springframework/jdbc/config/spring-jdbc-4.1.xsd

                META-INF/notice.txt

                META-INF/license.txt

                As you can see org/springframework/jdbc/core/JdbcOperations.class is there. This is an interface implemented in two JARs in lib/ once in the spring-jdbc.jar itself and once in acme-module-1.jar.

                Here's the output from  java -jar jandex-1.2.2.Final.jar -d on the index file.

                Annotations:

                java.lang.Deprecated:

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, java.util.Map)

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, [Ljava.lang.Object;)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, java.util.Map)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, [Ljava.lang.Object;)

                    Class: org.springframework.jdbc.core.simple.SimpleJdbcTemplate

                    Class: org.springframework.jdbc.support.lob.OracleLobHandler

                    Method: long org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForLong(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: long org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForLong(java.lang.String, java.util.Map)

                    Method: int org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForInt(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: int org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForInt(java.lang.String, java.util.Map)

                    Method: long org.springframework.jdbc.core.JdbcTemplate.queryForLong(java.lang.String)

                    Method: int org.springframework.jdbc.core.JdbcTemplate.queryForInt(java.lang.String)

                    Method: long org.springframework.jdbc.core.JdbcTemplate.queryForLong(java.lang.String, [Ljava.lang.Object;, [I)

                    Method: long org.springframework.jdbc.core.JdbcTemplate.queryForLong(java.lang.String, [Ljava.lang.Object;)

                    Method: int org.springframework.jdbc.core.JdbcTemplate.queryForInt(java.lang.String, [Ljava.lang.Object;, [I)

                    Method: int org.springframework.jdbc.core.JdbcTemplate.queryForInt(java.lang.String, [Ljava.lang.Object;)

                    Method: long org.springframework.jdbc.core.JdbcOperations.queryForLong(java.lang.String)

                    Method: int org.springframework.jdbc.core.JdbcOperations.queryForInt(java.lang.String)

                    Method: long org.springframework.jdbc.core.JdbcOperations.queryForLong(java.lang.String, [Ljava.lang.Object;, [I)

                    Method: long org.springframework.jdbc.core.JdbcOperations.queryForLong(java.lang.String, [Ljava.lang.Object;)

                    Method: int org.springframework.jdbc.core.JdbcOperations.queryForInt(java.lang.String, [Ljava.lang.Object;, [I)

                    Method: int org.springframework.jdbc.core.JdbcOperations.queryForInt(java.lang.String, [Ljava.lang.Object;)

                    Class: org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport

                    Class: org.springframework.jdbc.core.simple.ParameterizedRowMapper

                    Class: org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcOperations.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, java.util.Map)

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcOperations.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: java.lang.Object org.springframework.jdbc.core.simple.SimpleJdbcOperations.queryForObject(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, [Ljava.lang.Object;)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcOperations.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, java.util.Map)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcOperations.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: java.util.List org.springframework.jdbc.core.simple.SimpleJdbcOperations.query(java.lang.String, org.springframework.jdbc.core.simple.ParameterizedRowMapper, [Ljava.lang.Object;)

                    Class: org.springframework.jdbc.core.simple.SimpleJdbcOperations

                    Class: org.springframework.jdbc.core.simple.ParameterizedSingleColumnRowMapper

                    Method: long org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations.queryForLong(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: long org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations.queryForLong(java.lang.String, java.util.Map)

                    Method: int org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations.queryForInt(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource)

                    Method: int org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations.queryForInt(java.lang.String, java.util.Map)

                Subclasses:

                org.springframework.jdbc.object.RdbmsOperation:

                    org.springframework.jdbc.object.SqlOperation

                    org.springframework.jdbc.object.SqlCall

                org.springframework.jdbc.datasource.DelegatingDataSource:

                    org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter

                    org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy

                    org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy

                org.springframework.jdbc.datasource.AbstractDataSource:

                    org.springframework.jdbc.datasource.AbstractDriverBasedDataSource

                    org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource

                org.springframework.jdbc.core.SqlParameter:

                    org.springframework.jdbc.core.ResultSetSupportingSqlParameter

                    org.springframework.jdbc.core.SqlReturnUpdateCount

                    org.springframework.jdbc.core.SqlParameterValue

                org.springframework.jdbc.support.JdbcAccessor:

                    org.springframework.jdbc.core.JdbcTemplate

                org.springframework.transaction.support.TransactionSynchronizationAdapter:

                    org.springframework.jdbc.support.lob.SpringLobCreatorSynchronization

                    org.springframework.jdbc.datasource.DataSourceUtils$ConnectionSynchronization

                org.springframework.jdbc.object.MappingSqlQuery:

                    org.springframework.jdbc.object.SqlFunction

                org.springframework.jdbc.support.lob.AbstractLobHandler:

                    org.springframework.jdbc.support.lob.DefaultLobHandler

                    org.springframework.jdbc.support.lob.OracleLobHandler

                org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator:

                    org.springframework.jdbc.support.SQLExceptionSubclassTranslator

                    org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator

                    org.springframework.jdbc.support.SQLStateSQLExceptionTranslator

                org.springframework.dao.support.DaoSupport:

                    org.springframework.jdbc.core.support.JdbcDaoSupport

                java.lang.Enum:

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType

                org.springframework.jdbc.core.namedparam.AbstractSqlParameterSource:

                    org.springframework.jdbc.core.namedparam.MapSqlParameterSource

                    org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource

                org.springframework.jdbc.object.SqlOperation:

                    org.springframework.jdbc.object.SqlQuery

                    org.springframework.jdbc.object.SqlUpdate

                org.springframework.dao.InvalidDataAccessResourceUsageException:

                    org.springframework.jdbc.BadSqlGrammarException

                    org.springframework.jdbc.InvalidResultSetAccessException

                org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer:

                    org.springframework.jdbc.support.incrementer.AbstractColumnMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.AbstractSequenceMaxValueIncrementer

                org.springframework.jdbc.core.simple.AbstractJdbcInsert:

                    org.springframework.jdbc.core.simple.SimpleJdbcInsert

                org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabaseConfigurer:

                    org.springframework.jdbc.datasource.embedded.HsqlEmbeddedDatabaseConfigurer

                    org.springframework.jdbc.datasource.embedded.H2EmbeddedDatabaseConfigurer

                org.springframework.dao.NonTransientDataAccessException:

                    org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException

                org.springframework.jdbc.core.BeanPropertyRowMapper:

                    org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper

                org.springframework.dao.UncategorizedDataAccessException:

                    org.springframework.jdbc.UncategorizedSQLException

                    org.springframework.jdbc.SQLWarningException

                org.springframework.jdbc.core.support.JdbcDaoSupport:

                    org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport

                    org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport

                org.springframework.jdbc.datasource.AbstractDriverBasedDataSource:

                    org.springframework.jdbc.datasource.SimpleDriverDataSource

                    org.springframework.jdbc.datasource.DriverManagerDataSource

                org.springframework.jdbc.datasource.JdbcTransactionObjectSupport:

                    org.springframework.jdbc.datasource.DataSourceTransactionManager$DataSourceTransactionObject

                org.springframework.jdbc.core.simple.AbstractJdbcCall:

                    org.springframework.jdbc.core.simple.SimpleJdbcCall

                org.springframework.jdbc.core.SqlOutParameter:

                    org.springframework.jdbc.core.SqlInOutParameter

                org.springframework.jdbc.object.SqlUpdate:

                    org.springframework.jdbc.object.BatchSqlUpdate

                org.springframework.jdbc.support.incrementer.AbstractColumnMaxValueIncrementer:

                    org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer

                org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractorAdapter:

                    org.springframework.jdbc.support.nativejdbc.WebSphereNativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.JBossNativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.Jdbc4NativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor

                    org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor

                org.springframework.dao.DataAccessResourceFailureException:

                    org.springframework.jdbc.CannotGetJdbcConnectionException

                org.springframework.jdbc.datasource.DriverManagerDataSource:

                    org.springframework.jdbc.datasource.SingleConnectionDataSource

                org.springframework.jdbc.core.ResultSetSupportingSqlParameter:

                    org.springframework.jdbc.core.SqlReturnResultSet

                    org.springframework.jdbc.core.SqlOutParameter

                org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory:

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean

                org.springframework.dao.DataAccessException:

                    org.springframework.jdbc.datasource.init.ScriptException

                org.springframework.jdbc.support.incrementer.AbstractSequenceMaxValueIncrementer:

                    org.springframework.jdbc.support.incrementer.HsqlSequenceMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.DB2SequenceMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.H2SequenceMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.DB2MainframeSequenceMaxValueIncrementer

                org.springframework.dao.InvalidDataAccessApiUsageException:

                    org.springframework.jdbc.support.xml.SqlXmlFeatureNotImplementedException

                org.springframework.jdbc.object.StoredProcedure:

                    org.springframework.jdbc.object.GenericStoredProcedure

                org.springframework.jdbc.object.SqlCall:

                    org.springframework.jdbc.object.StoredProcedure

                org.springframework.dao.DataRetrievalFailureException:

                    org.springframework.jdbc.LobRetrievalFailureException

                    org.springframework.jdbc.IncorrectResultSetColumnCountException

                org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource:

                    org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter

                org.springframework.beans.factory.config.AbstractFactoryBean:

                    org.springframework.jdbc.config.SortedResourcesFactoryBean

                java.util.LinkedHashMap:

                    org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate$1

                org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter:

                    org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter

                org.springframework.transaction.support.ResourceHolderSupport:

                    org.springframework.jdbc.datasource.ConnectionHolder

                org.springframework.jdbc.object.SqlQuery:

                    org.springframework.jdbc.object.UpdatableSqlQuery

                    org.springframework.jdbc.object.GenericSqlQuery

                    org.springframework.jdbc.object.MappingSqlQueryWithParameters

                org.springframework.jdbc.support.nativejdbc.Jdbc4NativeJdbcExtractor:

                    org.springframework.jdbc.support.nativejdbc.OracleJdbc4NativeJdbcExtractor

                org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer:

                    org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer

                    org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer

                org.springframework.dao.IncorrectUpdateSemanticsDataAccessException:

                    org.springframework.jdbc.JdbcUpdateAffectedIncorrectNumberOfRowsException

                org.springframework.jdbc.datasource.init.ScriptException:

                    org.springframework.jdbc.datasource.init.ScriptStatementFailedException

                    org.springframework.jdbc.datasource.init.UncategorizedScriptException

                    org.springframework.jdbc.datasource.init.ScriptParseException

                    org.springframework.jdbc.datasource.init.CannotReadScriptException

                org.springframework.beans.factory.xml.NamespaceHandlerSupport:

                    org.springframework.jdbc.config.JdbcNamespaceHandler

                org.springframework.core.NestedCheckedException:

                    org.springframework.jdbc.support.MetaDataAccessException

                java.io.OutputStream:

                    org.springframework.jdbc.datasource.embedded.OutputStreamFactory$1

                org.springframework.jdbc.datasource.IsolationLevelDataSourceAdapter:

                    org.springframework.jdbc.datasource.WebSphereDataSourceAdapter

                org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider:

                    org.springframework.jdbc.core.metadata.PostgresCallMetaDataProvider

                    org.springframework.jdbc.core.metadata.OracleCallMetaDataProvider

                    org.springframework.jdbc.core.metadata.Db2CallMetaDataProvider

                    org.springframework.jdbc.core.metadata.SybaseCallMetaDataProvider

                    org.springframework.jdbc.core.metadata.DerbyCallMetaDataProvider

                    org.springframework.jdbc.core.metadata.SqlServerCallMetaDataProvider

                org.springframework.jdbc.object.MappingSqlQueryWithParameters:

                    org.springframework.jdbc.object.MappingSqlQuery

                org.springframework.transaction.support.AbstractPlatformTransactionManager:

                    org.springframework.jdbc.datasource.DataSourceTransactionManager

                org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer:

                    org.springframework.jdbc.support.incrementer.SybaseAnywhereMaxValueIncrementer

                org.springframework.jndi.JndiLocatorSupport:

                    org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup

                org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$AbstractJdbc4SqlXmlValue:

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$3

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$2

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$5

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$4

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$1

                org.springframework.jdbc.core.BatchUpdateUtils:

                    org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils

                org.springframework.jdbc.core.SingleColumnRowMapper:

                    org.springframework.jdbc.core.simple.ParameterizedSingleColumnRowMapper

                org.springframework.beans.factory.xml.AbstractBeanDefinitionParser:

                    org.springframework.jdbc.config.InitializeDatabaseBeanDefinitionParser

                    org.springframework.jdbc.config.EmbeddedDatabaseBeanDefinitionParser

                java.lang.Object:

                    org.springframework.jdbc.core.namedparam.EmptySqlParameterSource

                    org.springframework.jdbc.support.JdbcAccessor

                    org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSetMetaData

                    org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl

                    org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory$EmbeddedDataSourceProxy

                    org.springframework.jdbc.support.rowset.SqlRowSetMetaData

                    org.springframework.jdbc.core.simple.SimpleJdbcInsertOperations

                    org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback

                    org.springframework.jdbc.core.ArgumentPreparedStatementSetter

                    org.springframework.jdbc.datasource.embedded.DerbyEmbeddedDatabaseConfigurer

                    org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1

                    org.springframework.jdbc.core.JdbcTemplate$CloseSuppressingInvocationHandler

                    org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback

                    org.springframework.jdbc.core.metadata.TableMetaDataProvider

                    org.springframework.jdbc.datasource.lookup.MapDataSourceLookup

                    org.springframework.jdbc.datasource.ConnectionHandle

                    org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor

                    org.springframework.jdbc.datasource.embedded.OutputStreamFactory

                    org.springframework.jdbc.core.StatementCreatorUtils

                    org.springframework.jdbc.core.ConnectionCallback

                    org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory

                    org.springframework.jdbc.core.support.AbstractSqlTypeValue

                    org.springframework.jdbc.core.JdbcTemplate$SimpleCallableStatementCreator

                    org.springframework.jdbc.datasource.DataSourceUtils

                    org.springframework.jdbc.core.SqlRowSetResultSetExtractor

                    org.springframework.jdbc.core.namedparam.SqlParameterSource

                    org.springframework.jdbc.support.DatabaseStartupValidator

                    org.springframework.jdbc.support.lob.OracleLobHandler$LobCallback

                    org.springframework.jdbc.core.simple.SimpleJdbcTemplate

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabase

                    org.springframework.jdbc.core.JdbcTemplate$2

                    org.springframework.jdbc.core.JdbcTemplate$3

                    org.springframework.jdbc.core.JdbcTemplate$1

                    org.springframework.jdbc.core.metadata.GenericCallMetaDataProvider

                    org.springframework.jdbc.core.JdbcTemplate$6

                    org.springframework.jdbc.core.JdbcTemplate$4

                    org.springframework.jdbc.core.JdbcTemplate$5

                    org.springframework.jdbc.datasource.init.CompositeDatabasePopulator

                    org.springframework.jdbc.support.lob.PassThroughClob

                    org.springframework.jdbc.core.DisposableSqlTypeValue

                    org.springframework.jdbc.config.SortedResourcesFactoryBean$1

                    org.springframework.jdbc.core.ResultSetExtractor

                    org.springframework.jdbc.core.metadata.TableParameterMetaData

                    org.springframework.jdbc.datasource.embedded.SimpleDriverDataSourceFactory

                    org.springframework.jdbc.core.SqlRowSetResultSetExtractor$StandardCachedRowSetFactory

                    org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler

                    org.springframework.jdbc.datasource.lookup.DataSourceLookup

                    org.springframework.jdbc.core.metadata.GenericTableMetaDataProvider$1

                    org.springframework.jdbc.core.namedparam.NamedParameterUtils

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurerFactory

                    org.springframework.jdbc.core.ParameterDisposer

                    org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate

                    org.springframework.jdbc.core.RowMapperResultSetExtractor

                    org.springframework.jdbc.core.ParameterizedPreparedStatementSetter

                    org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurer

                    org.springframework.jdbc.core.namedparam.AbstractSqlParameterSource

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder

                    org.springframework.jdbc.datasource.init.ScriptUtils

                    org.springframework.jdbc.support.xml.XmlCharacterStreamProvider

                    org.springframework.jdbc.core.simple.AbstractJdbcInsert

                    org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator

                    org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$1

                    org.springframework.jdbc.core.PreparedStatementCallback

                    org.springframework.jdbc.support.lob.LobCreator

                    org.springframework.jdbc.support.lob.TemporaryLobCreator

                    org.springframework.jdbc.object.UpdatableSqlQuery$RowMapperImpl

                    org.springframework.jdbc.datasource.embedded.DataSourceFactory

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator$5

                    org.springframework.jdbc.support.DatabaseMetaDataCallback

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator$4

                    org.springframework.jdbc.datasource.DataSourceTransactionManager$1

                    org.springframework.jdbc.datasource.init.DatabasePopulatorUtils

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator$1

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator$3

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator$2

                    org.springframework.jdbc.datasource.SmartDataSource

                    org.springframework.jdbc.core.SqlTypeValue

                    org.springframework.jdbc.support.xml.XmlResultProvider

                    org.springframework.jdbc.core.CallableStatementCreatorFactory

                    org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils

                    org.springframework.jdbc.support.JdbcUtils

                    org.springframework.jdbc.support.lob.JtaLobCreatorSynchronization

                    org.springframework.jdbc.datasource.init.ResourceDatabasePopulator

                    org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator

                    org.springframework.jdbc.support.xml.XmlBinaryStreamProvider

                    org.springframework.jdbc.datasource.ConnectionProxy

                    org.springframework.jdbc.config.DatabasePopulatorConfigUtils

                    org.springframework.jdbc.core.CallableStatementCreator

                    org.springframework.jdbc.core.metadata.TableMetaDataProviderFactory

                    org.springframework.jdbc.support.GeneratedKeyHolder

                    org.springframework.jdbc.core.BatchUpdateUtils

                    org.springframework.jdbc.core.SingleColumnRowMapper

                    org.springframework.jdbc.datasource.lookup.SingleDataSourceLookup

                    org.springframework.jdbc.support.SQLErrorCodesFactory

                    org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory$1

                    org.springframework.jdbc.core.CallableStatementCallback

                    org.springframework.jdbc.support.CustomSQLExceptionTranslatorRegistry

                    org.springframework.jdbc.core.JdbcOperations

                    org.springframework.jdbc.core.SqlParameter

                    org.springframework.jdbc.support.SQLExceptionTranslator

                    org.springframework.jdbc.core.ParameterMapper

                    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator

                    org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl

                    org.springframework.jdbc.support.CustomSQLErrorCodesTranslation

                    org.springframework.jdbc.core.metadata.CallMetaDataContext

                    org.springframework.jdbc.support.rowset.SqlRowSet

                    org.springframework.jdbc.core.BatchUpdateUtils$1

                    org.springframework.jdbc.datasource.embedded.AbstractEmbeddedDatabaseConfigurer

                    org.springframework.jdbc.core.BeanPropertyRowMapper

                    org.springframework.jdbc.datasource.JdbcTransactionObjectSupport

                    org.springframework.jdbc.datasource.SimpleConnectionHandle

                    org.springframework.jdbc.core.SqlRowSetResultSetExtractor$CachedRowSetFactory

                    org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback

                    org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractorAdapter

                    org.springframework.jdbc.core.ColumnMapRowMapper

                    org.springframework.jdbc.support.SqlValue

                    org.springframework.jdbc.support.lob.DefaultLobHandler$DefaultLobCreator

                    org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer

                    org.springframework.jdbc.core.SqlProvider

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory

                    org.springframework.jdbc.support.SQLErrorCodes

                    org.springframework.jdbc.core.ArgumentTypePreparedStatementSetter

                    org.springframework.jdbc.core.metadata.CallParameterMetaData

                    org.springframework.jdbc.datasource.init.DatabasePopulator

                    org.springframework.jdbc.core.PreparedStatementCreator

                    org.springframework.jdbc.core.metadata.TableMetaDataProviderFactory$1

                    org.springframework.jdbc.core.metadata.TableMetaDataContext

                    org.springframework.jdbc.core.metadata.CallMetaDataProvider

                    org.springframework.jdbc.support.lob.LobCreatorUtils

                    org.springframework.jdbc.core.StatementCallback

                    org.springframework.jdbc.datasource.embedded.SimpleDriverDataSourceFactory$1

                    org.springframework.jdbc.core.support.SqlLobValue

                    org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurerFactory$1

                    org.springframework.jdbc.core.simple.ParameterizedRowMapper

                    org.springframework.jdbc.datasource.init.DataSourceInitializer

                    org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor

                    org.springframework.jdbc.core.simple.SimpleJdbcOperations

                    org.springframework.jdbc.core.support.JdbcBeanDefinitionReader

                    org.springframework.jdbc.core.metadata.GenericTableMetaDataProvider

                    org.springframework.jdbc.core.InterruptibleBatchPreparedStatementSetter

                    org.springframework.jdbc.core.namedparam.NamedParameterUtils$ParameterHolder

                    org.springframework.jdbc.core.BatchPreparedStatementSetter

                    org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor

                    org.springframework.jdbc.object.RdbmsOperation

                    org.springframework.jdbc.datasource.DelegatingDataSource

                    org.springframework.jdbc.datasource.AbstractDataSource

                    org.springframework.jdbc.core.RowCountCallbackHandler

                    org.springframework.jdbc.support.CustomSQLExceptionTranslatorRegistrar

                    org.springframework.jdbc.support.KeyHolder

                    org.springframework.jdbc.object.BatchSqlUpdate$1

                    org.springframework.jdbc.support.lob.LobHandler

                    org.springframework.jdbc.support.lob.AbstractLobHandler

                    org.springframework.jdbc.core.PreparedStatementCreatorFactory

                    org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet

                    org.springframework.jdbc.core.simple.SimpleJdbcCallOperations

                    org.springframework.jdbc.support.lob.PassThroughBlob

                    org.springframework.jdbc.support.xml.SqlXmlHandler

                    org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer

                    org.springframework.jdbc.object.MappingSqlQueryWithParameters$RowMapperImpl

                    org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter

                    org.springframework.jdbc.core.simple.AbstractJdbcCall

                    org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler

                    org.springframework.jdbc.core.RowCallbackHandler

                    org.springframework.jdbc.core.RowMapper

                    org.springframework.jdbc.core.SqlReturnType

                    org.springframework.jdbc.core.PreparedStatementSetter

                    org.springframework.jdbc.support.JdbcUtils$1

                    org.springframework.jdbc.core.metadata.GenericTableMetaDataProvider$TableMetaData

                    org.springframework.jdbc.core.SqlRowSetResultSetExtractor$SunCachedRowSetFactory

                    org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler

                    org.springframework.jdbc.core.support.JdbcBeanDefinitionReader$1

                    org.springframework.jdbc.datasource.embedded.ConnectionProperties

                    org.springframework.jdbc.core.namedparam.ParsedSql

                    org.springframework.jdbc.core.JdbcTemplate$1BatchUpdateStatementCallback

                    org.springframework.jdbc.support.xml.SqlXmlObjectMappingHandler

                    org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler$AbstractJdbc4SqlXmlValue

                    org.springframework.jdbc.core.SqlRowSetResultSetExtractor$1

                    org.springframework.jdbc.datasource.SingleConnectionDataSource$CloseSuppressingInvocationHandler

                    org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials

                    org.springframework.jdbc.core.simple.AbstractJdbcInsert$2

                    org.springframework.jdbc.core.simple.AbstractJdbcInsert$1

                    org.springframework.jdbc.core.simple.AbstractJdbcInsert$3

                    org.springframework.jdbc.support.xml.SqlXmlValue

                org.springframework.jdbc.core.metadata.GenericTableMetaDataProvider:

                    org.springframework.jdbc.core.metadata.DerbyTableMetaDataProvider

                    org.springframework.jdbc.core.metadata.HsqlTableMetaDataProvider

                    org.springframework.jdbc.core.metadata.OracleTableMetaDataProvider

                    org.springframework.jdbc.core.metadata.PostgresTableMetaDataProvider

                 

                Read spring-jdbc-4.1.2.RELEASE.jar.index in 0.0080 seconds

                 

                • 5. Re: Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                  pmm

                  Tomaz Cerar wrote:

                   

                  I don't think you need to generate jandex index for jars that are part of deployment, that is only needed for static modules.

                  Sure it's not strictly needed. It is however our understanding that a) generating a jandex index for jars that are part of deployment is supported and b) generating a jandex index for jars that are part of deployment is a good way to speed up deployment times since the classes no longer have be scanned for all kinds of annotations. Especially if the jars are large.

                  Tomaz Cerar wrote:

                  in any case your CFNE doesn't look related to jandex at all.

                  If I remove the jandex index the application runs fine without CFNE. I don't see how it could be anything other than a bug in either Jandex or the WildFly classloaser support for jandex indices.

                  • 6. Re: Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                    ctomc

                    Ah! That is completely different story. It looks like a bug.

                    But from quick look at the code it seems fine...

                     

                    if you are up for looking what could be wrong, this is the class that deals with this https://github.com/wildfly/wildfly-core/blob/master/server/src/main/java/org/jboss/as/server/deployment/annotation/ResourceRootIndexer.java

                     

                    otherwise just create jira for it and someone will take a look at it.

                    1 of 1 people found this helpful
                    • 7. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                      pmm

                      Tomaz Cerar wrote:

                       

                      Ah! That is completely different story. It looks like a bug.

                      But from quick look at the code it seems fine...

                       

                      if you are up for looking what could be wrong, this is the class that deals with this https://github.com/wildfly/wildfly-core/blob/master/server/src/main/java/org/jboss/as/server/deployment/annotation/ResourceRootIndexer.java

                       

                      otherwise just create jira for it and someone will take a look at it.

                      Ok, I'll debug a bit and create a JIRA with any additional information I find out.

                      • 8. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                        frolovmx

                        How much speed up you have achieved with jandexed deployment archives? I could not notice any changes in boot time of my application.

                        The EAR I tested contains:
                        total jar files: 445
                        bean archives: 131
                        classes in all bean archives: 8512

                        Should jandex improve deployment time of the EAR only?
                        Or does it have impact on methods invocation time after a jandexed bean archive is deployed?

                        • 9. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                          pmm

                          Maxim Frolov wrote:

                           

                          How much speed up you have achieved with jandexed deployment archives?

                           

                          We can't tell so far because we haven't got it working due to the mentioned issue.

                          • 10. Re: Adding Jandex Index for 3rd Party JAR Breaks Classloading
                            ctomc