0

私が理解しているように、GridGain 6 にはいくつかのカスタマイズされたシリアライゼーションがあり、さまざまな目的で H2 を利用しています。

H2 をシリアル化されたオブジェクト ストアとして使用します。たとえば、テーブル スキーマの関連部分を次に示します。

CREATE TABLE IF NOT EXISTS QUEUE (ID IDENTITY PRIMARY KEY, OBJECT OTHER NOT NULL ....)

行を挿入しようとすると、次のエラーが発生します。最後の数行は、GridH2IndexingSpi が構成されており、何かで失敗していることを示しています (私のテストはグリッドで実行されていませんが)。spi ソースとデバッガーが同期していないようで、行番号が無意味であるため、これ以上簡単にデバッグできませんでした。

Utils.java でデバッグできたことから、g​​ridgain シリアライザーが H2 で (静的に !!!!) 構成され、使用されているようです。

この状況を解決または回避する方法について何か考えはありますか? 1.3.176 (gridgain が使用) や新しい 1.4.177 などのさまざまな H2 バージョンを試しましたが、問題はインデックス 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
4

2 に答える 2

1

私はついに何が起こっているのか理解しました。GridGain H2 統合が実装された時点で、H2 には静的シリアライザーが 1 つしかありませんでした。そのため、GridGain は静的プロパティを使用しています。この問題の可能な回避策として、実際に通常の H2 シリアライゼーションを利用するカスタム シリアライザーを H2 データベースに設定してみることができますか?

最新の H2 バージョンは、データベースごとのシリアライザーの指定をサポートしており、GridGain は次のバージョンでそれを修正します。

于 2014-05-07T18:28:17.757 に答える
0

H2で何をしているのかわかりませんが、GridGainが内部で使用しているものと同じH2データベースを利用しないでください。

GridGain は、H2 を SQL インデックス作成およびクエリ機能専用に内部的に利用します。

于 2014-05-06T00:13:29.483 に答える