java 如何为Wildfly Infinispan子系统配置自定义Protostream序列化上下文初始化器?

fumotvh3  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(90)

我有一个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/" 文件夹中。因此,我希望避免 * 程序化 * 注册,因为这将涉及通过名称加载该类或创建单独的项目以引用该实现类。)

yb3bgrhw

yb3bgrhw1#

现在,Wildfly本身已经注册了自己的各种序列化上下文初始化器。因此,自动检测被禁用。
WildFly将自动加载任何从与您的cache-container关联的模块可见的SerializationContextInitializer示例(通过ServiceLoader)。这意味着您需要将您的键/值类型沿着在/META-INF/services/org.infinispan.protstream.SerializationContextInitializer中枚举的关联SerializationContextInitializer示例打包为WildFly模块,并将此模块与您的cache-container关联。例如:

<cache-container name="foo" marshaller="PROTOSTREAM" modules="org.wildfly.clustering.infinispan.spi com.acme.bar">
   <!--...-->
</cache-container>

字符串
这将使用WF的默认SerializationContextInitializer示例集和“com.acme.bar“模块中打包的自定义编组器来配置带有ProtoStream编组的“foo”cache-container。
请参阅WF文档中有关创建自定义模块的详细信息。
我意识到需要创建一个自定义模块是尴尬的。我希望在未来的版本中简化配置部署特定缓存容器的过程。

相关问题