アフィリエイト広告を利用しています

広告

posted by fanblog

2015年05月29日

LDAP 検索の分割アクセス

登録済みユーザの一覧を作成するなどの場合、いっぺんにアクセスしてしまうと、メモリの問題を引き起こしたりする可能性があるので、件数を区切って分割アクセスしたい場合がある

javax.naming.ldap.PagedResultsControl をLDAPコンテキスト (javax.naming.ldap.LdapContext) に対して追加してやればできるようになる
しかも Java ドキュメント にサンプルコードも掲載されており、非常に助かる

ポイントは、初回は null である byte[] javax.naming.ldap.PagedResultsResponseControl#getCookie() の値が null になるまで繰り返すということだ
こうしないと無限ループになったり、初回ページしかアクセスできなかったりということになる

おおざっぱな構造を示すと以下のようになる

// LDAP コンテキストを生成
LdapContext context = new InitialLdapContext();
// 初回クッキーは null
byte[] cookie = null;
// ページサイズ
int pageSize = 100;
// ページ制御をコンテキストに追加
context.setRequestControls(new Control[]{new PagedResultControl(pageSize, Control.CRITICAL);
do {
NamingEnumeration en = context.search(検索オプション);
// 検索結果の処理(pageSize 分だけループすることになるだろう)
...
// セットしたはずの PagesResultResponseControl を探し出してクッキー値を取得する
// 具体的なコードはマニュアルページに書いてあるが、Control 配列から見つけ出すという手法
PagedResultControl ctl = findPagedResultControl(context);
cookie = ctl.getCookie();
// 次回アクセスのために再度 PagedResultControl をセットする
context.setRequestControls(new Control[]{new PagedResultControl(pageSize, cookie, Control.CRITICAL);
} while (null != cookie);


これでめでたくページアクセスできるようになった
最初から件数がわかっているようなものであれば、こうしなくても大丈夫であろうが、検索結果が想定以上(導入当初は1000件程度だったものが、運用後1億件程度に膨れたなど)になった場合でも耐えうるコードが書けるだろう

★☆★☆★☆ ナウでヤングなレンタルサーバー!ロリポップ! ☆★☆★☆★

月額100円(税抜)〜容量最大400GB!大人気のWordpressも簡単インストール★


posted by いしちゃん at 00:09| Comment(0) | TrackBack(0) | java
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/3723384
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
ファン
検索
<< 2016年05月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最新記事
最新コメント
タグクラウド
カテゴリアーカイブ
プロフィール
いしちゃんさんの画像
いしちゃん
ブログ
プロフィール
日別アーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。