McKoi db error
Geert Bevin
gbevin@uwyn.com
Tue Mar 18 14:42:00 GMT 2003
Hi Tom,
thanks for the info.
> I don't know what the McKoi db is, but cool.
McKoi db is a similar db to Hsql except that it strives for SQL92
completeness and usage in a server invironment as well as for embedded.
It's supposed to perform quite well in both areas.
> The error message in question comes from java.io.ObjectInputStream.
> Unfortunately for you, our serialization support isn't as well-tested
> as other parts of libgcj. So you've probably run into a serialization
> bug of some kind.
>> The only real option is to debug the library and find out what has
> gone wrong.
I also contacted the McKoi developers and they gave me some pointers
where the start looking. I thus spent the entire day tracing this
problem and I found a solution and an additional problem. First of all I
think both McKoi and gcj are at fault. The Serializable interface
documents that when the serialization requires special handling both the
readObject and writeObject methods should be implemented. Apparently
most jdk implementation provide the default implementation if either one
isn't implemented, but gcj apparently takes the other route. When adding
the following method to the Expression and TObject classes of McKoi db,
the initial problem disappears.
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
{
out.defaultWriteObject();
}
These errors occur during the creation of the initial structure of the
database and more specifically during the creation of the views. This
procedure continues now quite a bit further than before, but I
encountered a similar error. At first I thought it was the same issue
but now I'm doubting. Again I get the following error :
read view plan
> com.mckoi.database.Database ( lvl: 40 )
java.lang.Error: IO Error: Unknown marker on stream: 0
at
com.mckoi.database.ViewDef.deserializeFromBlob(com.mckoi.database.global.ByteLongObject)
(/home/gbevin/mckoi-sql/src/lib-com-mckoi.so)
at com.mckoi.database.DatabaseConnection.getViewDef(int)
(/home/gbevin/mckoi-sql/src/lib-com-mckoi.so)
at
com.mckoi.database.DatabaseConnection$ViewInternalTableInfo.getDataTableDef(int)
(/home/gbevin/mckoi-sql/src/lib-com-mckoi.so)
...
But, after hours of searching I couldn't replicate the problem in
memory. Then I decided to check what the bytes are that are available
after serialization and what the ones are that are available for
deserialization. I came to the constatation that they are very
different. In fact after 109 bytes, the rest of the byte array that is
provided to the deserialization method is filled with bytes that are
equal to 0! Therefore it's of course impossible to deserialize correctly.
Is there something known about the IO of the current 3.3 branch? I find
this a very strange problem and am a bit lost when thinking about how to
find a solution. I also asked the McKoi developers for additional help.
Any pointers are very appreciated !
Thanks for the help,
Geert
--
Geert Bevin Uwyn
"Use what you need" Lambermontlaan 148
http://www.uwyn.com 1030 Brussels
gbevin@uwyn.com Tel & Fax +32 2 245 41 06
PGP Fingerprint : 4E21 6399 CD9E A384 6619 719A C8F4 D40D 309F D6A9
Public PGP key : available at servers pgp.mit.edu, wwwkeys.pgp.net
More information about the Java
mailing list