Subject | Interserver Win32 Development |
---|---|
Author | ft@cluedup.com |
Post date | 2001-04-16T18:57:22Z |
Only three days ago I wrote to Mark O'Donohue "Judging from
the traffic and lack of response to questions, nobody pays any
attention to IB Java. " And now a host of new posts, especially on
Interserver!
There has been no community release of interclient / interserver.and
IB-Java development activity was non-existent for a long time until
David Jencks updated both programs. I decided to compile a Win32
version using the free bcc32 v.5.5. My c++ experience is 7-8 years
old and I was hoping for quick results.
I managed to produce an .exe with a new make file and patched code.
This version, together with the updated interclient and firebird, all
on the same NT machine, work in a fashion. However, interserver
behaves slightly differently from the packaged version 2.0 and there
are other problems common to both versions, examples below.
Good Java support will no-doubt spread the use of Firebird. I have
done what I could and will do more work on interclient when
interserver issues are resolved. Now is it possible that someone
compile interserver with VC++ 5 and post the .exe so that we can
compare runtime results with bcc55 output (provided it works as the
document on the Borland Interclient CVS (build_nt.txt at the root)
indicates). Today, Ken Richard mentioned one of the compile errors
that I encountered and fixed.
Longer term, would people with better knowledge of c++ and the
sources check the program, and perhaps revamp it along the lines
suggested by Jim Starkey today.
Mark has got my make and diff files to include on the CVS. In the
meantime, I'll email them to anyone interested.
Fred Toussi
First error example:
-Tested with my program. It makes MetaData calls to go through all
the tables in the DB then makes over 100 PrepareStatement calls. The
first PrepareStatement returns with Interclient.OutOfMemoryException.
Changed program to continue after the error and after 30 calls the
same error appears. Both work with Borland's interserver 2 version.
[interclient] Out of memory: InterServer exhausted server memory.
See API reference for exception
interbase.interclient.OutOfMemoryException
The debug.log indicates that it fails in NetTCP.cpp
I changed the source so that each PrepareStatement is called just
before it is needed for the first time, and it works.
Second error example:
When ResultSet.next() is called in a loop to position the cursor,
after 391 iterations it either reports
SQL error code = -504
Cursor unknown
Or calls to next() after this point are sometimes ignored for
hundreds of iterations. The net result is that if the program has
made, say, 1000 successive next() calls to return 100 records between
1000 and 1099 , it
actually returns records in the 700 range. I traced this to two
different error conditions:
[interclient][interbase] Dynamic SQL Error
SQL error code = -504
Cursor unknown
(reported after 390 next() calls)
[interclient] Invalid operation to read past end of cursor.
See API reference for exception
interbase.interclient.InvalidOperationException
(reported after 760 next() calls)
I then added:
ps.setFetchSize(total_rows_to_skip_or_read); before ResultSet rs =
ps.executeQuery();
It works correctly (does not ignore hundreds of next() calls) and the
frequency of failure is greatly reduced. But there was at least one
occurrence of the -504 error, this time after 100 next() calls.
end
the traffic and lack of response to questions, nobody pays any
attention to IB Java. " And now a host of new posts, especially on
Interserver!
There has been no community release of interclient / interserver.and
IB-Java development activity was non-existent for a long time until
David Jencks updated both programs. I decided to compile a Win32
version using the free bcc32 v.5.5. My c++ experience is 7-8 years
old and I was hoping for quick results.
I managed to produce an .exe with a new make file and patched code.
This version, together with the updated interclient and firebird, all
on the same NT machine, work in a fashion. However, interserver
behaves slightly differently from the packaged version 2.0 and there
are other problems common to both versions, examples below.
Good Java support will no-doubt spread the use of Firebird. I have
done what I could and will do more work on interclient when
interserver issues are resolved. Now is it possible that someone
compile interserver with VC++ 5 and post the .exe so that we can
compare runtime results with bcc55 output (provided it works as the
document on the Borland Interclient CVS (build_nt.txt at the root)
indicates). Today, Ken Richard mentioned one of the compile errors
that I encountered and fixed.
Longer term, would people with better knowledge of c++ and the
sources check the program, and perhaps revamp it along the lines
suggested by Jim Starkey today.
Mark has got my make and diff files to include on the CVS. In the
meantime, I'll email them to anyone interested.
Fred Toussi
First error example:
-Tested with my program. It makes MetaData calls to go through all
the tables in the DB then makes over 100 PrepareStatement calls. The
first PrepareStatement returns with Interclient.OutOfMemoryException.
Changed program to continue after the error and after 30 calls the
same error appears. Both work with Borland's interserver 2 version.
[interclient] Out of memory: InterServer exhausted server memory.
See API reference for exception
interbase.interclient.OutOfMemoryException
The debug.log indicates that it fails in NetTCP.cpp
I changed the source so that each PrepareStatement is called just
before it is needed for the first time, and it works.
Second error example:
When ResultSet.next() is called in a loop to position the cursor,
after 391 iterations it either reports
SQL error code = -504
Cursor unknown
Or calls to next() after this point are sometimes ignored for
hundreds of iterations. The net result is that if the program has
made, say, 1000 successive next() calls to return 100 records between
1000 and 1099 , it
actually returns records in the 700 range. I traced this to two
different error conditions:
[interclient][interbase] Dynamic SQL Error
SQL error code = -504
Cursor unknown
(reported after 390 next() calls)
[interclient] Invalid operation to read past end of cursor.
See API reference for exception
interbase.interclient.InvalidOperationException
(reported after 760 next() calls)
I then added:
ps.setFetchSize(total_rows_to_skip_or_read); before ResultSet rs =
ps.executeQuery();
It works correctly (does not ignore hundreds of next() calls) and the
frequency of failure is greatly reduced. But there was at least one
occurrence of the -504 error, this time after 100 next() calls.
end