2016-07-29 62 views
0

我試圖一個JNDI配置在我的Grails 3應用程序,利用嵌入式Tomcat servlet容器以及獨立的Tomcat容器(通過我們的系統團隊成立)合併。結合Tomcat和Tomcat的嵌入式JNDI CONFIGS Grails的3

我已經使用this SO question來獲得我的JNDI配置與嵌入式Tomcat容器一起工作(對於本地主機開發,例如grails run-app)。

當我在Tomcat獨立的服務器上運行我的應用程序,並在Tomcat服務器JNDI配置(構建WAR文件後),我收到以下錯誤:

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/acses]] 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) 
     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:672) 
     at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1862) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tomcatFactory' defined in acses.Application: Post-processing failed of bean type [class acses.Application$1] failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [acses.Application$1] for persistence metadata: could not find class that it depends on 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:940) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:518) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
     at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
     at grails.boot.GrailsApp.run(GrailsApp.groovy:55) 
     at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:149) 
     at org.grails.boot.context.web.GrailsAppServletInitializer.createRootApplicationContext(GrailsAppServletInitializer.groovy:57) 
     at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85) 
     at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5456) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     ... 10 more 
Caused by: java.lang.IllegalStateException: Failed to introspect bean class [acses.Application$1] for persistence metadata: could not find class that it depends on 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:396) 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:935) 
     ... 30 more 
Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/web/ContextResource 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
     at java.lang.Class.getDeclaredMethods(Class.java:1975) 
     at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:609) 
     at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:486) 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:426) 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:392) 
     ... 32 more 
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.web.ContextResource 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
     ... 39 more 

得到它的工作,我需要註釋掉在Application.groovy的tomcatFactory()方法文件

我的build.gradle文件具有以下依賴按照鏈接的SO問題:

runtime "org.apache.tomcat:tomcat-dbcp:9.0.0.M1" 

有誰知道我可能如何組合這兩種配置,以便在本地測試時不必註釋掉嵌入式Tomcat容器?

更新:我們的服務器上的Tomcat版本是tomcat-7.0.54-2.el7_1.noarch。我已閱讀各種博客和頁面,建議從嵌入式服務器到Tomcat容器應至少爲7.0.55。這可能是版本不足問題嗎?

回答

0

基礎上docs

Note that by default Grails will include an embeddable version of Tomcat inside the WAR file so that it is runnable (see the previous section), this can cause problems if you deploy to a different version of Tomcat. If you don't intend to use the embedded container then you should change the scope of the Tomcat dependencies to provided prior to deploying to your production container in build.gradle:

變化:

runtime "org.apache.tomcat:tomcat-dbcp:9.0.0.M1"

provided "org.apache.tomcat:tomcat-dbcp:9.0.0.M1"

+0

,沒有任何效果。啓動時仍然出現相同的錯誤。我開始懷疑它是否與tomcat版本有關。 – Cyntech