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