use of javax.naming.NamingException in project ACS by ACS-Community.
the class DefaultSubscriberImpl method subscribe.
/**
* Method subscribe
*
*
* @param topic
* @param listener
* @param selector
*
* @return long the subscription handle identifier
*
* @throws JMSException
* @throws NamingException
*
*/
public long subscribe(String topic, SubscriptionListener listener, String selector) throws JMSException, NamingException {
cat.info("subscribe(" + topic + ", listener, " + selector + ")");
if (closed) {
throw (new JMSException("Subscriber closed."));
}
SubscriptionHandle handle = new SubscriptionHandle();
handle.setSubscriptionTopic(topic);
handle.setSubscriptionSelector(selector);
handle.setSubscriptionListener(listener);
StringBuffer local_selector = new StringBuffer();
if (NotificationHelper.isNotification(topic)) {
// this is a subscription to notifications, no further selection is required
local_selector.append(selector);
} else {
// subscription to a generic topic, adding subscriber specific selection
if (selector != null) {
local_selector.append(selector);
local_selector.append(" AND ");
}
local_selector.append("( (");
local_selector.append(NotificationHelper.SUBSCRIPTION_ID_PROPERTY);
local_selector.append(" IS NULL) OR (");
local_selector.append(NotificationHelper.SUBSCRIPTION_ID_PROPERTY);
local_selector.append(" = '");
local_selector.append(subscriberId);
local_selector.append("@");
local_selector.append(handle.getSubscriptionToken());
local_selector.append("') )");
}
TopicSession session = null;
TopicSubscriber subscriber = null;
Topic the_topic = createTopic(topic);
try {
session = connection.createTopicSession();
subscriber = session.createSubscriber(the_topic, local_selector.toString(), false);
} catch (JMSSecurityException jse) {
cat.error("JMSSecurityException caught");
throw (new NamingException(jse.getMessage()));
} catch (JMSException je) {
cat.error("JMSException caught");
throw (new NamingException(je.getMessage()));
} catch (ConnectionException ce) {
cat.error("ConnectionException caught");
throw (new JMSException(ce.getMessage()));
} catch (Exception e) {
cat.error("Generic exception caught", e);
}
subscriber.setMessageListener(listener);
handle.setSubscriber(subscriber);
handle.setSession(session);
synchronized (subscribers) {
subscribers.put(new Long(handle.getSubscriptionToken()), handle);
}
if (!NotificationHelper.isNotification(topic)) {
publishNotification(NotificationHelper.CONSUMER_OPEN_NOTIFICATION, handle);
}
return handle.getSubscriptionToken();
}
use of javax.naming.NamingException in project ACS by ACS-Community.
the class DefaultSubscriberImpl method publishNotification.
/**
* Method publishNotification
*
* @param type
* @param handle
* @throws JMSException
*/
private void publishNotification(int type, SubscriptionHandle handle) throws JMSException {
if (notificationsEnabled) {
cat.info("publishNotification(" + type + ", " + handle.getSubscriptionTopic() + ", " + handle.getSubscriptionSelector() + ")");
notificationMessage.setIntProperty(NotificationHelper.NOTIFICATION_TYPE_PROPERTY, type);
notificationMessage.setStringProperty(NotificationHelper.SELECTOR_PROPERTY, handle.getSubscriptionSelector());
notificationMessage.setStringProperty(NotificationHelper.TOPIC_PROPERTY, handle.getSubscriptionTopic());
notificationMessage.setStringProperty(NotificationHelper.SUBSCRIPTION_ID_PROPERTY, subscriberId + "@" + handle.getSubscriptionToken());
Topic t = null;
try {
t = createTopic(NotificationHelper.CarrierTopics[type]);
} catch (NamingException ne) {
ne.printStackTrace();
}
notificationPublisher.publish(t, notificationMessage);
}
}
use of javax.naming.NamingException in project ACS by ACS-Community.
the class JNDIContext method lookup.
/**
* @see Context#lookup(Name)
* THIS IS OLD CDB implementation
public Object lookup(Name name) throws NamingException {
//System.out.println("CDBContext lookup on " + this.name + " for " + name.toString());
String nameToLookup = this.name + "/" + name;
String recordName = nameToLookup.substring(nameToLookup.lastIndexOf('/')+1);
// get list from the server
String elements = dal.list_nodes(nameToLookup);
try {
if (elements.indexOf(recordName + ".xml") != -1) {
String xml = dal.get_DAO(nameToLookup);
return new JNDIXMLContext(nameToLookup, elements, xml);
} else {
if (elements.length() == 0 ) { // inside a XML?
int slashIndex = nameToLookup.lastIndexOf('/');
String newName;
while( slashIndex != -1 ) {
newName = nameToLookup.substring(0,slashIndex);
recordName = newName.substring(newName.lastIndexOf('/')+1);
elements = dal.list_nodes(newName);
if (elements.indexOf(recordName + ".xml") != -1) {
String xml = dal.get_DAO(newName);
recordName = nameToLookup.substring(slashIndex+1);
return new JNDIXMLContext(newName, elements, xml).lookup(recordName);
}
slashIndex = newName.lastIndexOf('/');
}
throw new NamingException("No name " + nameToLookup );
}
return new JNDIContext(nameToLookup, elements);
}
} catch (CDBRecordDoesNotExistEx e) {
// if it does not exists then it is just a context
return new JNDIContext(nameToLookup, elements);
} catch (CDBXMLErrorEx e) {
AcsJCDBXMLErrorEx acse = new AcsJCDBXMLErrorEx(e);
throw new NamingException(acse.getFilename());
}
}*/
/**
* This methos returns either a new JNDI_Context or a new JNDI_XMLContxt obj.
*/
public Object lookup(Name name) throws NamingException {
final String lookupName = name.toString();
final String fullLookupName = this.name + "/" + lookupName;
String daoElements = dal.list_daos(fullLookupName);
if (daoElements.length() == 0)
daoElements = null;
// is subnode
StringTokenizer token = new StringTokenizer(elements);
while (token.hasMoreTokens()) if (token.nextElement().equals(lookupName)) {
// is DAO?
if (daoElements != null) {
try {
return new JNDIXMLContext(fullLookupName, dal.list_nodes(fullLookupName), dal.get_DAO(fullLookupName), logger);
} catch (CDBXMLErrorEx th) {
AcsJCDBXMLErrorEx jex = AcsJCDBXMLErrorEx.fromCDBXMLErrorEx(th);
NamingException ex2 = new NamingException(jex.getFilename() + ": " + jex.getErrorString());
ex2.setRootCause(jex);
throw ex2;
} catch (Throwable th) {
throw new NamingException("Failed to retrieve DAO: " + fullLookupName);
}
} else
return new JNDIContext(fullLookupName, dal.list_nodes(fullLookupName), logger);
}
if (daoElements != null) {
// lookup in DAO
token = new StringTokenizer(daoElements);
while (token.hasMoreTokens()) if (token.nextElement().equals(lookupName)) {
try {
return new JNDIXMLContext(fullLookupName, dal.list_nodes(fullLookupName), dal.get_DAO(fullLookupName), logger);
} catch (CDBXMLErrorEx th) {
AcsJCDBXMLErrorEx jex = AcsJCDBXMLErrorEx.fromCDBXMLErrorEx(th);
NamingException ex2 = new NamingException(jex.getFilename() + ": " + jex.getErrorString());
ex2.setRootCause(jex);
throw ex2;
} catch (Throwable th) {
throw new NamingException("Failed to retrieve DAO: " + fullLookupName);
}
}
}
// not found
throw new NamingException("No name " + fullLookupName);
}
use of javax.naming.NamingException in project ACS by ACS-Community.
the class ManagerImpl method bind.
/**
* Bind object to remote directory.
*
* Use INS syntax specified in the INS specification.
* In short, the syntax is that components are left-to-right slash ('/') separated and case-sensitive.
* The id and kind of each component are separated by the period character ('.').
*
* @param remoteDirectory remote directory context to be used.
* @param name name of the object, code non-<code>null</code>
* @param object object to be binded
*/
private void bind(Context remoteDirectory, String name, String type, Object object) {
assert (name != null);
// do not bind interdomain names
if (name.startsWith(CURL_URI_SCHEMA))
return;
if (remoteDirectory != null) {
try {
// hierarchical name check
int pos = name.indexOf('/');
if (pos != -1) {
if (pos == 0 || pos == name.length())
throw new IllegalArgumentException("Invalid hierarchical name '" + name + "'.");
String parent = name.substring(0, pos);
String child = name.substring(pos + 1);
// lookup for subcontext, if not found create one
Context parentContext = null;
try {
parentContext = (Context) remoteDirectory.lookup(parent);
} catch (NameNotFoundException nnfe) {
// noop
}
if (parentContext == null) {
parentContext = remoteDirectory.createSubcontext(parent);
/// @todo temp. commented out
//generateHiearchyContexts(remoteDirectory, parent, parentContext);
}
// delegate
bind(parentContext, child, type, object);
return;
}
NameParser parser = remoteDirectory.getNameParser("");
Name n;
if (type != null)
n = parser.parse(name + "." + type);
else
n = parser.parse(name);
// special case
if (name.endsWith(".D")) {
remoteDirectory.rebind(n, object);
/// @todo temp. commented out
//generateHiearchyContexts(remoteDirectory, name, (Context)remoteDirectory.lookup(name));
} else
remoteDirectory.bind(n, object);
} catch (NameAlreadyBoundException nabe) {
rebind(remoteDirectory, name, type, object);
} catch (NamingException ne) {
CoreException ce = new CoreException("Failed to bind name '" + name + "' to the remote directory.", ne);
logger.log(Level.FINE, ce.getMessage(), ce);
}
}
}
use of javax.naming.NamingException in project ACS by ACS-Community.
the class ManagerImpl method lookup.
/**
* Lookups for an object in remote directory.
*
* Use INS syntax specified in the INS specification.
* In short, the syntax is that components are left-to-right slash ('/') separated and case-sensitive.
* The id and kind of each component are separated by the period character ('.').
*
* @param remoteDirectory remote directory context to be used.
* @param name name of the object, code non-<code>null</code>
* @param type type of the object
* @return object object found in the remote directory, <code>null<code> if nout found
*/
private Object lookup(Context remoteDirectory, String name, String type) {
assert (name != null);
// do not look for interdomain names
if (name.startsWith(CURL_URI_SCHEMA))
return null;
Object resolved = null;
if (remoteDirectory != null) {
try {
NameParser parser = remoteDirectory.getNameParser("");
Name n;
if (type != null)
n = parser.parse(name + "." + type);
else
n = parser.parse(name);
resolved = remoteDirectory.lookup(n);
} catch (NamingException ne) {
CoreException ce = new CoreException("Failed to lookup name '" + name + "' in the remote directory.", ne);
logger.log(Level.FINE, ce.getMessage(), ce);
}
}
return resolved;
}
Aggregations