2016-07-29 58 views
0

Ich versuche eine JNDI-Konfiguration in meiner Grails 3-Anwendung zu kombinieren, die den eingebetteten Tomcat-Servlet-Container sowie den eigenständigen Tomcat-Container (eingerichtet von unserem Systemteam) verwendet.Kombination von Tomcat und Embedded Tomcat JNDI-Konfigurationen für Grails 3

Ich habe this SO question verwendet, um meine JNDI-Konfiguration mit dem eingebetteten Tomcat-Container (für lokale Host-Entwicklung, z. B. Grails Run-App) zu arbeiten.

Wenn ich meine Anwendung auf einem Tomcat Standalone-Server ausgeführt wird (nach dem Krieg Datei Aufbau), mit JNDI config in dem Tomcat-Server, ich die folgende Fehlermeldung erhalten:

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 

es zum Laufen zu bringen, er brauche die tomcatFactory() Methode in der Application.groovy

sO Frage

Meine build.gradle Datei zu auszukommen hat die folgende Abhängigkeit gemäß der verknüpften Datei:

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

Weiß jemand, wie ich die beiden Konfigurationen kombinieren kann, damit ich den Embedded Tomcat Container beim lokalen Testen nicht auskommentieren muss?

Update: Die Tomcat-Version auf unseren Servern ist tomcat-7.0.54-2.el7_1.noarch. Ich habe verschiedene Blogs und Seiten gelesen, die darauf hindeuten, dass der Übergang vom Embedded Server zum Tomcat-Container mindestens 7,0,55 betragen sollte. Könnte dies ein Versions-Unzulänglichkeits-Problem sein?

Antwort

0

Basierend auf 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:

Änderung:

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

zu

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

+0

Dies hat keine Auswirkung. Ich bekomme immer noch den gleichen Fehler beim Start. Ich frage mich, ob es etwas mit den Tomcat-Versionen zu tun hat. – Cyntech