Hi again,

your code does the subscribe and additionally it puts the
subscribe request into the queue.
I believe this is to force auto-re-subscribing after the server
was away.
A better solution is probably to use persistent subscribes
in the server as described in

  
http://www.xmlblaster.org/xmlBlaster/doc/requirements/engine.persistence.subscription.html

if the server fails the old susbcriptions are there again,
if there was a only temporary network problem no action is needed.

With your code all subscriptions are allways queued
which may lead to multiple subscriptions after flushing the queue
after a network problem
when reaching the same server instance again (if not multiple subscribe
was switched off in the subscribe QoS).

What is you exact problem you wanted to solve,
i would need more info to decide if/how to add your
code to the distribution.

thanks

Marcel


> pikaiyuan wrote:
> 
>>Hello
>>
>>      I found there has some bug in connectionshandler.cpp like this: 
>>you are maybe forget to add SubscribeQueueEntry and UnSubscribeQueueEntry
>>to ClientQueueProperty, and result in some bugs when program runs in failsafe model.
>>    It runs correctly after I had made some changes.
> 
> 
> Hi,
> 
> thanks for reporting, we will look into this issue
> for the next release.
> 
> 
>>1. in subscribe() method
>>   try {
>>      SubscribeReturnQos ret = connection_->subscribe(key, qos);
>>      //add by pky to add subscribe entries to client ram queue
>>      if (!queue_) {
>>            if (!connectQos_) {
>>               throw XmlBlasterException(INTERNAL_SUBSCRIBE, ME + 
>> "::queuesubscribe", 
>>             "need to create a queue but the connectQos is NULL (probably never 
>> connected)");
>>            }
>>            if (log_.trace()) log_.trace(ME+":queueSubscribe", "creating a client 
>> queue ...");
>>            queue_ = &QueueFactory::getFactory().getPlugin(global_, 
>> connectQos_->getClientQueueProperty());
>>            log_.info(ME+":queuesubscribe", "created a client queue");
>>         }
>>         if (log_.trace()) 
>>            log_.trace(ME, string("queuesubscribe: entry has been queued"));
>>         SubscribeQueueEntry entry(global_, key, qos);
>>         queue_->put(entry);
>>       //end
>>       return ret;
>>   }   
>>   catch (XmlBlasterException& ex) {
>>      if ( ex.isCommunication() ) toPollingOrDead(&ex);
>>      throw ex;
>>   }
>>
>>2. in unsubscribe() method
>>   try {
>>      vector<UnSubscribeReturnQos> ret = connection_->unSubscribe(key, qos);
>>        //add by pky to add unsubscribe entries to client ram queue
>>      if (!queue_) {
>>            if (!connectQos_) {
>>               throw XmlBlasterException(INTERNAL_UNSUBSCRIBE, ME + 
>> "::queueunsubscribe", 
>>             "need to create a queue but the connectQos is NULL (probably never 
>> connected)");
>>            }
>>            if (log_.trace()) log_.trace(ME+":queueunsubscribe", "creating a client 
>> queue ...");
>>            queue_ = &QueueFactory::getFactory().getPlugin(global_, 
>> connectQos_->getClientQueueProperty());
>>            log_.info(ME+":queueunsubscribe", "created a client queue");
>>         }
>>         if (log_.trace()) 
>>            log_.trace(ME, string("queueunsubscribe: entry has been queued"));
>>       UnSubscribeQueueEntry entry(global_, key, qos);
>>         queue_->put(entry);
>>       //end
>>       return ret;
>>   }   
>>   catch (XmlBlasterException& ex) {
>>      if ( ex.isCommunication() ) toPollingOrDead(&ex);
>>      throw ex;
>>   }
>>
>>  By the way, does anyone has a look at ptp model in cplusplus client side.
> 
> It should run fine, do you experience any problems?
> 
> best regards,
> 
> Marcel
> 
>>thanks any way        
>>                              
>>
>>                         pikaiyuan
>>                         2004-07-01      
>>
>>
> 
> 
> 


-- 
http://www.xmlBlaster.org

Reply via email to