根据我的理解,GridGain 6有一些自定义的序列化,并且还用于各种目的的H2。
我们使用H2作为序列化对象存储。例如,这是表模式的相关部分。
CREATE TABLE IF NOT EXISTS QUEUE (ID IDENTITY PRIMARY KEY, OBJECT OTHER NOT NULL ....)
尝试插入行时,出现以下错误。最后几行表示GridH2IndexingSpi已配置并且某些内容失败(即使我的测试未在网格上运行)。因为spi源和我的调试器似乎不同步而且行号没有意义,所以我无法轻松调试。
根据我在Utils.java中调试的内容,看来gridgain序列化程序已在H2中配置(静态!!!!)并正在使用。
有关如何解决或避免这种情况的任何想法?我尝试过各种H2版本,例如1.3.176(使用gridgain)和较新的1.4.177,但正如预期的那样,它们没有任何区别,因为问题在于使用索引spi。
我可以尝试创建一个小的H2 / Gridgain项目项目,以说明问题,如果这会有所帮助。
由于
Exception in thread "pool-4-thread-1" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [90026]; error code [90026]; Serialization failed, cause: "java.lang.NullPointerException"; SQL statement:
INSERT INTO QUEUE (OBJECT....) VALUES (?,?,?,?) [90026-170]; nested exception is org.h2.jdbc.JdbcSQLException: Serialization failed, cause: "java.lang.NullPointerException"; SQL statement:
INSERT INTO QUEUE (OBJECT, ....) VALUES (?,?,?,?) [90026-170]
....
Caused by: org.h2.jdbc.JdbcSQLException: Serialization failed, cause: "java.lang.NullPointerException"; SQL statement:
INSERT INTO QUEUE (OBJECT, ....) VALUES (?,?,?,?) [90026-170]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:158)
....
Caused by: java.lang.NullPointerException
at org.gridgain.grid.spi.indexing.h2.GridH2IndexingSpi.access$100(GridH2IndexingSpi.java:145)
at org.gridgain.grid.spi.indexing.h2.GridH2IndexingSpi$1.serialize(GridH2IndexingSpi.java:201)
at org.h2.util.Utils.serialize(Utils.java:273)
... 27 more
答案 0 :(得分:1)
我终于明白了发生了什么。在实现GridGain H2集成时,H2只有一个静态序列化器。这就是GridGain使用静态属性的原因。作为问题的可能解决方法,您可以尝试在H2数据库中设置自定义序列化器,它实际上将使用常规的H2序列化吗?
最新的H2版本支持指定每个数据库的序列化程序,GridGain将在即将推出的版本中修复它。
答案 1 :(得分:0)
我不确定你用H2做什么,但你不应该使用GridGain内部使用的相同H2数据库。
GridGain内部使用H2专门用于SQL索引和查询功能。