I test HTTP session persistence to db using latest WildFly application
server (Beta2 - SNAPSHOT, h2 1.3.173). I use this connection url
"jdbc:h2:file;AUTO_SERVER=true;DB_CLOSE_ON_EXIT=FALSE",
because I want database to survive serve shutdown. Occassionally I am
facing following exception:
Unique index or primary key violation: "PRIMARY_KEY_A ON
>> PUBLIC.""binarybased_default_host_session_db_cluster""(ID)"; SQL statement:
>
> INSERT INTO "binarybased_default_host_session_db_cluster" (datum, version,
>> id) VALUES(?,?,?) [23505-159]
>
> at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
>
> at org.h2.message.DbException.get(DbException.java:169)
>
> at org.h2.message.DbException.get(DbException.java:146)
>
> at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:81)
>
> at org.h2.index.PageBtree.find(PageBtree.java:121)
>
> at org.h2.index.PageBtreeLeaf.addRow(PageBtreeLeaf.java:146)
>
> at org.h2.index.PageBtreeLeaf.addRowTry(PageBtreeLeaf.java:100)
>
> at org.h2.index.PageBtreeIndex.addRow(PageBtreeIndex.java:105)
>
> at org.h2.index.PageBtreeIndex.add(PageBtreeIndex.java:96)
>
> at org.h2.table.RegularTable.addRow(RegularTable.java:130)
>
> at org.h2.command.dml.Insert.insertRows(Insert.java:124)
>
> at org.h2.command.dml.Insert.update(Insert.java:84)
>
> at org.h2.command.CommandContainer.update(CommandContainer.java:71)
>
> at org.h2.command.Command.executeUpdate(Command.java:212)
>
> at
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:143)
>
> at
>> org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:129)
>
>
You can also check full stack trace (slightly different) at
https://issues.jboss.org/browse/WFLY-2409. I've taken brief look to h2 code
and I would like to ask at following - looking
at org.h2.index.PageBtreeLeaf int addRow(SearchRow row, boolean tryOnly)
method line 145. What should happen when entryCount variable is not equal
to 0? Then it's called find(row, false, true, true), where is following
code construction:
if (add && index.indexType.isUnique()) {
>
> if (!index.containsNullAndAllowMultipleNull(compare)) {
>
> throw
>> index.getDuplicateKeyException(compare.toString());
>
> }
>
> }
>
>
First condition is always true in this case and unfortunately in my case
also the second condition evaluates as true. I am not really sure, what
could be the problem. I'll appreciate any suggestions. Thank's in advance.
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.