使用 Wildfly 11 复制 infinispan 缓存

2024-01-09

我正在wildfly-11.0.0.Final上使用java 8和java ee7开发一个分布在多节点上的Web应用程序,并且我使用infinispan缓存来共享数据。 这是缓存的配置:

<cache-container name="mycache-container" default-cache="my-cache" jndi-name="infinispan/mycache-container">
    <transport lock-timeout="60000"/>
    <replicated-cache name="my-cache" jndi-name="infinispan/mycache-container/my-cache" mode="ASYNC">
        <locking isolation="READ_COMMITTED"/>
        <transaction locking="OPTIMISTIC" mode="NON_XA"/>
        <eviction strategy="NONE"/>
    </replicated-cache>
</cache-container>

这是用于复制缓存的 jgroups 子系统的配置:

<subsystem xmlns="urn:jboss:domain:jgroups:5.0">
        <channels default="ee">
            <channel name="ee" stack="tcpping" cluster="ejb"/>
        </channels>
        <stacks>
            <stack name="tcpping">
                <transport type="TCP" socket-binding="jgroups-tcp"/>
                <protocol type="org.jgroups.protocols.TCPPING">
                    <property name="initial_hosts">
                        node1[7600], node2[7600]
                    </property>
                </protocol>
                <protocol type="MERGE3"/>
                <protocol type="FD_SOCK"/>
                <protocol type="FD_ALL"/>
                <protocol type="VERIFY_SUSPECT"/>
                <protocol type="pbcast.NAKACK2"/>
                <protocol type="UNICAST3"/>
                <protocol type="pbcast.STABLE"/>
                <protocol type="pbcast.GMS"/>
                <protocol type="MFC"/>
                <protocol type="FRAG2"/>
            </stack>
        </stacks>
    </subsystem>

在应用程序启动时,我从数据库加载所有实体并放入缓存中。 如果我以这种方式通过容器注入缓存:

@Resource(lookup="java:jboss/infinispan/mycache-container") 
EmbeddedCacheManager container;

@PostConstruct
public void init(){
    Cache mycache = container.getCache();
}

应用程序启动并加载缓存中的所有对象没有问题,但在其他节点中,这些对象也不会被复制,jgroups 集群的创建也没有错误。 相反,如果我以这种方式直接注入缓存:

@Resource(lookup="java:jboss/infinispan/mycache-container/my-cache") 
Cache myCache;

启动时的应用程序给我这个错误: “WFLYCTL0348:等待服务容器稳定性 [300] 秒后超时。操作将回滚。首先更新服务的步骤;并且服务器未启动”

我应该如何使用缓存来防止启动超时并能够在所有节点上复制该对象?

谢谢。


第一种方法无法按预期工作的原因是,您没有采取任何措施来确保在调用 EmbeddedCacheManager.getCache() 之前安装必需的缓存配置。

为了确保安装必要的缓存配置,您可以:

  1. 直接注入缓存(正如您在第二种方法中所做的那样)
  2. 通过@Resource 或resource-ref 将必需的缓存配置添加到您的应用程序中。

我总是推荐#1,因为它更直观、更简洁,并且缓存生命周期由容器处理。

至于“超时[...]等待容器稳定性”的原因,如果没有看到将对象加载到缓存中的代码以及相关的堆栈跟踪,我无法确定。只是猜测 - 您确定交易模式是 NON_XA 吗?这意味着缓存操作通过同步提交到活动的 UserTransaction。这不是一个常见的要求。如果您在 @PostConstruct 方法中加载缓存,并且没有正确处理事务,这可能会阻止您的组件启动(导致等待容器稳定性超时)。

在一个不相关的说明中,我建议使用未弃用的 TCPPING 配置。例如

<socket-discovery-protocol type="TCPPING" socket-bindings="node0 node1"/>

...其中套接字绑定引用配置的出站套接字绑定。 例如

<outbound-socket-binding name="node0">
    <remote-destination host="node0" port="7600"/>
</outbound-socket-binding>
<outbound-socket-binding name="node1">
    <remote-destination host="node1" port="7600"/>
</outbound-socket-binding>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Wildfly 11 复制 infinispan 缓存 的相关文章

随机推荐

  • 使用默认值而不是异常来提升 numeric_cast<> ?

    每当升压时numeric cast lt gt 转换失败 会抛出异常 boost 中是否有类似的模板可以让我指定默认值 或者在这种情况下捕获异常是我唯一能做的事情 我不太担心所有额外异常处理的性能 但我宁愿使用标准模板也不愿编写无用的包装函
  • 找不到 PROTOBUF 编译器

    我正在尝试使用 Caffe 进行 CMake 但我的系统找不到 protobuf 编译器 我之前安装过protobuf2 7 0 现在我切换回2 6 1 如何配置我的 CMake 来识别 protobuf2 6 1 编译器 我已经做好了 s
  • C++ 中正弦、余弦和平方根的最快实现(不需要太精确)

    我在过去一个小时内搜索了这个问题 但只有泰勒级数或一些示例代码要么太慢要么根本无法编译 好吧 我在谷歌上找到的大多数答案都是 谷歌一下 已经有人问过了 但遗憾的是it s not 我在低端 Pentium 4 上分析我的游戏 发现大约 85
  • 如何关闭对话框内的 jQuery Dialog?

    如何在不使用关闭按钮的情况下关闭对话框内的 jQuery 对话框 对话框内是一个简单的表单请求 如果提交成功 UI 对话框将自动关闭并刷新父页面 div div
  • 如何在一个类中执行多个 setTimeout jQuery?

    我有一堂课叫 content 该内容有一个名为 data time 我想隐藏它所在的所有元素 content与 一起上课setTimeout 功能 有人可以帮助我吗 HTML 代码 div class content first div d
  • Amazon Web Services (AWS) Cognito 错误“令牌不是来自此身份池支持的提供商。”

    我在跑步这个应用程序来自 GitHub https github com aws samples aws cognito java desktop app它允许用户注册并登录 Cognito 客户端应用程序 我正在使用适用于企业 Java
  • Web SQL DROP/DELETE 表不起作用

    我尝试了几种不同的命令来清除我的 Web SQL 数据库 但没有一个起作用 只是为了向您展示我已将所有这些功能组装成一个过度的功能 我缺少什么 Drop Table from Database Fix This function overK
  • 定义很多常量会导致性能或内存问题吗?

    我有一个网站 它使用了很多常量 这些常量的定义如下 例如 define CONSTANT 1 我目前有大约 200 个这样的定义的列表 每次加载页面时都会运行此列表 这会严重影响我的性能或内存使用吗 有理由避免在每次页面加载时列出 200
  • 如何在 Go 语言中模拟 exec.Command 进行多个单元测试?

    我刚刚学习了使用的单元测试函数exec Command 即嘲笑exec Command 我继续添加更多单元案例 但遇到了无法模拟不同场景输出的问题 这是示例代码hello go我正在尝试测试 package main import fmt
  • 如何拉伸div高度以填充父div - CSS

    我有一个页面div就像下面的布局 屏幕截图所示 代码在这里 html body margin 0 padding 0 border 0 B C D position absolute A top 0 width 100 height 35p
  • /usr/local/ssl/lib/libcrypto.a:无法读取符号:错误值

    因此 今晚对这个问题进行了一些详尽的研究后 我仍然感到困惑 我正在运行 Debian Wheezy 并且试图让curl 支持 ssl 但它显然拒绝这样做 我尝试删除 OpenSSL 和 Curl 的所有痕迹 然后使用 apt get ins
  • 从客户端应用程序访问环境变量

    我想从位于根目录中的 env 文件访问环境变量 并使用 dotenv 在我的 App js React 文件中使用它们 但是 我无法访问它们 在客户端 App js 文件结构 我想使用的变量 根 env我想在其中使用它们的文件 根 客户端
  • Webpack 在最终包中包含未使用的导出(不是 tree shake)

    我有一个设置 其中库的index js 主入口点 导出库中的所有内容 所以它的设置如下 export from mod1 export from mod2 etc 看一看 https github com purtuga common mi
  • 在 Python 中同时打开一个文件多次是否安全?

    我似乎记得在较低级别的语言中 在程序中多次打开文件可能会导致共享查找指针 通过在 Python 中搞乱一下 这似乎并没有发生在我身上 cat file txt first line second third fourth and fifth
  • 如何禁用PageView边缘的动画?

    我希望用户在 PageView 中的页面之间滚动 但当他们尝试在第一页之前和最后一页之后滚动时 我不想向他们显示动画 我可以在彩色动画 黑色动画和无滚动之间切换 但我根本找不到任何禁用动画的可能性 如果没有这种可能性 我怎样才能改变该动画的
  • 如何删除 Thumbs.db(它正在被另一个进程使用)

    我有一个简单的控制台应用程序 我正在尝试删除文件夹 Directory Delete folder true 我得到了烦人的 Thumbs db 的例外 The process cannot access the file Thumbs d
  • Hi/Lo 算法是什么?

    Hi Lo 算法是什么 我在中找到了这个NHibernate http en wikipedia org wiki NHibernate文档 这是生成唯一密钥的一种方法 第 5 1 4 2 节 但我还没有找到对其工作原理的很好的解释 我知道
  • 使用基于查询字符串参数的 HTTP 身份验证保护 url

    我有一个网站 其链接如下 http www example com index php id 1 http www example com index php id 1 http www example com index php id 3
  • Java中的虚表和抽象

    在一次采访中 我得到了以下代码 public abstract class Base public int x 1 public Base foo public abstract void foo public class Derived
  • 使用 Wildfly 11 复制 infinispan 缓存

    我正在wildfly 11 0 0 Final上使用java 8和java ee7开发一个分布在多节点上的Web应用程序 并且我使用infinispan缓存来共享数据 这是缓存的配置