LDAPコンテキストのディレクトリ配下全削除用コード

2005年12月7日 at 12:59 午前


JNDI/LDAPによるエントリの削除は、ディレクトリを構成する

ノードの葉(一番最下層)から順に削除しなければなりません。

つまり、子ノードを持つエントリは直接削除することができないのです。

そこで、ノードの葉から順に再起的に削除する必要があるのですが、

下記は、指定したDN配下全てのエントリを再起的に削除するための

サンプルコードになります。。

赤線で示したコードが実際にLDAPサーバから削除するコードになります。


/**
* 指定したDN以下のノードを再起的に削除する。
*
* @param ctx ディレクトリコンテキスト
* @param dn 削除対象のルートノードのDN
*/
private void deleteAll (Context ctx,String dn) {
try {
NamingEnumeration list = ctx.listBindings(dn);
//現在のDNの配下にサブコンテキストが存在するか
while (list.hasMore()) {
Binding item = (Binding)list.next();
String className = item.getClassName();
String name = item.getName();
String subdn = name + “,” + dn;
Object o = item.getObject();
if (o instanceof javax.naming.Context){
Context subctx = (Context)o;
//さらにその下にサブコンテキストが存在するか
NamingEnumeration sublist = ctx.listBindings(subdn);
if(sublist.hasMore()){
//存在する場合、再起的呼び出し
deleteAll (ctx, subdn);
}else{
//存在しない場合、コンテキストを削除
ctx.destroySubcontext(subdn);
logger.info(“DN: ” + subdn + “is deleted from LDAP”);
}
}
}
ctx.destroySubcontext(dn);
logger.info(“DN: ” + dn + “is deleted from LDAP”);
}catch (NamingException ex) {
logger.error(“Failed to delete entry on LDAP”,ex);
}
}

Entry filed under: Java.

LDAP接続用コード Apache Derby DatabaseをJava Enterprise Systemへ


Java Champion & Evangelist

Translate

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2005年12月
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

clustermap

ブログ統計情報

  • 1,267,316 hits

RSSフィード

アーカイブ


%d人のブロガーが「いいね」をつけました。