}
KeyData[] keyDataArr = queryMatchingKeys(sessionInfo, xmlKey, subscribeQos.getData());
for (int jj=0; jj<keyDataArr.length; jj++) {
KeyData xmlKeyExact = keyDataArr[jj];
if (xmlKeyExact == null && xmlKey.isExact()) // subscription on a yet unknown topic ...
xmlKeyExact = xmlKey;
else if (xmlKeyExact != null && xmlKey.isDomain()) {
xmlKeyExact.setQueryType(xmlKey.getQueryType());
}
SubscriptionInfo subs = null;
if (sessionInfo.getConnectQos().duplicateUpdates() == false) {
Vector vec = clientSubscriptions.getSubscriptionByOid(sessionInfo, xmlKeyExact.getOid(), true);
if (vec != null) {
if (vec.size() > 0) {
subs = (SubscriptionInfo)vec.firstElement();
if (log.isLoggable(Level.FINE)) log.fine("Session '" + sessionInfo.getId() +
"', topic '" + xmlKeyExact.getOid() + "' is subscribed " +
vec.size() + " times with duplicateUpdates==false");
}
if (vec.size() > 1)
log.severe("Internal problem for session '" + sessionInfo.getId() + "', message '" + xmlKeyExact.getOid() + "' is subscribed " + vec.size() + " times but duplicateUpdates==false!");
}
}
if (subs == null) {
if (subsQuery != null) {