Interstage Application Server ディレクトリサービス運用ガイド |
目次
索引
![]() ![]() |
第8章 アプリケーションの作成(JNDI) | > 8.2 ソースプログラムの作成 | > 8.2.4 エントリの検索 |
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[]で受け取ります。また、デフォルトでは、以下の属性がバイナリ値として返されます。
- audio
- jpegPhoto
- javaSerializedData
- userPassword
- userCertificate
- cACertificate
- authorityRevocationList
- certificateRevocationList
- crossCertificatePair
バイナリ属性値を表示する例です。
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が送出されるようにしてください。
DirContext ctx = new InitialDirContext(env); NamingEnumeration results = ctx.search("dc=com", "cn=User001", constraints); while (results != null && results.hasMore()){ SearchResult sr = (SearchResult)results.next(); } |
|
目次
索引
![]() ![]() |