问题描述
我想知道是否有一种方法可以通过apache 2.0.1 java ldap api连接到ldap(389服务器),然后连续侦听一组条目上特定属性的更改(在这种情况下,具有特定属性的人资格)?
理想情况下,我想在ou = people,dc = test,dc = local上运行查询 最初可能会返回 dn:uid = tester1,ou = people,dc = test,dc = local namedname:tester1
dn:uid = tester2,ou = people,dc = test,dc = local namedname:tester2
dn:uid = tester3,ou = people,dc = test,dc = local namedname:tester3
如果然后我在后台将tester3的namedname更改为userTester3,我希望有一个侦听器,该侦听器将返回一些userModified事件,告诉我tester3已被修改。
作为我想发生的事情的一个示例(伪代码/无效代码),我想按照以下方式进行操作:
{
PersistentSearch ps = new PersistentSearch();
ps.setChangeType(ChangeType.MODIFY);
SearchRequest sr = ldaputility.createPersistentSearch(qualifiers,attributes,etc,ps);
PersistentSearchListener psl = new PersistentSearchListener(sr){
@Override
public void entryChanged(Entry e){
Log.info("The entry just changed");
}
}
}
但是,根据我在apache 2.0.1 api中的说法,不是任何持久性搜索侦听器,也不是针对搜索请求的任何类型的侦听器,并且搜索请求会获得结果,然后完成。我知道在netscape api中有一个搜索侦听器,在apache目录服务器api中有一个持久的搜索侦听器。因此,我要问的是,有没有人知道 apache 2.0.1 ldap api 是否支持您进行初始查询的行为,并且只要查询结果发生变化,您就可以拥有一个被通知的侦听器新变化?
不幸的是,我什至没有调试代码/输出,因为我什至不确定现在要尝试什么代码。
解决方法
通过向搜索请求添加PersistentSearch控件(更改仅设置为true,更改类型设置为修改),ldap服务器将永远不会在搜索请求上将isDone设置为true,因此搜索请求将继续返回可用的更新。