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

Re: [xmlblaster] questions about return value of update() method



pikaiyuan wrote:
> Hi,Marcel Ruff
> 	
> Our purpose is as follows:  If client throw user.upate.error, the server will resend the message;
>  
>    I trace the client side kernel file "CorbaCallbackServer.java'" and the server side correspond file "CallbackCorbaDriver.java"
>    
>    CorbaCallbackServer.java
>   1  try {
>   2       // convert Corba to internal MsgUnitRaw and call update() ...
>   3       MsgUnitRaw[] localMsgUnitRawArr = CorbaDriver.convert(glob, msgUnitArr);
>   4        //log.error(ME, "DEBUG ONLY: " + localMsgUnitRawArr[0].toXml());
>   5        return boss.update(cbSessionId, localMsgUnitRawArr);
>   6    }
>   7    catch(XmlBlasterException e) {
>   8       log.warn(ME, "Delivering message to client failed, message is not handled by client: " + e.toString());
>   9       throw CorbaDriver.convert(e); // convert to org.xmlBlaster.protocol.corba.serverIdl.XmlBlasterException
>   10    }
>   11    catch (Throwable e) {
>   12       log.warn(ME, "Delivering message to client failed, message is not handled by client: " + e.toString());
>   13       e.printStackTrace();
>   14       throw CorbaDriver.convert(new XmlBlasterException(glob, ErrorCode.USER_UPDATE_ERROR, ME,
>   15                                 "Delivering message to client failed, message is not handled by client: " + e.toString()));
>   16    }
>   
>   
>   
> when i use the following code in my client provided update() method as follows:
> 
>   "throw new XmlBlasterException(glob, ErrorCode.USER_UPDATE_ERROR, "PKYTEST");"
>   
>   the control goes to CorbaCallbackServer.java line 7, i find line 9 throw null,

How can it be that line 9 throws 'null'??
What is your xmlBlaster release and OS?

This must be a bug, where does the 'null' come from?

This results in the COMMUNICATION_NOCONNECTION and the message is
resent (which you don't want).

>   and the CallbackCorbaDriver.java control goes to line 31, I think the control should 
>   go to line 14.
>   
>   
>  
>   
> 1  public final String[] sendUpdate(MsgUnitRaw[] msgArr) throws XmlBlasterException {
> 2    if (msgArr == null || msgArr.length < 1 || msgArr[0] == null) {
> 3        Thread.currentThread().dumpStack();
> 4        throw new XmlBlasterException(glob, ErrorCode.INTERNAL_ILLEGALARGUMENT, ME, "Illegal sendUpdate() argument");
> 5     }
> 6
> 7     org.xmlBlaster.protocol.corba.serverIdl.MessageUnit[] updateArr = new org.xmlBlaster.protocol.corba.serverIdl.MessageUnit[msgArr.length];
> 8    for (int ii=0; ii<msgArr.length; ii++) {
> 9       updateArr[ii] = convert(msgArr[ii]);
> 10    }
> 11
> 12    try {
> 13        return this.cb.update(callbackAddress.getSecretSessionId(), updateArr);
> 14      } catch (org.xmlBlaster.protocol.corba.serverIdl.XmlBlasterException ex) {
> 15         XmlBlasterException xmlBlasterException = CorbaDriver.convert(glob, ex);
> 16
> 17         // WE ONLY ACCEPT ErrorCode.USER... FROM CLIENTS !
> 18         if (xmlBlasterException.isUser())
> 19            throw xmlBlasterException;
> 20
> 21         if (callbackAddress == null) {
> 22            throw new XmlBlasterException(glob, ErrorCode.USER_UPDATE_ERROR, ME,
> 23                   "CORBA Callback of " + msgArr.length + " messages failed",
> 24                   xmlBlasterException);
> 25         }
> 26         else {
> 27            throw new XmlBlasterException(glob, ErrorCode.USER_UPDATE_ERROR, ME,
> 28                   "CORBA Callback of " + msgArr.length + " messages to client [" +
> 29                   callbackAddress.getSecretSessionId() + "] failed.", xmlBlasterException);
> 30         }
> 31      } catch (Throwable e) {
> 32         if (callbackAddress == null)
> 33            throw new XmlBlasterException(glob, ErrorCode.COMMUNICATION_NOCONNECTION, ME,
> 34                "CORBA Callback of " + msgArr.length + " messages failed", e);
> 35         else
> 36            throw new XmlBlasterException(glob, ErrorCode.COMMUNICATION_NOCONNECTION, ME,
> 37                "CORBA Callback of " + msgArr.length + " messages to client ["
> 38                 + callbackAddress.getSecretSessionId() + "] failed", e);
> 39      }
> 40   }
> 
> 
>  The concrete problem of server and client is as follows:
>    when i hit a key in publisher and the subscriber will see the message which is resent
>    by xmlblaster server,
>   and when i increse the hit speed in publisher,
>   the xmlbaster server will resend the same message in a loop ,
>   this behaviour is error. and the example code is in attachment file.
>   Following the steps:
>   1.java org.xmlBlaster.Main -wipeOutJDBC true -trace true
>   2.java psdemo.Subscriber -session.name pky/1 -passwd pky -dispatch/callback/retries -1 -multiSubscribe false  -dispatch/callback/pingInterval 2000 -interactiveUpdate true -historyNumUpdates 0 -trace false -dispatch/callback/delay 5000 
>   3.java psdemo.Publisher -session.name pky -passwd pky -numPublish 100 -persistent true
>   
>   I think the resend logic if error, can u tell me the solution to this problem and how to fix it?

I can't reproduce your 'null' from above. I have updated
the requirement with the wanted behavior and examples
how to play with it (i have commited HelloWorldSubscribe
to cvs which supports now an option to force update exceptions.)

Please see

http://www.xmlblaster.org/xmlBlaster/doc/requirements/interface.update.html

If you find out more about your 'null' please report it here.

regards,

Marcel


> 
> note:
> 		there is a attachment file.
> 	
>   thanks a lot!
> 	
> 	
> pikaiyuan
> pi_kyuan at cvicse.com
> 2003-08-31
> 


-- 
http://www.xmlBlaster.org