2016-07-29 59 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