Interstage Application Server ディレクトリサービス運用ガイド
目次 索引 前ページ次ページ

第8章 アプリケーションの作成(JNDI)> 8.2 ソースプログラムの作成> 8.2.4 エントリの検索

8.2.4.2 検索結果の取得

 javax.naming.DirContext.search()メソッドの復帰値は、NamingEnumerationで、SearchResultの列挙です。検索結果を表示するには、たとえば以下のようにします。


NamingEnumeration results = ctx.search("ou=User,ou=interstage,o=fujitsu,dc=com", filter, constraints); while (results != null && results.hasMore()) { SearchResult si = (SearchResult)results.next(); System.out.println("name: " + si.getName()); Attributes attrs = si.getAttributes(); if (attrs == null) { System.out.println("No attributes"); } else { /* print each attribute */ for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { Attribute attr = (Attribute)ae.next(); String id = attr.getID(); /* print each value */ for (Enumeration vals = attr.getAll(); vals.hasMoreElements(); System.out.println(id + ": " + vals.nextElement())); } } }
 
バイナリ属性値の取得
 バイナリ属性値は、byte[]で受け取ります。また、デフォルトでは、以下の属性がバイナリ値として返されます。
 バイナリ属性値を表示する例です。

NamingEnumeration results = ctx.search("ou=User,ou=interstage,o=fujitsu,dc=com", filter, constraints); while (results != null && results.hasMore()) { SearchResult si = (SearchResult)results.next(); Attributes attrs = si.getAttributes(); if (attrs == null) { System.out.println("No attributes"); } else { /* print each attribute */ for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { Attribute attr = (Attribute)ae.next(); String id = attr.getID(); /* print each value */ for (Enumeration vals = attr.getAll(); vals.hasMoreElements(); ) { System.out.print( id + ": " ); Object val = vals.nextElement();
                  if (val instanceof String) {
                      System.out.println( val );
                  } else {
                      byte[] buf = (byte[])val;
                      for (int i = 0; i < buf.length; i++) {
                          System.out.print(Integer.toHexString(buf[i]) + " ");
                      }
                  }
                  System.out.println();
              }
          }
      }
  }
 
 スキーマ拡張をして、文字列ではない属性構文を定義したときは、環境プロパティ「java.naming.ldap.attributes.binary」を使って、バイナリ値として返されるように指定します。例を示します。

env.put("java.naming.ldap.attributes.binary","mpegVideo myspecialkey");

検索結果の取得とコネクションの累積

 検索結果をすべて取り出していない場合、または検索結果を破棄していない場合には、セションをクローズしても、すぐにはUNBINDが送出されません。以下のタイミングでコネクションが破棄されるまで、クライアントおよびサーバ間でコネクションが累積されます。

 コネクションが累積されると、サーブレットでJNDIを動作させる場合や、コネクションの生成、破棄を繰り返すプログラムでは、Interstage ディレクトリサービスにつながらないといった問題を引き起こす可能性があります。
 コネクションが累積されないようにするためには、以下のどちらかの方法で検索結果をクリアし、確実にUNBINDが送出されるようにしてください。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED