在 Apache 目录服务器中存储 Java 对象,第 2 部分:在 ApacheDS 中存储、搜索和检索 Java 对象(下)
2010-04-19 00:00:00 来源:WEB开发网这个 filter 字符串充当搜索结果的过滤器。这意味着搜索操作之后返回的搜索结果将只包含符合搜索过滤器指定标准的结果。
在寻找大量属性值时要使用这类搜索过滤器。
提取和处理搜索结果
在 清单 8 的步骤 12 中,您可以调用 search() 方法,并随该方法调用一起传递搜索上下文、搜索过滤器和搜索控件。
请注意 清单 6 的步骤 5 和 清单 8 中使用的搜索方法调用之间的区别:在清单 6 中,使用的是带两个参数的 search() 方法,而在 清单 8 中,使用的是该方法的带三个参数的形式。
清单 8 中的步骤 13 和 14 分别与 清单 7 中的步骤 6 和 7 相同。在这些步骤中,处理 NamingEnumeration 对象,并以 SearchResult 对象的形式提取单个的搜索结果。
最后,在步骤 15,调用 SearchResult 对象的 getObject() 方法。getObject() 方法返回一个 Java 对象。
对于 getObject() 方法返回的实例属于哪个类,没法确定,因为在搜索请求中指定了两个类(MessagingPreferences 或 ShippingPreferences)。返回的结果可能是其中一个类的实例。所以,首先必须检查对象属于哪个实例,并进行相应的类型转换。检查并转换之后,Java 对象就处于控制之下,然后就可以调用它的方法了。
应用程序 7. 将 Java 对象解编
在前面的应用程序中,学习了如何反序列化已经序列化的 Java 对象。接下来,将通过应用程序 FetchAliceMarshalledPreferences 学习如何解编一个已编组的 Java 对象。
清单 9. FetchAliceMarshalledPreferences
public class FetchAliceMarshalledPreferences {
public FetchAliceMarshalledPreferences() {
try
{
//------------------------------------------
//Step1: Setting up JNDI properties for ApacheDS
//------------------------------------------
InputStream inputStream = new FileInputStream( "ApacheDS.properties");
Properties properties = new Properties();
properties.load(inputStream);
properties.setProperty("java.naming.security.credentials", "secret");
//------------------------------------------
// Step2: Fetching a DirContext object
//------------------------------------------
DirContext ctx = new InitialDirContext(properties);
//---------------------------------------------
//Step3: Setting search context
//---------------------------------------------
String searchContext = "ou=users";
//--------------------------------------------
//Step4: Creating search attributes for Alice
//--------------------------------------------
Attribute cn = new BasicAttribute("cn");
Attribute objclass = new BasicAttribute("objectClass");
//putting attribute values
cn.add("Alice");
objclass.add("person");
//Instantiate an Attributes object and put search attributes in it
Attributes attrs = new BasicAttributes(true);
attrs.put(cn);
attrs.put(objclass);
//------------------------------------------
//Step5: Executing search
//------------------------------------------
NamingEnumeration ne = ctx.search(searchContext, attrs);
if (ne != null)
{
//Step 6: Iterating through SearchResults
while (ne.hasMore()) {
//Step 7: Getting individual SearchResult object
SearchResult sr = (SearchResult) ne.next();
//Step 8:
String entryRDN = sr.getName();
System.out.println("RDN of the Searched entry: "+entryRDN);
//---------------------------------------------
//Step9: Setting a new search context
//---------------------------------------------
searchContext = entryRDN + "," + searchContext;
System.out.println("new SearchContext: "+searchContext);
//---------------------------------------------
//Step10: Creating search controls
//---------------------------------------------
SearchControls ctls = new SearchControls();
ctls.setReturningObjFlag(true);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//---------------------------------------------
//Step11: Creating filter
//---------------------------------------------
String filter = "(javaClassName=java.rmi.MarshalledObject)";
//------------------------------------------
//Step12: Executing searchl
//------------------------------------------
NamingEnumeration ne1 = ctx.search(searchContext, filter, ctls);
if (ne != null)
{
//Step13: Iterating through SearchResults
while (ne1.hasMore()) {
//Step14: Getting individual SearchResult object
SearchResult sr1 = (SearchResult) ne1.next();
//Step15: Getting preferences object
Object obj = sr1.getObject();
if (obj instanceof MarshalledObject) {
MarshalledObject mObj= (MarshalledObject) obj;
Object obj1 = mObj.get();
if (obj1 instanceof MarshalledObject) {
MessagingPreferences pref =
(MessagingPreferences) obj;
}
else if (obj1 instanceof ShippingPreferences) {
ShippingPreferences pref =
(ShippingPreferences) obj;
}
}//if(obj)
}//while
}//if
}//while
}//if (ne != null)
} catch (Exception e) {
System.out.println("Operation failed: " + e);
}
}
public static void main(String[] args) {
FetchAliceMarshalledPreferences fetchAlicePref =
new FetchAliceMarshalledPreferences();
}
}
- ››apache设置域名绑定 以及绑定不起作用的排查
- ››apache rewrite将指定URL转向指定的几个服务器
- ››apache配置文件httpd.comf部分参数说明
- ››Apache+Mysql+PHP+phpMyAdmin+Mac OS X 10.7 Lion...
- ››apache+tomcat负载均衡_项目实例
- ››apache mysql php 源码编译使用
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
- ››Apache2.2与Tomcat6整合及虚拟主机配置
- ››Apache+php+mysql在windows下的安装与配置图解
- ››服务器群集:Windows 2000 和 Windows Server 200...
- ››服务器维护经验谈 图解DHCP故障排除
更多精彩
赞助商链接