我有一个Wildfly应用程序,它有一个Infinispan缓存,其中包含需要自定义序列化的对象。
Marshalling and Encoding Data的Infinispan文档建议使用基于protobuf的 Protostream marshaller。
我已经为自定义对象生成了Protostream封送器和 * 序列化上下文初始化器 *,如相应的文档部分所述。
我还通过Wildfly Infinispan子系统配置属性将该高速缓存容器配置为使用“PROTOSTREAM”编组器:
<cache-container marshaller="PROTOSTREAM" ... ><!-- ... --></cache-container>
字符串
如何配置Wildfly Infinispan子系统以使用自定义 * 序列化上下文初始化器 *?
根据Infisspan文档中关于注册序列化上下文初始值设定项的部分,有两种机制:
1.通过java.util.ServiceLoader
自动检测
1.通过serialization/context-initializer
手动注册
文件警告说,
如果您手动注册一个SerializationContextInitializer
实现,它将禁用自动注册。然后您必须手动注册所有其他实现。
现在,Wildfly本身已经注册了自己的各种 * 序列化上下文初始化器 *。因此,自动检测被禁用。
有没有一种方法可以通过Wildfly Infinispan子系统配置来声明性地配置自定义 * 序列化上下文初始化器 *?
(Note自定义 * 序列化上下文初始化器 * 实现由注解处理器生成到 “target/" 文件夹中。因此,我希望避免 * 程序化 * 注册,因为这将涉及通过名称加载该类或创建单独的项目以引用该实现类。)
1条答案
按热度按时间yb3bgrhw1#
现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。
WildFly将自动加载任何从与您的cache-container关联的模块可见的
SerializationContextInitializer
示例(通过ServiceLoader
)。这意味着您需要将您的键/值类型沿着在/META-INF/services/org.infinispan.protstream.SerializationContextInitializer
中枚举的关联SerializationContextInitializer
示例打包为WildFly模块,并将此模块与您的cache-container关联。例如:字符串
这将使用WF的默认
SerializationContextInitializer
示例集和“com.acme.bar“模块中打包的自定义编组器来配置带有ProtoStream编组的“foo”cache-container。请参阅WF文档中有关创建自定义模块的详细信息。
我意识到需要创建一个自定义模块是尴尬的。我希望在未来的版本中简化配置部署特定缓存容器的过程。