OK, Lets see if I can make it simple from my perspective.  I understand 
that this could happen.  So in the event of an exception when reading the 
CLOB I will retry the query.
   - I will not get a new database connection - because it comes from a 
connection pool and H2 internal should already handle that.
   - I will call conn.createStatement(); and start off with a fresh 
statement object and retry the query and re-read from the 
resultSet.getClob() method.

I still have one question though.  Is it save to limit myself to retrying 
only the one exception that contains the "-tcpAllowOthers" phrase, or 
should I retry once for any and all exceptions?

Thanks.


On Thursday, September 18, 2014 2:31:48 PM UTC-4, Thomas Mueller wrote:
>
> Hi,
>
> I can reproduce the problem and found out what the reason is. When you 
> close the database in (A), the internal TCP server was stopped. The second 
> connection (B) then re-opened the database, but the remote connection had a 
> LOB HMAC, which is no longer valid.
>
> It's quite tricky to fix. The problem is that the LOB MAC salt needs to be 
> per database... Not sure how to do that best...
>
> Regards,
> Thomas
>
>
> OS: Solaris 10
>> JVM: 1.7.0_45
>> H2: 1.4.181
>> BoneCP ( Connection Pool )
>>
>> I am running in Automatic mixed mode with the following connection url...
>>
>> jdbc:h2:../data/audit;COMPRESS=TRUE;AUTOCOMMIT=ON;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;MV_STORE=FALSE;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=8701
>>
>> I have two Java applications both accessing one H2 database file.  By 
>> definition, the first application started (A) runs the H2 database as 
>> embedded and the second (B) connects via port 8701.
>> This does and has worked fine - up until today.
>>
>> Today the first application (A) started shutdown while the second (B) was 
>> in the process of reading a CLOB from the H2 database.
>> This second (B) application failed to read the CLOB and threw the "Remote 
>> connections to this server are not allowed" exception ( see below ).
>>
>> 1. What is the suggested way of handling this exception (It is obviously 
>> not "remote" as it is running on the same host) ?  
>> 2. Should this exception just be swallowed and have the application retry 
>> this query on its own?
>> 3. Is this function of interrupting the CLOB read?  Could this happen on 
>> other queries?
>>
>>
>> Caused by: java.io.IOException: org.h2.message.DbException: Remote 
>>> connections to this server are not allowed, see -tcpAllowOthers [90117-181] 
>>> at org.h2.message.DbException.convertToIOException(DbException.java:364) 
>>> at 
>>> org.h2.store.LobStorageRemoteInputStream.read(LobStorageRemoteInputStream.java:73)
>>>  
>>>
>>> at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) 
>>> at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
>>> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) 
>>> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) 
>>> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) 
>>> at java.io.InputStreamReader.read(InputStreamReader.java:184) 
>>> at java.io.BufferedReader.read1(BufferedReader.java:203) 
>>> at java.io.BufferedReader.read(BufferedReader.java:279) 
>>> at java.io.BufferedReader.fill(BufferedReader.java:154) 
>>> at java.io.BufferedReader.read1(BufferedReader.java:205) 
>>> at java.io.BufferedReader.read(BufferedReader.java:279) 
>>> at java.io.Reader.read(Reader.java:140) 
>>> at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2001) 
>>> at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1980) 
>>> at 
>>> com.issinc.cds.sbsend.mfwd.proc.MessageForwardMessageRouter.saveImpl(MessageForwardMessageRouter.java:197)
>>>  
>>>
>>> at 
>>> com.issinc.cds.sbsend.mfwd.proc.MessageForwardMessageRouter.saveFinalizedFormat(MessageForwardMessageRouter.java:168)
>>>  
>>>
>>> at 
>>> com.issinc.cds.sbsend.mfwd.proc.MessageForwardMessageRouter.processRequest(MessageForwardMessageRouter.java:90)
>>>  
>>>
>>> at 
>>> com.issinc.cds.sbsend.input.poller.MessageForwardDirPollerRenamer$1.ProcessData(MessageForwardDirPollerRenamer.java:110)
>>>  
>>>
>>> ... 5 more 
>>>
>>> Caused by: org.h2.message.DbException: Remote connections to this server 
>>> are not allowed, see -tcpAllowOthers [90117-181] 
>>> at org.h2.message.DbException.convert(DbException.java:283) 
>>> at org.h2.engine.SessionRemote.done(SessionRemote.java:629) 
>>> at org.h2.engine.SessionRemote.readLob(SessionRemote.java:778) 
>>> at 
>>> org.h2.store.LobStorageRemoteInputStream.read(LobStorageRemoteInputStream.java:71)
>>>  
>>>
>>> ... 23 more 
>>>
>>> Caused by: org.h2.jdbc.JdbcSQLException: Remote connections to this 
>>> server are not allowed, see -tcpAllowOthers [90117-181] 
>>> at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
>>> at org.h2.message.DbException.get(DbException.java:179) 
>>> at org.h2.message.DbException.get(DbException.java:155) 
>>> at org.h2.message.DbException.get(DbException.java:144) 
>>> at org.h2.value.Transfer.verifyLobMac(Transfer.java:764) 
>>> at org.h2.server.TcpServerThread.process(TcpServerThread.java:445) 
>>> at org.h2.server.TcpServerThread.run(TcpServerThread.java:159) 
>>> at java.lang.Thread.run(Thread.java:744) 
>>>
>>> at org.h2.engine.SessionRemote.done(SessionRemote.java:622) 
>>> ... 25 more
>>>
>>
>>
>>  -- 
>> 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