我有一个包含需要自定义序列化的对象的Infinispan缓存的Wildfly应用程序。
编组编码数据的Infinispan文档建议使用基于Protostream的封送处理程序。
我已经为自定义对象生成了Protostream封送处理程序和序列化上下文初始化器,如相应的文件部分中所述。
我还将缓存容器配置为通过野生蝇Infinispan子系统配置属性使用"PROTOSTREAM“封送程序。
<cache-container marshaller="PROTOSTREAM" ... ><!-- ... --></cache-container>如何配置Wildfly子系统以使用自定义序列化上下文初始化程序
根据关于注册序列化上下文初始化器的Infispan文档部分,有两种机制:
java.util.ServiceLoader的自动检测serialization/context-initializer手动注册这些文件警告说
如果手动注册一个
SerializationContextInitializer实现,它将禁用自动注册。然后必须手动注册所有其他实现。
现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。
是否有一种通过declaratively Wildfly子系统配置配置自定义序列化上下文初始化器的方法?
(请注意,自定义序列化上下文初始化器实现由注释处理器生成到"target/“文件夹中。因此,我希望避免编程注册,因为这将涉及按名称加载该类或创建单独的项目以引用该实现类)。
发布于 2022-03-23 14:00:04
现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。
WildFly将自动加载从与缓存容器关联的模块中可见的任何SerializationContextInitializer实例(通过ServiceLoader)。这意味着您需要将您的键/值类型以及/META-INF/services/org.infinispan.protstream.SerializationContextInitializer中枚举的相关WildFly实例打包为WildFly模块,并将该模块与缓存容器相关联。例如:
<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文档中有关创建自定义模块的详细信息。
我意识到创建自定义模块的需要是很尴尬的。我希望在将来的版本中简化配置特定于部署的缓存容器的过程。
https://stackoverflow.com/questions/71538299
复制相似问题