[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Request for new feature



Peter Antman wrote:
> 
> Hi,
> this is a request for a new feature in XmlBlaster. You will have to
> excuse me if this already works, I meen if the feature is already
> available in XmlBlaster, and I have missed it.
> 
> Background:
> 
> Naively I have assumed that the following behaviour was supported by
> XmlBlaster (since it seemded like something any MOM must have):
> 
> - A new client subscriber will only get new messages, not messages
>    published before it logged in and started its subscription.
> 
> Why is this needed? Lets take the following scenario:
> 
> - We have a publisher which is publishing news of some sort. In the key
>  the publisher not only ads a unique oid for every message, it also ad
>  metainformation,such as headline, typ of subject, and perhaps even the
>  body of the text.
> 
> - Clients wants to subscribe to these news, but through an XPATH query.
>   The XPATH query is not placed against the oid since that is unique for
>   every new message, but against the meta info.
> 
> - Only clients that are currently online should get messages that
>   matched their query. A client that goes offline and then comes back
>   should not recive any old messages.
> 
> - A future possibility would be to ad durable subscriptions so that
>   clients that identifyes them self in a special way may get old
>   messages (but not messages they have already recived).
> 
> Current behaviour:
> 
> I have not been able to get this type of behavour to work. Looking
> through the code I get to understand XmlBlaster a little better. To me
> it now seems as if there is a missmatch between the idea of specifying a
> target in the key and specifying searchable metadata. If I get it, the
> basic idea of XmlBlaster here is that messages with new content are
> published to the same key. This is not what I want.

Yes.

> 
> A soulution:
> 
> I have implemented a workaround for this. It might not be the best one,
> but it seems to work. It consists of the following two additions:
> 
> 1. Ad tag <topic> to PublishQoS (a boolean).
> 
> 2. If isTopic is true, then a published message will be removed after
>    publishing in RequestBroker, ie:
> 
>     // NEW FEATURE, Removes message after publishing
>          if (publishQoS.isTopic()) {
>              if (Log.TRACE) Log.trace(ME, "Erasing published message");
> 
>              fireMessageEraseEvent(clientInfo, msgUnitHandler);
>              msgUnitHandler.erase();
>              msgUnitHandler = null;
>          }
> 
> This will only be done i Pub/Sub mode.
> 
> Ok, am I totaly of line here?
> 
> Comments please.

I have added your suggestion, the new publish qos is
called

   <isVolatile>true</isVolatile>

see


http://www.xmlBlaster.org/xmlBlaster/doc/requirements/engine.qos.publish.isVolatile.html

A use case where a published message stays transient (volatile=false)
is for example a mechanical measurement device.
A GUI subscribing to this data wants to see the current
value even if published only every 10 minutes.

thanks,

Marcel


-- 
Marcel Ruff
mailto:ruff at swand.lake.de
http://www.lake.de/home/lake/swand/
http://www.xmlBlaster.org