【问题标题】:immutant failing to add a cache to a web cache containerimmutant 未能将缓存添加到 Web 缓存容器
【发布时间】:2015-05-27 20:41:34
【问题描述】:

我有一个通过 wildfly 部署的 heimdallr 应用程序。在这个应用程序中,我使用了命名空间 immutant.caching 提供的缓存功能。

我第一次部署应用程序时一切正常,没有错误。如果我尝试重新部署应用程序,我会收到以下错误:

2015-05-27 18:20:54,703 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 82) MSC000001: Failed to start service jboss.infinispan.web.dist: org.jboss.msc.service.StartException in service jboss.infinispan.web.dist: java.lang.IllegalStateException: Cache container has been stopped and cannot be reused. Recreate the cache container.
        at org.jboss.as.clustering.msc.AsynchronousService$1.run(AsynchronousService.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
        at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.IllegalStateException: Cache container has been stopped and cannot be reused. Recreate the cache container.
        at org.infinispan.manager.DefaultCacheManager.assertIsNotTerminated(DefaultCacheManager.java:797)
        at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:389)
        at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:412)
        at org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:103)
        at org.jboss.as.clustering.infinispan.DefaultCacheContainer.getCache(DefaultCacheContainer.java:94)
        at org.jboss.as.clustering.infinispan.subsystem.CacheService.start(CacheService.java:78)
        at org.jboss.as.clustering.msc.AsynchronousService$1.run(AsynchronousService.java:86)
        ... 4 more

2015-05-27 18:20:54,710 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-10) MSC000001: Failed to start service jboss.infinispan.web."my-application.war".config: org.jboss.msc.service.StartException in service jboss.infinispan.web."my-application.war".config: JBAS010291: Failed to add DIST_ASYNC my-application.war cache to non-clustered web cache container.
        at org.jboss.as.clustering.infinispan.subsystem.AbstractCacheConfigurationService.start(AbstractCacheConfigurationService.java:73)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]

我初始化缓存的方式是

(def site-cache (agent
                  (immutant.caching/cache "site-cache" :ttl [ttl :seconds])
                  :error-mode :continue
                  :error-handler (fn [the-agent exception]
                                  (log/error "Exception in Site Agent " exception (string/join "\n" (.getStackTrace *e))))))

使用 immutant 2.x 我的理解是 immutant.caching/cache 如果容器不存在则应该创建它。有没有办法让我验证缓存容器是否存在,如果没有在我尝试向它添加缓存之前创建它?

编辑:这是由我们的部署脚本错误引起的。已经进行了两次黑客攻击以部署相同的 .war,这导致应用程序无法正确关闭,从而导致错误。

【问题讨论】:

  • 我在本地复制您的问题时遇到了困难。您可以在没有代理的情况下尝试一下,看看问题是否会消失?您使用的是哪个版本的 WildFly,这是在集群中吗?
  • 经过进一步测试,我想我已经排除了代理的问题。您能否提供一个演示问题的小型示例应用程序,我可以在本地构建/部署?另外,你是如何 [un] 部署应用程序的:接触战争、使用 jboss-cli、Web 界面或其他方式?
  • 我将 Bamboo 用于我的构建系统,并使用竹子的重新部署功能重新部署它。不幸的是,我的 NDA 阻止我发布我的应用程序的任何部分。我可以提供代码 sn-ps,但不能提供应用程序本身的任何部分。
  • 我使用的是 Wildfly 8.2.0 final,JBoss 1.2.2 final 和 JBoss Modules 1.3.3 final
  • 我不熟悉 Bamboo,但我了解 NDA。您是否可以尝试使用我们的功能演示来复制该问题?我正在按照以下步骤操作:github.com/immutant/feature-demo#in-wildfly。当我触摸那个 demo.war 文件来重新部署它时,一切都很好。如果您能弄清楚如何采取不同的措施来解决您的问题,我们可以从那里着手。给您添麻烦了!

标签: caching clojure wildfly immutant


【解决方案1】:

听起来您可能没有使用lein-immutant 插件来创建您的war 文件。该插件将一些元数据添加到 war 文件中,以确保类路径是正确的,等等。绝对有可能通过其他方式创建战争文件,例如lein-ring 插件,可以在第一次部署成功,并在取消部署时使应用服务器处于不可预知的状态。

【讨论】:

    【解决方案2】:

    这是由我们的部署脚本错误引起的。为满足应用程序需求两次部署相同的 .war 进行了黑客攻击。当重新部署发生时,黑客阻止了应用程序彻底关闭,并导致缓存出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2019-05-24
      相关资源
      最近更新 更多