Fehlerbehebung
Z.B. Objekte mit langen Texten in I18N-HTML-Attributen können mit H2 zwar gespeichert, aber nicht mehr geladen werden. Im Log taucht die folgende Fehlermeldung auf:
Caused by: java.sql.SQLException: Unable to fetch knowledge item with id 'ID(99724)' of type 'I18NAttributeStorage'. at com.top_logic.knowledge.service.db2.DefaultDBAccess.fetch(DefaultDBAccess.java:101) at com.top_logic.knowledge.service.db2.DefaultDBAccess.fetchAll(DefaultDBAccess.java:201) at com.top_logic.knowledge.service.db2.MonomorphicSearch$IdOnlyResult.internalNext(MonomorphicSearch.java:565) ... 98 more Caused by: org.h2.jdbc.JdbcSQLDataException: Value too long for column "CHARACTER VARYING": "<p>Eine neue Login-Seite soll in TL eingebunden werden und für alle Applikatione... (1816529)" [22001-210] at org.h2.message.DbException.getJdbcSQLException(DbException.java:525) at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) at org.h2.message.DbException.get(DbException.java:227) at org.h2.message.DbException.getValueTooLongException(DbException.java:341) at org.h2.value.ValueLob.getStringTooLong(ValueLob.java:192) at org.h2.value.ValueClob.getString(ValueClob.java:169) at org.h2.jdbc.JdbcResultSet.getString(JdbcResultSet.java:283) at com.top_logic.basic.sql.ResultSetProxy.getString(ResultSetProxy.java:200) at com.top_logic.basic.sql.DBHelper.getClobValue(DBHelper.java:703) at com.top_logic.basic.sql.DBHelper.mapToJava(DBHelper.java:1521) at com.top_logic.dob.attr.storage.AbstractAttributeStorage.fetchObject(AbstractAttributeStorage.java:317) at com.top_logic.dob.attr.storage.DBAttributeStorageImpl.fetchValue(DBAttributeStorageImpl.java:51) at com.top_logic.dob.attr.storage.AbstractMOAttributeStorageImpl.loadValue(AbstractMOAttributeStorageImpl.java:72) at com.top_logic.knowledge.service.db2.AbstractDBKnowledgeItem.loadAttribute(AbstractDBKnowledgeItem.java:282) at com.top_logic.knowledge.service.db2.AbstractDBKnowledgeItem.loadAttributeValues(AbstractDBKnowledgeItem.java:276) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.loadAttributeValues(DBKnowledgeItem.java:407) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.createItem(DBKnowledgeBase.java:5108) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.findOrCreateItem(DBKnowledgeBase.java:5075) at com.top_logic.knowledge.service.db2.DBKnowledgeBase.findOrCreateItem(DBKnowledgeBase.java:5043) at com.top_logic.knowledge.service.db2.DefaultDBAccess.fetch(DefaultDBAccess.java:82) ... 100 more
Das entsprechende Kommando schlägt fehl.
Das Problem betrifft alle Tabellen mit CLOB-Spalten.
Lösung
CLOB-Spalten werden immer über die Clob-API, und nicht mehr über die getString() API im ResultSet abgerufen.
Test
- test.com.top_logic.basic.sql.TestDBHelper.testClob()