Java Tomcat7中Grails应用程序的第二个实例中的IllegalStateException

Java Tomcat7中Grails应用程序的第二个实例中的IllegalStateException,java,tomcat,exception,grails,Java,Tomcat,Exception,Grails,我在Tomcat7中部署了同一Grails应用程序的两个实例。我使用配置文件中的环境创建了战争: grails -Dgrails.env=instance1 war grails -Dgrails.env=instance2 war 我使用setenv.sh为JAVA_选项提供额外的配置和设置 第一个实例运行正常。第二个给了我以下错误: Error 500: Internal Server Error URI /instance2/ Class java.lang.Illeg

我在Tomcat7中部署了同一Grails应用程序的两个实例。我使用配置文件中的环境创建了战争:

grails -Dgrails.env=instance1 war
grails -Dgrails.env=instance2 war
我使用setenv.sh为JAVA_选项提供额外的配置和设置

第一个实例运行正常。第二个给了我以下错误:

Error 500: Internal Server Error

URI
    /instance2/
Class
    java.lang.IllegalStateException
Message
    No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

Trace

    Line | Method
->> 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
有什么建议吗

编辑:

我尝试使用不同的名称部署第三个实例。它工作正常。所以我已经取消部署并重新部署到Tomcat中,但它不起作用。。。 我快发疯了,因为应用程序名称似乎有影响

我使用以下方法部署了应用程序:

grails -Dgrails.env=nameofapp war
其中
nameofapp
是应用程序的名称

我使用的是Grails2.2.1版本

编辑2:

我知道当第一次部署应用程序时会出现问题。事实上,当第一次部署到Tomcat时,我在catalina.out中看到了以下内容:

java.lang.NullPointerException
at medicalofficemanager.SecUserSecRole.create(SecUserSecRole.groovy:32)
at BootStrap$_closure1.doCall(BootStrap.groovy:61)
at         grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:308)
at grails.util.Environment.executeForEnvironment(Environment.java:301)
at grails.util.Environment.executeForCurrentEnvironment(Environment.java:277)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
    Jan 18, 2015 5:49:49 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Jan 18, 2015 5:49:49 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/MyAppName] startup failed due to previous errors
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/MyAppName] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [net.sf.ehcache.CacheManager@d5381] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [myapp.SecRole.data] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [org.hibernate.cache.UpdateTimestampsCache.data] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [org.hibernate.cache.StandardQueryCache.data] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [net.sf.ehcache.CacheManager@13e45] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:49:49 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyAppName] appears to have started a thread named [aclCache.data] but has failed to stop it. This is very likely to create a memory leak.
Jan 18, 2015 5:51:13 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load net.sf.ehcache.store.compound.CompoundStore$KeySet.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    at net.sf.ehcache.store.compound.CompoundStore.keySet(CompoundStore.java:216)
    at net.sf.ehcache.store.compound.factories.DiskStorageFactory$DiskExpiryTask.run(DiskStorageFactory.java:670)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
我认为第一个例外(关于SecUserSecRole)与此无关。。。 如果我取消部署并重新部署相同的war,而不清理数据库,则应用程序将正确启动。
这个stacktrace怎么样?

您的问题似乎在SecUserSecRole中。groovy:32。我敢打赌,这是你的应用程序第一次尝试DB访问的地方。您能否发布SecUserSecRole.groovy的相关部分以及有关数据库配置的详细信息?

您的问题似乎在SecUserSecRole.groovy:32。我敢打赌,这是你的应用程序第一次尝试DB访问的地方。您能否发布SecUserSecRole.groovy的相关部分以及有关数据库配置的详细信息?

您的问题似乎在SecUserSecRole.groovy:32。我敢打赌,这是你的应用程序第一次尝试DB访问的地方。您能否发布SecUserSecRole.groovy的相关部分以及有关数据库配置的详细信息?

您的问题似乎在SecUserSecRole.groovy:32。我敢打赌,这是你的应用程序第一次尝试DB访问的地方。您能否发布SecUserSecRole.groovy的相关部分以及有关DB配置的详细信息?

这行有一个问题:grails-Dgrails.env=instance1 war

-Dgrails.env应设置为环境名称,例如:dev、test、prod或myCustomEnv,而不是应用程序的名称

此设置告诉Grails在DataSource.groovy和Config.groovy的environment部分中以提供的名称查找设置并应用它们。如果它们不存在,谁知道你会得到什么


正如您在stacktrace中所看到的,当Grails试图执行环境块时,您会得到一个空指针异常。这是因为您给它的值不存在。

这一行有一个问题:grails-Dgrails.env=instance1 war

-Dgrails.env应设置为环境名称,例如:dev、test、prod或myCustomEnv,而不是应用程序的名称

此设置告诉Grails在DataSource.groovy和Config.groovy的environment部分中以提供的名称查找设置并应用它们。如果它们不存在,谁知道你会得到什么


正如您在stacktrace中所看到的,当Grails试图执行环境块时,您会得到一个空指针异常。这是因为您给它的值不存在。

这一行有一个问题:grails-Dgrails.env=instance1 war

-Dgrails.env应设置为环境名称,例如:dev、test、prod或myCustomEnv,而不是应用程序的名称

此设置告诉Grails在DataSource.groovy和Config.groovy的environment部分中以提供的名称查找设置并应用它们。如果它们不存在,谁知道你会得到什么


正如您在stacktrace中所看到的,当Grails试图执行环境块时,您会得到一个空指针异常。这是因为您给它的值不存在。

这一行有一个问题:grails-Dgrails.env=instance1 war

-Dgrails.env应设置为环境名称,例如:dev、test、prod或myCustomEnv,而不是应用程序的名称

此设置告诉Grails在DataSource.groovy和Config.groovy的environment部分中以提供的名称查找设置并应用它们。如果它们不存在,谁知道你会得到什么



正如您在stacktrace中所看到的,当Grails试图执行环境块时,您会得到一个空指针异常。这是因为您给它的值不存在。

有人提出有用的建议吗?有人提出有用的建议吗?有人提出有用的建议吗?有人提出有用的建议吗?我已经解决了检查您建议的行的问题。在生产中没有stacktrace,所以我在开发中运行并解决了这个问题。非常感谢。是的,你是怎么解决的。这将有助于其他可能遇到相同问题的人,比如我:)解决方案是什么?我已经解决了检查您建议的线路的问题。在生产中没有stacktrace,所以我在开发中运行并解决了这个问题。非常感谢。是的,你是怎么解决的。这将有助于其他可能遇到相同问题的人,比如我:)解决方案是什么?我已经解决了检查您建议的线路的问题。在生产中没有stacktrace,所以我在开发中运行并解决了这个问题。非常感谢。是的,你是怎么解决的。这将有助于其他可能遇到相同问题的人,比如我:)解决方案是什么?我已经解决了检查您建议的线路的问题。在生产中没有stacktrace,所以我在开发中运行并解决了这个问题。非常感谢。是的,你是怎么解决的。这将有助于其他可能遇到相同问题的人,比如我:)解决方案是什么?你是对的。我错了。。。我应该写下env的名字,而不是n