WEB开发网
开发学院软件开发Java 在 Apache 目录服务器中存储 Java 对象,第 2 部分... 阅读

在 Apache 目录服务器中存储 Java 对象,第 2 部分:在 ApacheDS 中存储、搜索和检索 Java 对象(下)

 2010-04-19 00:00:00 来源:WEB开发网   
核心提示: 这个 filter 字符串充当搜索结果的过滤器,这意味着搜索操作之后返回的搜索结果将只包含符合搜索过滤器指定标准的结果,在 Apache 目录服务器中存储 Java 对象,第 2 部分:在 ApacheDS 中存储、搜索和检索 Java 对象(下)(7), 在寻找大量属性值时要使用这类搜索过滤器

这个 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(); 
  } 
 } 

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Apache 目录 服务器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接