【问题标题】:war file with Cache implementation works fine on grails 2.4.4 but fails on tomcat 7带有缓存实现的war文件在grails 2.4.4上运行良好,但在tomcat 7上失败
【发布时间】:2015-10-06 23:12:12
【问题描述】:

我正在使用 grails 2.4.4 并尝试在其中实现缓存。 我在 lib 文件夹和构建路径中添加了 cache-api.jar,并添加了一个 maven 依赖项编译“org.jsr107.ri:cache-ri-impl:1.0.0-RC1”。 当我作为 grails run-app 运行战争时,缓存工作正常。 但是当我在 tomcat 上部署相同的战争时,它给了我以下异常。

[http-apr-9090-exec-2] ERROR errors.GrailsExceptionResol
ver  - NoSuchMethodError occurred when processing request: [POST] /pharma/login
javax.cache.CacheManager.createCache(Ljava/lang/String;Ljavax/cache/configuratio
n/Configuration;)Ljavax/cache/Cache;. Stacktrace follows:
org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionExcepti
on: Executing action [login] of controller [pharma.PharmaController]  ca
used exception: Runtime error executing action
        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:745)
Caused by: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecu
tionException: Runtime error executing action
        ... 3 more
Caused by: java.lang.reflect.InvocationTargetException
        ... 3 more
Caused by: java.lang.NoSuchMethodError: javax.cache.CacheManager.createCache(Lja
va/lang/String;Ljavax/cache/configuration/Configuration;)Ljavax/cache/Cache;
        at trident.TridentCache.getCache(TridentCache.java:32)
        at trident.pharma.PharmaService.login(PharmaService.groovy:107)
        at trident.pharma.PharmaController.login(PharmaController.groovy:46)
        ... 3 more

令我感到困惑的是,war 在 grails 环境中运行良好,缓存实现也运行良好,但同样的 war 在 Tomcat 上部署时,会引发上述异常。

【问题讨论】:

    标签: java maven tomcat grails caching


    【解决方案1】:

    如果不知道哪个版本的 grails、tomcat 和 jdK 就位,很难理解发生了什么,但只看异常似乎你的 Grails 实现和你使用的 Tomcat 有两个不同版本的 javax.cache .CacheManager 类。

    因此缺少方法...

    更新:您提到的包 org.jsr107.ri:cache-ri-impl:1.0.0-RC1 使用 javax.cache » cache-api 1.0.0-RC1

    该特定版本在 CacheManager 类中具有此方法签名

      <K, V, C extends Configuration<K, V>> Cache<K, V> createCache(String cacheName,
                                                                C configuration)
      throws IllegalArgumentException;
    

    【讨论】:

    • grails 2.4.4,tomcat 7.0.61,JDK7
    • 好的,我添加了我在你提到的库中找到的内容。我建议在进入 tomcat 后再次检查库的路径。确保 jar 位于正确的 tomcat/lib 或 tomcat/webapps//WEB-INF/lib 文件夹中,并仔细检查版本仍然是 1.0.0-RC1。最后一项检查可能是获取项目的 maven-tree,以查看其他依赖项是否已包含具有不同版本的同一个库
    • 非常感谢......我在 /WEB-INF/lib 中发现了问题......还有另一个导致问题的 cache-api-0.9 jar。我删除了那个罐子,它工作得很好。只是想知道为什么这不会导致 grails 环境出现问题。
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多