You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:06:30