|
From: Tom T. <tom...@se...> - 2006-01-30 19:04:04
|
Sounds reasonable. Thanks for looking into it. Looking forward to the
patch.
-Tom
on 1/30/2006 6:03 AM Ian Ibbotson said the following:
> Hiya Tom.
>
> The problem is that it's hard (not possible) for JZKit to tell the
> difference between a legitimate close of the other end of the
> association, and the remote association simply shutting down the
> socket. Although it may properly be thought of as "Not being an
> exceptional situation", we've not yet found a better model for the
> behaviour in java. When we port to NIO then there are some cleaner
> solutions we can adopt, but for now, the best I can do is to catch
> and deal with this exception inside the endpoint, so you don't see it.
> I've made that change and committed it to subversion, i'll make a
> patch release shortly and let you know.
>
> Ian.
>
> On Wed, 2006-01-04 at 09:40 -0800, Tom Talbott wrote:
>> Hello,
>>
>> I am in the process of porting an application over from using jzkit
>> 1.2.4 to jzkit2 2.0.1. Most everything works, but I am getting a
>> SocketException when I close down the Searchable object (in my case the
>> Z3950Origin). I can reproduce the problem by adding "s.close();" as the
>> last line of the testLOC() method of your Z3950Test.java test case.
>>
>> =============
>> for ( int i=0; ( ( e.hasMoreElements() ) && ( i < 60 ) ); i++) {
>> System.err.println("Processing result "+i);
>> Object o = e.nextElement();
>> System.err.println(o);
>> }
>>
>> s.close();
>> ==============
>>
>> The close is required to shutdown the search thread, unless I'm missing
>> something. If I remove it like you have in your test case, then I get a
>> bunch of threads lying around.
>>
>> Below is the log. It looks like a close is encoded and sent, but the
>> socket is closed before the response can be read.
>>
>> Jan 4, 2006 9:29:46 AM org.jzkit.search.provider.z3950.Z3950Origin close
>> FINE: Z3950Origin::close()
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint shutdown
>> FINE: ZEndpoint::shutdown() - host=z3950.loc.gov status=2 running=true
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint encodeAndSend
>> FINE: encodeAndSend...
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run
>> SEVERE: problem
>> java.net.SocketException: socket closed
>> at java.net.SocketInputStream.socketRead0(Native Method)
>> at java.net.SocketInputStream.read(SocketInputStream.java:129)
>> at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
>> at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.read(BERInputStream.java:661)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.decodeNextTag(BERInputStream.java:155)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.tag_codec(BERInputStream.java:126)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.constructedBegin(BERInputStream.java:541)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.sequenceBegin(BERInputStream.java:525)
>> at
>> org.jzkit.z3950.gen.v3.Z39_50_APDU_1995.InitializeRequest_codec.serialize(InitializeRequest_codec.java:52)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.implicit_tag(BERInputStream.java:612)
>> at
>> org.jzkit.a2j.codec.runtime.BERInputStream.choice(BERInputStream.java:488)
>> at
>> org.jzkit.z3950.gen.v3.Z39_50_APDU_1995.PDU_codec.serialize(PDU_codec.java:65)
>> at org.jzkit.z3950.util.ZEndpoint.run(ZEndpoint.java:666)
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run
>> INFO: SocketException
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run
>> INFO: java.net.SocketException: socket closed - hostname=z3950.loc.gov
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint notifyAPDUEvent
>> FINE: notifyAPDUEvent : 22
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint notifyAPDUEvent
>> FINE: Incoming PDU refid: null
>> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run
>> FINE: End of ZEndpoint listening thread for host z3950.loc.gov active z
>> thread counter=0
>>
>> Thanks for looking into this,
>>
>>
> ------------------------------------------------------------------------
>
>
> Ian Ibbotson, Director
> Knowledge Integration Ltd
> Sheffield Technology Parks
> Cooper Buildings
> Arundel Street
> Sheffield
> South Yorkshire
> S1 2NS
> email: ian...@k-...
> Tel: 0114 221 0746
> Fax: 0114 221 1801
> http://www.k-int.com
>
--
Tom Talbott
Serials Solutions <http://www.serialssolutions.com>
tom...@se...
206-545-9056 x1081
|