public void postSend(MsgQueueEntry[] entries) {
try {
for (int i=0; i<entries.length; i++) {
if (MethodName.PUBLISH.equals(entries[i].getMethodName())) {
MsgUnit msg = entries[i].getMsgUnit();
PublishReturnQos retQos = (PublishReturnQos)entries[i].getReturnObj();
log.info("Send asynchronously message '" + msg.getKeyOid() + "' from queue: " + retQos.toXml());
}
else
log.info("Send asynchronously " + entries[i].getMethodName() + " message from queue");
}
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* @see I_PostSendListener#sendingFailed(MsgQueueEntry[], XmlBlasterException)
*/
public boolean sendingFailed(MsgQueueEntry[] entries, XmlBlasterException ex) {
try {
for (int i=0; i<entries.length; i++) {
if (MethodName.PUBLISH.equals(entries[i].getMethodName())) {
MsgUnit msg = entries[i].getMsgUnit();
log.info("Send asynchronously message '" + msg.getKeyOid() + "' from queue failed: " + ex.getMessage());
}
else
log.info("Send asynchronously " + entries[i].getMethodName() + " message from queue");
}
} catch (Throwable e) {
e.printStackTrace();
}
//return true; // true: We have handled the case (safely stored the message) and it may be removed from connection queue
return false; // false: Default error handling: message remains in queue and we go to dead
}
});
// ConnectQos checks -session.name and -passwd from command line
log.info("============= CreatingConnectQos");
ConnectQos qos = new ConnectQos(glob);
if (connectPersistent) {
qos.setPersistent(connectPersistent);
}
// "__remoteProperties"
qos.getData().addClientProperty(Constants.CLIENTPROPERTY_REMOTEPROPERTIES, true);
if (connectQosClientPropertyMap != null) {
Iterator it = connectQosClientPropertyMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
qos.addClientProperty(key, connectQosClientPropertyMap.get(key).toString());
}
}
log.info("ConnectQos is " + qos.toXml());
ConnectReturnQos crq = con.connect(qos, new I_Callback() {
public String update(String cbSessionId, UpdateKey updateKey, byte[] content, UpdateQos updateQos) throws XmlBlasterException {
try {
log.info("Received '" + updateKey.getOid() + "':" + new String(content, "UTF-8"));
} catch (UnsupportedEncodingException e) {
log.severe("Update failed: " + e.toString());
}
return "";
}
}); // Login to xmlBlaster, register for updates
log.info("Connect success as " + crq.toXml());
org.xmlBlaster.util.StopWatch stopWatch = new org.xmlBlaster.util.StopWatch();
for(int i=0; true; i++) {
if (numPublish != -1)
if (i>=numPublish)
break;
String currCounter = ""+(i+1);
if (numPublish > 0) { // Add leading zeros to have nice justified numbers in dump
String tmp = ""+numPublish;
int curLen = currCounter.length();
currCounter = "";
for (int j=curLen; j<tmp.length(); j++) {
currCounter += "0";
}
currCounter += (i+1);
}
String currOid = org.xmlBlaster.util.ReplaceVariable.replaceAll(oid, "%counter", currCounter);
if (interactive) {
char ret = (char)Global.waitOnKeyboardHit("Hit 'b' to break, hit other key to publish '" + currOid + "' #" + currCounter + "/" + numPublish);
if (ret == 'b')
break;
}
else {
if (sleep > 0 && i > 0) {
try { Thread.sleep(sleep); } catch( InterruptedException e) {}
}
log.info("Publish '" + currOid + "' #" + currCounter + "/" + numPublish);
}
PublishKey pk = new PublishKey(glob, currOid, "text/xml", "1.0");
if (domain != null) pk.setDomain(domain);
pk.setClientTags(org.xmlBlaster.util.ReplaceVariable.replaceAll(clientTags, "%counter", currCounter));
PublishQos pq = new PublishQos(glob);
pq.setPriority(priority);
pq.setPersistent(persistent);
pq.setLifeTime(lifeTime);
pq.setForceUpdate(forceUpdate);
pq.setForceDestroy(forceDestroy);
pq.setSubscribable(subscribable);
if (clientPropertyMap != null) {
Iterator it = clientPropertyMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
pq.addClientProperty(key, clientPropertyMap.get(key).toString());
}
//Example for a typed property:
//pq.getData().addClientProperty("ALONG", (new Long(12)));
}
if (i == 0) {
TopicProperty topicProperty = new TopicProperty(glob);
topicProperty.setDestroyDelay(destroyDelay);
topicProperty.setCreateDomEntry(createDomEntry);
topicProperty.setReadonly(readonly);
if (historyMaxMsg >= 0L) {
HistoryQueueProperty prop = new HistoryQueueProperty(this.glob, null);
prop.setMaxEntries(historyMaxMsg);
topicProperty.setHistoryQueueProperty(prop);
}
if (consumableQueue)
topicProperty.setMsgDistributor("ConsumableQueue,1.0");
pq.setTopicProperty(topicProperty);
log.info("Added TopicProperty on first publish: " + topicProperty.toXml());
}
if (destination != null) {
log.fine("Using destination: '" + destination + "'");
Destination dest = new Destination(glob, new SessionName(glob, destination));
dest.forceQueuing(forceQueuing);
pq.addDestination(dest);
}
byte[] content;
if (contentSize >= 0) {
content = new byte[contentSize];
Random random = new Random();
for (int j=0; j<content.length; j++) {
content[j] = (byte)(random.nextInt(96)+32);
//content[j] = (byte)('X');
//content[j] = (byte)(j % 255);
}
}
else if (contentFile != null && contentFile.length() > 0) {
content = FileLocator.readFile(contentFile);
}
else {
content = org.xmlBlaster.util.ReplaceVariable.replaceAll(contentStr, "%counter", ""+(i+1)).getBytes();
}
if (log.isLoggable(Level.FINEST)) log.finest("Going to parse publish message: " + pk.toXml() + " : " + content + " : " + pq.toXml());
MsgUnit msgUnit = new MsgUnit(pk, content, pq);
if (log.isLoggable(Level.FINEST)) log.finest("Going to publish message: " + msgUnit.toXml());
if (oneway) {
MsgUnit msgUnitArr[] = { msgUnit };
con.publishOneway(msgUnitArr);
log.info("#" + (i+1) + "/" + numPublish +
": Published oneway message '" + msgUnit.getKeyOid() + "'");
}
else {
PublishReturnQos prq = con.publish(msgUnit);
if (log.isLoggable(Level.FINEST)) log.finest("Returned: " + prq.toXml());
log.info("#" + currCounter + "/" + numPublish +
": Got status='" + prq.getState() +
(prq.getData().hasStateInfo()?"' '" + prq.getStateInfo():"") +
"' rcvTimestamp=" + prq.getRcvTimestamp() +
" for published message '" + prq.getKeyOid() + "'");
}
}
log.info("Elapsed since starting to publish: " + stopWatch.nice(numPublish));
if (erase) {