OK, since I got no takers on this I did a little more testing and found that the presence problem only takes place when someone logs out of Windows itself (not Spark). So, they have Spark minimized and running and they decide to leave for the day so they hit the old ctrl-alt-del and logoff. Somehow, it is as if the Spark process is killed instead of it normally exiting or logging off since it never seems to have a chance to update its presence with the server. Anyone else out there have this issue and know a workaround or solution (this didn’t happen with earlier versions of Spark). I may have to have users switch to another chat client at this point as people are getitng confused more and more by each others’ status (particulary near the end of the work day obviously).
thanks in advance
UPDATED
It looks like the server (Openfire) does update itself since if I am viewing “sessions” through the admin console and then log out of a windows on another machine with Spark running, the server drops that instance from the list (after a refresh of the web page). The presence notice, or change in status, doesn’t get propogated out to any other clients though. So, the admin console shows the sessions accurately but the Spark clients do not (nor will they ever update to be correct). Is it the job of Spark to make sure all the other clients get information? It seems odd that the server doesn’t let the users know a client status has changed (or have the client “ping” the server periodically to make sure everything matches).
And this is what I see in the debug log
java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.j ava:232)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcesso r.java:206)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.access$500(SocketIoProce ssor.java:44)
at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProce ssor.java:506)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2008.02.01 15:00:57 passed presence:
<presence type=“unavailable” from=“user1@domain”/>
which makes it look like the server is passing the “unavailable” presence but no clients get it.