首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

SpringLDAP-Reference(汉语言文档)(四)

2012-10-18 
SpringLDAP-Reference(中文文档)(四)第四章 添加missing API方法重载?4.1自定义查询方法尽管在LdapTemplat

SpringLDAP-Reference(中文文档)(四)

第四章 添加missing API方法重载

?

4.1自定义查询方法

尽管在LdapTemplate中有很多的DirContext重载方法,但它不可能对每个方法都这样做,因为方法太多了,但是我们提供一种方法使用LdapTemplate来得到你想要的conetxt

比如说你要调用如下的context方法

?NamingEnumerationsearch(Namename,StringfilterExpr,Object[]filterArgs,SearchControlsctls)

在LdapTemplate中没有合适的重载方法,我们可以用自定义的SearchExecutor实现

?publicinterfaceSearchExecutor{
??publicNamingEnumerationexecuteSearch(DirContextctx)throwsNamingException;
?}
?
?在你自己定义的执行程序(executor)中,你可以连接DirContext,调用你想要的方法,然后你需要提供一个处理程序来处理返回结果。你可以使用现有的
?CollectingNameClassPairCallbackHandler,收集到一个内部集合中,为了执行搜索,在LdapTemplate中需要一个执行程序和处理程序(an executor and a handler)
?最后,返回你想要的结果集合
?
?例4.1 使用SearchExecutor和AttributesMapper执行自定义查询
?
??packagecom.example.dao;
??publicclassPersonDaoImplimplementsPersonDao{
??...
??publicListsearch(finalNamebase,finalStringfilter,finalString[]params,
??finalSearchControlsctls){
??SearchExecutorexecutor=newSearchExecutor(){
??publicNamingEnumerationexecuteSearch(DirContextctx){
??returnctx.search(base,filter,params,ctls);
??}
??};
??CollectingNameClassPairCallbackHandlerhandler=
??newAttributesMapperCallbackHandler(newPersonAttributesMapper());
??ldapTemplate.search(executor,handler);
??returnhandler.getList();
??}
??}
??
??如果你更喜欢用ContextMapper生成AttributesMapper,可以这样
??
??例4.2 使用 SearchExecutor and ContextMapper的查询方法
??packagecom.example.dao;
??publicclassPersonDaoImplimplementsPersonDao{
??...
??publicListsearch(finalNamebase,finalStringfilter,finalString[]params,
??finalSearchControlsctls){
??SearchExecutorexecutor=newSearchExecutor(){
??publicNamingEnumerationexecuteSearch(DirContextctx){
??returnctx.search(base,filter,params,ctls);
??}
??};
??CollectingNameClassPairCallbackHandlerhandler=
??newContextMapperCallbackHandler(newPersonContextMapper());
??ldapTemplate.search(executor,handler);
??returnhandler.getList();
??}
??}
??
??注意
??
??当我们使用ContextMapperCallbackHandler时,必须在SearchControls中setReturningObjFlag(true)
??
??4.2 实现其它自定义的Context Methods
??
??同自定义查询方法一样,你可以在Dircontext中使用ContextExecutor
??
???publicinterfaceContextExecutor{
???publicObjectexecuteWithContext(DirContextctx)throwsNamingException;
???}
???

???当实现一个自定义的ContextExecutor时,??executeReadOnly() 或者executeReadWrite(),比如我们要调用此方法
???
???Object lookupLink(Namename)
???
???在现有DirContext中,没有相对应的LdapTemplate方法,它是个查询方法,所以是只读的,我们可以这样实现它:
???
???例4.3 使用ContextExecutor的自定义DirContext
???
???packagecom.example.dao;
???publicclassPersonDaoImplimplementsPersonDao{
???...
???publicObjectlookupLink(finalNamename){
???ContextExecutorexecutor=newContextExecutor(){
???publicObjectexecuteWithContext(DirContextctx){
???returnctx.lookupLink(name);
???}
???};
???returnldapTemplate.executeReadOnly(executor);
???}
???}
???
???同样的操作你可以使用 executeReadWrite() 来执行

热点排行