Transative Dependency is not present, causing the app to fail with a Class Not Found error

23 views Asked by At

Currently in my project, we are migrating the app to Tomcat 9 from Tomcat 7. We encountered a problem when it comes to initializing beans.

We have a bean called repository that uses the org.apache.jackrabbit.core.RepositoryImpl class and fails when initialized with the following error:

SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [com.icontrol.server.util.AbstractConfigurableServletInitializer$CustomContextLoaderListener]

    org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [classpath*:beanRefContext.xml], factory key [server-app-context]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'context' defined in URL [jar:file:/tomcat/shared/lib/server.jar!/beanRefContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.context.support.ClassPathXmlApplicationContext]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repository' defined in class path resource [repository-context.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.jackrabbit.core.RepositoryImpl]: Factory method 'create' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:388)

        at com.icontrol.server.util.AbstractConfigurableServletInitializer$CustomContextLoaderListener.loadParentContext(AbstractConfigurableServletInitializer.java:74)

        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:322)

        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)

        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4492)

        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4946)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)

        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)

        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:662)

        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:689)

        at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1888)

        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)

        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:582)

        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:472)

        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1617)

        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)

        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)

        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)

        at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)

        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)

        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328)

        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)

        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:922)

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

        at org.apache.catalina.startup.Catalina.start(Catalina.java:772)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'context' defined in URL [jar:file:/tomcat/shared/lib/server.jar!/beanRefContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.context.support.ClassPathXmlApplicationContext]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repository' defined in class path resource [repository-context.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.jackrabbit.core.RepositoryImpl]: Factory method 'create' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:279)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1196)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1098)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756)

        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)

        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)

        at org.springframework.context.access.ContextSingletonBeanFactoryLocator.initializeDefinition(ContextSingletonBeanFactoryLocator.java:143)

        at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:383)

        ... 44 more

    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.context.support.ClassPathXmlApplicationContext]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repository' defined in class path resource [repository-context.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.jackrabbit.core.RepositoryImpl]: Factory method 'create' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:157)

        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)

        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271)

        ... 57 more

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'repository' defined in class path resource [repository-context.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.jackrabbit.core.RepositoryImpl]: Factory method 'create' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1176)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1071)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756)

        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)

        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)

        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:105)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:145)

        ... 59 more

    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.jackrabbit.core.RepositoryImpl]: Factory method 'create' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)

        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)

        ... 77 more

    Caused by: java.lang.NoClassDefFoundError: org/apache/commons/dbcp/BasicDataSource

        at org.apache.jackrabbit.core.util.db.ConnectionFactory.getDriverDataSource(ConnectionFactory.java:317)

        at org.apache.jackrabbit.core.util.db.ConnectionFactory.createDataSource(ConnectionFactory.java:245)

        at org.apache.jackrabbit.core.util.db.ConnectionFactory.getDataSource(ConnectionFactory.java:170)

        at org.apache.jackrabbit.core.journal.DatabaseJournal.getDataSource(DatabaseJournal.java:285)

        at org.apache.jackrabbit.core.journal.DatabaseJournal.init(DatabaseJournal.java:259)

        at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$3.getJournal(RepositoryConfigurationParser.java:934)

        at org.apache.jackrabbit.core.config.ClusterConfig.getJournal(ClusterConfig.java:112)

        at org.apache.jackrabbit.core.cluster.ClusterNode.init(ClusterNode.java:230)

        at org.apache.jackrabbit.core.cluster.ClusterNode.init(ClusterNode.java:215)

        at org.apache.jackrabbit.core.RepositoryImpl.createClusterNode(RepositoryImpl.java:668)

        at org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:303)

        at org.apache.jackrabbit.core.RepositoryImpl.create(RepositoryImpl.java:616)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)

        ... 78 more

It seems that the org.apache.commons.dbcp.BasicDataSource is not present causing the app to fail. This dependency seems to be a transative dependency brought in by the jackrabbit-core dependency.

However, I'm not sure why is this happening and why is the transative dependency not pulled in by the jackrabbit-core library

Note: We are currently trying to set a standalone environment with the new tomcat 9 instance running on it and we encountered this problem.

0

There are 0 answers