@Override public void addListener(String jndiName, NamespaceChangeListener listener) { final InitialContext initialContext = buildInitialContext(); final Name name = parseName( jndiName, initialContext ); try { ( (EventContext) initialContext ).addNamingListener( name, EventContext.OBJECT_SCOPE, listener ); } catch (Exception e) { throw new JndiException( "Unable to bind listener to namespace [" + name + "]", e ); } finally { cleanUp( initialContext ); } }
public void addNamingListener(Name name, String filter, Object[] filterArgs, SearchControls searchControls, NamingListener namingListener) throws NamingException { checkName(name); if (namingListener == null) { return; } if (!(name instanceof LdapName)) { if (name instanceof CompositeName && name.size() == 1) { name = name.getPrefix(1); } else { // FIXME: read message from file throw new InvalidNameException( "Target cannot span multiple namespaces: " + name.toString()); } } if (namingListener instanceof UnsolicitedNotificationListener) { if (unls == null) { unls = new ArrayList<UnsolicitedNotificationListener>(); addUnsolicitedListener(); } unls.add((UnsolicitedNotificationListener) namingListener); if (!(namingListener instanceof NamespaceChangeListener) && !(namingListener instanceof ObjectChangeListener)) { return; } } if (searchControls == null) { searchControls = new SearchControls(); } Filter f = LdapUtils.parseFilter(filter, filterArgs); String targetDN = getTargetDN(name, contextDn); Name tempName = new LdapName(contextDn.toString()); tempName.addAll(name); String baseDN = tempName.toString(); int messageId = doPersistentSearch(targetDN, baseDN, f, searchControls, namingListener); if (listeners == null) { listeners = new HashMap<NamingListener, List<Integer>>(); } List<Integer> idList = listeners.get(namingListener); if (idList == null) { idList = new ArrayList<Integer>(); } idList.add(Integer.valueOf(messageId)); }
public void addNamingListener(Name name, int scope, NamingListener namingListener) throws NamingException { checkName(name); if (namingListener == null) { return; } // only ldap name is supportted if (!(name instanceof LdapName)) { if (name instanceof CompositeName && name.size() == 1) { name = name.getPrefix(0); } else { // ldap.32=Target cannot span multiple namespaces: {0} throw new InvalidNameException(Messages.getString("ldap.32", //$NON-NLS-1$ new Object[] { name.toString() })); } } if (namingListener instanceof UnsolicitedNotificationListener) { if (unls == null) { unls = new ArrayList<UnsolicitedNotificationListener>(); addUnsolicitedListener(); } unls.add((UnsolicitedNotificationListener) namingListener); if (!(namingListener instanceof NamespaceChangeListener) && !(namingListener instanceof ObjectChangeListener)) { return; } } // ri is silent in this case if (scope != EventContext.OBJECT_SCOPE && scope != EventContext.ONELEVEL_SCOPE && scope != EventContext.SUBTREE_SCOPE) { // ldap.33=Scope should be one of 'OBJECT_SCOPE', 'ONELEVEL_SCOPE' // or 'SUBTREE_SCOPE' throw new IllegalArgumentException(Messages.getString("ldap.33")); //$NON-NLS-1$ } String targetDN = getTargetDN(name, contextDn); Filter filter = new Filter(Filter.PRESENT_FILTER); filter.setValue("objectClass"); SearchControls controls = new SearchControls(); controls.setSearchScope(scope); Name tempName = new LdapName(contextDn.toString()); tempName.addAll(name); String baseDN = tempName.toString(); int messageId = doPersistentSearch(targetDN, baseDN, filter, controls, namingListener); if (listeners == null) { listeners = new HashMap<NamingListener, List<Integer>>(); } List<Integer> idList = listeners.get(namingListener); if (idList == null) { idList = new ArrayList<Integer>(); listeners.put(namingListener, idList); } idList.add(Integer.valueOf(messageId)); }
/** * Adds the specified listener to the given {@literal JNDI} namespace. * * @param jndiName The {@literal JNDI} namespace * @param listener The listener */ public void addListener(String jndiName, NamespaceChangeListener listener);