[JDEV] Thread id

Tijl Houtbeckers thoutbeckers at splendo.com
Wed Jan 29 08:07:37 CST 2003

"Matthew A. Miller" <linuxwolf at outer-planes.no-ip.com> wrote on 29-1-
2003 5:20:06: 
>Unfortunately, many clients never [properly] acknowledge the 
><thread/>, either for the start of a conversation or in maintaining it.
>  Because of this, clients like Exodus simply treat all messages 
>  between two 
>people [within a given amount of time] as part of the same 

The problem with <thread/> is that it tries to force client makers into 
a UI-design decision. (multiple conversations with on resource). Not 
all clients want to do this and the <thread/> mechanism provides no 
good way of not doing this, and at the same time staying compatible 
with clients who do implement this. That raises the question of wether 
such a UI centric spec. should exist. 

>  Since Exodus tries to be true to the spec, it tries to use <thread/> 
>  for 
>conversations.  But since "compliant" clients can't rely on the other 
>side maintaining the (optional) <thread/>, it behaves as it does.

I don't know what exodus does, but my client usually just sends 
type="chat" without <thread/>. As soon as the other client sends a 
thread-id it does send one back, always the latest one the other client 
used. This provides the most compatability with other clients, but it's 
far from complete. I'm thinking about changing this behaviour though, 
for the reason below. 

>Maybe, some day in the [far?] future, when all clients properly use 
><thread/>, can look back at this and have a good laugh (or tell our 
>grandchildren how tough it was to use IM, what with more than one 
>protocol in use; uphill both ways in the snow and all that).  In the 
>meantime, the following would probably be a good way for your client 
>to behave:
>-  If you get a <thread/>, you should maintain it.
>-  If your client is starting the conversation, generate one.

I don't agree with you here. Just send a type="chat" without a thread-
id. Smart clients that *do* support threads will notice that your 
client does not. If your client has no use for thread-ids why generate 
them and use them? Threads only seen usefull to me for having multiple 
conversations with the same resource at the same time. 

Or do you use them to keep track of when a conversation starts and ends?
 For example.. when you close the window, and open it again, generate a 
 new threadid. Though I suppose in some cases this kind of information 
 could be usefull to the other client, the other client can't do 
 anything with this info, since it doesn't know whether the old thread 
 stopped and a new one started, or wether there are just two different 
 threads at the same time. If you want to properly use this you should 
 think about using/extendind event-notification for this. 

>-  If it's missing, assume its part of the last conversation you had 
>with the "to" side, if any.

If you don't give the user the ability to see the difference between 
messages from different threads and don't give the user the ability to 
choose wich thread to respond in (for example by having multiple chat 
windows for multiple thread-ids), you have no use for thread-ids. So in 
the perfect world you should *never* send them, and clients that do 
support them should see type="chat" messages without a threadid as a 
seperate thread, to wich they also send back no thread-id, instead of 
trying to generate a new one all the time. 

Maybe we'll be telling our grandchilderen about how desktop-focuced 
Jabber once used to be.. and how some clients tried to force certain UI 
features through the protocol even.. /me wonders if they'll know what a 
desktop is... 

Tijl Houtbeckers
Java/J2ME/GPRS Software Engineer @ Splendo
The Netherlands

More information about the JDev mailing list