Hi,

I guess this could be improved, but it might be complicated; I didn't try
and don't plan to try.

The "automatic mixed mode" has some limits. It is not possible to
automatically re-run the complete transaction (multiple statements) because
the statements could depend on each other. The most logical way for an
application is to use a loop like this (pseudo-code, with connection pool):

repeat maxRetries
    c = getConnection
    c.execute "..."
    c.execute "..."
    c.commit
finally
    c.close

Regards,
Thomas


On Mon, Sep 28, 2015 at 10:08 AM, Joonas Pulakka <[email protected]>
wrote:

> To elaborete,
>
> I do realize that if the first (server) process shuts down *during*
> incomplete transaction, then obviously that has to trigger an exception in
> the client because the transaction could not be completed, and even if a
> server would be re-started at that point, it would be probably difficult to
> guarantee ACID properties of the transaction.
>
> But I don't understand why there is an exception even if the transaction
> is started way *after* the first (server) process has shut down -
> couldn't the client just start a server in that case? Is this just a corner
> case that happens to be handled the way it is handled currently, or is
> there a specific reason why is has to be handled that way?
>
> Best Regards,
> Joonas
>
>
> perjantai 25. syyskuuta 2015 13.37.15 UTC+3 Joonas Pulakka kirjoitti:
>>
>> From http://h2database.com/html/features.html#auto_mixed_mode and
>> http://h2database.com/html/features.html#auto_reconnect :
>>
>>    - (Mixed mode) When the first connection is closed, the server stops.
>>    If other (remote) connections are still open, one of them will then start 
>> a
>>    server (auto-reconnect is enabled automatically).
>>    - The auto-reconnect feature causes the JDBC driver to reconnect to
>>    the database if the connection is lost. The automatic re-connect only
>>    occurs when auto-commit is enabled; if auto-commit is disabled, an
>>    exception is thrown.
>>
>> So this means that when mixed mode is used with auto-commits disabled,
>> and the first (server) process shuts down, then the second (client) process
>> throws an exception when processing the next statement, instead of
>> re-connecting to the DB. Furthermore (result of experimentation) it
>> *does* reconnect to the DB just by retrying the statement that threw the
>> exception. After that everything works fine again. Only the first statement
>> that's issued after the server died, receives Connection is broken:
>> "session closed" [90067-185];; Error code: 90067.
>>
>>
>> Question: what's the point of *automatic re-connect only occurs when
>> auto-commit is enabled; if auto-commit is disabled, an exception is thrown*?
>> Does this mean that if I want to use mixed mode with auto-commits disabled,
>> I have to make all my transactions to check for "session closed" exception
>> and retry in that case? Is there a better way?
>>
>>
>> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/h2-database.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to