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

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



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, 
  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?

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

Attachment: Publisher.java
Description: Binary data

Attachment: Subscriber.java
Description: Binary data