Infinispan v11到v13 JDBC String缓存存储迁移报错求助
Infinispan v11 转 v13 JDBC String-Based缓存存储迁移问题
我尝试将Infinispan v11的JDBC String-Based缓存存储迁移至v13版本,已按照官方文档步骤操作,但出现空指针异常。想请教操作哪里有误?v11到v13的存储迁移是否受支持?
异常信息
WARN: ISPN000554: jboss-marshalling is deprecated and planned for removal Aug 25, 2022 9:29:35 PM org.infinispan.marshall.core.impl.DelegatingUserMarshaller start INFO: ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller' Aug 25, 2022 9:29:35 PM org.infinispan.factories.GlobalComponentRegistry preStart INFO: ISPN000128: Infinispan version: Infinispan 'Triskaidekaphobia' 13.0.9.Final Aug 25, 2022 9:29:36 PM org.infinispan.jboss.marshalling.JbossMarshallingModule cacheManagerStarting WARN: ISPN000554: jboss-marshalling is deprecated and planned for removal Aug 25, 2022 9:29:36 PM org.infinispan.marshall.core.impl.DelegatingUserMarshaller start INFO: ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller' Aug 25, 2022 9:29:36 PM org.jboss.threads.Version <clinit> INFO: JBoss Threads version 2.3.3.Final [WARNING] java.lang.reflect.InvocationTargetException at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:116) at java.lang.reflect.Method.invoke (Method.java:577) at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:297) at java.lang.Thread.run (Thread.java:833) Caused by: java.lang.NullPointerException: Cannot invoke "org.infinispan.persistence.spi.InitializationContext.getPersistenceMarshaller()" because "ctx" is null at org.infinispan.persistence.jdbc.impl.table.AbstractTableManager.<init> (AbstractTableManager.java:100) at org.infinispan.persistence.jdbc.impl.table.AbstractTableManager.<init> (AbstractTableManager.java:86) at org.infinispan.persistence.jdbc.impl.table.PostgresTableManager.<init> (PostgresTableManager.java:20) at org.infinispan.persistence.jdbc.impl.table.TableManagerFactory.getManager (TableManagerFactory.java:49) at org.infinispan.tools.store.migrator.jdbc.JdbcStoreReader.getTableManager (JdbcStoreReader.java:80) at org.infinispan.tools.store.migrator.jdbc.JdbcStoreReader.iterator (JdbcStoreReader.java:68) at org.infinispan.tools.store.migrator.StoreMigrator.run (StoreMigrator.java:110) at org.infinispan.tools.store.migrator.StoreMigrator.main (StoreMigrator.java:138) at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104) at java.lang.reflect.Method.invoke (Method.java:577) at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:297) at java.lang.Thread.run (Thread.java:833)
migrator.properties配置
source.type=JDBC_STRING source.cache_name=mycache source.version=11 source.dialect=POSTGRES source.connection_pool.connection_url=jdbc:postgresql://localhost:5400/mydemo source.connection_pool.driver_class=org.postgresql.Driver source.connection_pool.username=mydemo source.connection_pool.password=mypassword source.table.string.table_name_prefix=my_cache source.table.string.id.name=ID source.table.string.id.type=VARCHAR source.table.string.data.name=DATA source.table.string.data.type=bytea source.table.string.timestamp.name=TIMESTAMP source.table.string.timestamp.type=BIGINT source.table.string.segment.name=SEGMENT source.table.string.segment.type=BIGINT source.segment_count=256 source.db.major_version=14 source.db.minor_version=4 target.type=JDBC_STRING target.version=13 target.cache_name=mycache target.dialect=POSTGRES target.connection_pool.connection_url=jdbc:postgresql://localhost:5430/minedemo target.connection_pool.driver_class=org.postgresql.Driver target.connection_pool.username=mydemo target.connection_pool.password=mypassword target.table.string.table_name_prefix=my_cache target.table.string.id.name=ID target.table.string.id.type=VARCHAR target.table.string.data.name=DATA target.table.string.data.type=bytea target.table.string.timestamp.name=TIMESTAMP target.table.string.timestamp.type=BIGINT target.table.string.segment.name=SEGMENT target.table.string.segment.type=BIGINT target.segment_count=256 target.db.major_version=14 target.db.minor_version=5 target.key_to_string_mapper=org.infinispan.persistence.keymappers.DefaultTwoWayKey2StringMapper
问题解答
1. v11到v13的存储迁移是否支持?
Infinispan官方支持跨小版本和大版本的存储迁移,v11到v13属于支持范围内的版本升级迁移,无需担心版本兼容性问题。
2. 空指针异常的原因及修复方案
你遇到的NPE是因为源端配置缺少key_to_string_mapper参数。JDBC_STRING存储依赖键映射器将缓存键转为字符串存储,虽然v11版本默认使用DefaultTwoWayKey2StringMapper,但迁移工具在读取v11源存储时,需要显式指定该参数才能正确初始化上下文,避免ctx为空的情况。
修复步骤:
- 在
migrator.properties的source配置段添加一行:source.key_to_string_mapper=org.infinispan.persistence.keymappers.DefaultTwoWayKey2StringMapper - 重新执行迁移工具即可。
额外检查项:
- 确认源端和目标端的数据库连接配置正确,数据库服务正常运行
- 确保迁移工具使用的是v13版本的
infinispan-tools包,不要混用其他版本的工具
内容的提问来源于stack exchange,提问作者Waleed Ahmed
相关产品推荐
相关产品推荐

