首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Wildfly子系统配置自定义的Protostream序列化上下文初始化程序?

如何为Wildfly子系统配置自定义的Protostream序列化上下文初始化程序?
EN

Stack Overflow用户
提问于 2022-03-19 12:53:30
回答 1查看 303关注 0票数 2

我有一个包含需要自定义序列化的对象的Infinispan缓存的Wildfly应用程序。

编组编码数据的Infinispan文档建议使用基于Protostream的封送处理程序。

我已经为自定义对象生成了Protostream封送处理程序和序列化上下文初始化器,如相应的文件部分中所述。

我还将缓存容器配置为通过野生蝇Infinispan子系统配置属性使用"PROTOSTREAM“封送程序。

代码语言:javascript
复制
<cache-container marshaller="PROTOSTREAM" ... ><!-- ... --></cache-container>

如何配置Wildfly子系统以使用自定义序列化上下文初始化程序

根据关于注册序列化上下文初始化器的Infispan文档部分,有两种机制:

  1. 基于java.util.ServiceLoader的自动检测
  2. 通过serialization/context-initializer手动注册

这些文件警告说

如果手动注册一个SerializationContextInitializer实现,它将禁用自动注册。然后必须手动注册所有其他实现。

现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。

是否有一种通过declaratively Wildfly子系统配置配置自定义序列化上下文初始化器的方法?

(请注意,自定义序列化上下文初始化器实现由注释处理器生成到"target/“文件夹中。因此,我希望避免编程注册,因为这将涉及按名称加载该类或创建单独的项目以引用该实现类)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 14:00:04

现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。

WildFly将自动加载从与缓存容器关联的模块中可见的任何SerializationContextInitializer实例(通过ServiceLoader)。这意味着您需要将您的键/值类型以及/META-INF/services/org.infinispan.protstream.SerializationContextInitializer中枚举的相关WildFly实例打包为WildFly模块,并将该模块与缓存容器相关联。例如:

代码语言:javascript
复制
<cache-container name="foo" marshaller="PROTOSTREAM" modules="org.wildfly.clustering.infinispan.spi com.acme.bar">
   <!--...-->
</cache-container>

这将使用WF的默认SerializationContextInitializer实例集和打包在"com.acme.bar“模块中的自定义封送器配置带有SerializationContextInitializer编组的"foo”缓存容器。

请参阅WF文档中有关创建自定义模块的详细信息。

我意识到创建自定义模块的需要是很尴尬的。我希望在将来的版本中简化配置特定于部署的缓存容器的过程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71538299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档