pikaiyuan wrote:
Hi,Marcel
I had found something report error when I using an oracle database for
durable subscriptions(every message needs to be stored is about 5000k).the errors are:
[2003-8-23 11:19:41 WARN JdbcManagerCommonTable-XB_-xmlBlaster_192_168_80_11_3412-msgUnitStore_i
nforMessaging_192_168_80_11_3412sblszsnsrxx-addEntry()] Could not insert entry 'org.xmlBlaster.e
ngine.MsgUnitWrapper'-'sblszsnsrxx/2003-08-23 11:19:41.353000001-1060053581353000001': java.sql.SQLE
xception: inserted value too large for column: 18998
[2003-8-23 11:19:42 ERROR org.xmlBlaster.engine.msgstore.cache.PersistenceCachePlugin-msgUnitStor
e:xmlBlaster_192_168_80_11_3412/sblszsnsrxx] put: an error occured when writing to the persisten
t queue, transient entry sblszsnsrxx/2003-08-23 11:19:41.353000001 is not swapped and will be lost.
Is the DB up and running ? xmlBlasterException errorCode=[resource.db.unknown] serverSideExcepti
on=true node=[xmlBlaster_192_168_80_11_3412] location=[JdbcManagerCommonTable.addEntry] message=
[An unknown error with the backend database using JDBC occurred : java.sql.SQLException: inserted
value too large for column: 18998] state:
<PersistenceCachePlugin id='msgUnitStore:xmlBlaster_192_168_80_11_3412/sblszsnsrxx' type='CACHE
' version='1.0' numOfEntries='95' numOfBytes='2094335'>
<MapPlugin id='msgUnitStore:xmlBlaster_192_168_80_11_3412/sblszsnsrxx' type='RAM' version='1.0
' numOfEntries='95' numOfBytes='2094335'>
<persistence relating='msgUnitStore' maxEntries='1000000' maxEntriesCache='1000000' maxBytes='209
7152'/>
</MapPlugin>
<JdbcQueueCommonTablePlugin id='msgUnitStore:xmlBlaster_192_168_80_11_3412/sblszsnsrxx' type='
JDBC' version='1.0' numOfEntries='0' numOfBytes='0'>
<persistence relating='msgUnitStore' maxEntries='100000000' maxEntriesCache='1000000'/>
<numOfPersistentsCached>0</numOfPersistentsCached>
<sizeOfPersistentsCached>0</sizeOfPersistentsCached>
<numOfEntriesCached>0</numOfEntriesCached>
<numOfBytesCached>0</numOfBytesCached>
<numOfEntries>0</numOfEntries>
<numOfBytes>0</numOfBytes>
<numOfPersistents>0</numOfPersistents>
<sizeOfPersistents>0</sizeOfPersistents>
</JdbcQueueCommonTablePlugin>
</PersistenceCachePlugin>
i had modified some codes in JdbcManagerCommonTable.java, and the problem is solved.
the modification are:
//preStatement.setBytes(5, blob);
//use this bytes array to construct a InputStream
ByteArrayInputStream blob_stream = new ByteArrayInputStream(blob) ;
// preStatement.setBytes(5, blob);
preStatement.setBinaryStream(5, blob_stream,(int)sizeInBytes);
In my option,setBytes mothed is limited by length of blob object, but setBinaryStream not.
Marcel, any problem in my modification?
Thanks for this big fix.
If Michele approves it (check other databases) he will fix it in our cvs.
regards,
Marcel
regards
pikaiyuan
pi_kyuan at cvicse.com
2003-08-25