0

アプリケーションで Unboundid In-Memory Directory Server を使用していますが、これまでのところうまく機能しています (Apache DS よりもはるかに優れています)。しかし、アプリケーションが完了し、サーバーをシャットダウンしたい場合、「ハング」したように見えます。つまり、shutDown() コマンドが実行されますが、スレッドは停止しません。

InMemoryDirectoryServerConfig configuration = new InMemoryDirectoryServerConfig(baseDNs);
configuration.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", port));
configuration.setSchema(null);
server = new InMemoryDirectoryServer(configuration);
server.startListening();

LDAPConnection ldapConnection = new LDAPConnection("localhost", PORT);

// lots of processing the LDAP data

ldapConnection.close();
server.shutDown("default", true);

例外などをスローせずに実行されますが、それでもシャットダウンしません。

面白いことに、上記のコードを処理なしで実行すると、動作します。

編集

処理コーディングでは、基本的にldapConnection.search()and をldapConnection.getEntry()数回呼び出して、ユーザーとグループの情報を取得します。次に、この情報を使用してオブジェクトを作成し、DB に挿入します。

編集2

shutDown("default",true)orshutDown(true)が呼び出されても違いはありません。あとで教えていただいた他のものも試してみます。

4

1 に答える 1

1

インメモリディレクトリサーバーがシャットダウンしないという問題を他の誰かが報告したのを聞いたことがありません。シャットダウンしないとはどういう意味ですか? まだ実行中のスレッドが 1 つ以上あるということですか? まだ LDAP クライアントからの接続を受け入れていますか? 既存の接続はまだ確立されていますか? 問題は一貫して発生しますか、それとも散発的に発生しますか? shutDown("default",true) を呼び出してすべてのリスナーをシャットダウンするのではなく、shutDown("default",true) を呼び出して "default" リスナーだけをシャットダウンしようとすると、動作に違いが見られますか?

1 つ以上のスレッドがまだ実行されているように見える場合は、すべてのアクティブなスレッドのスタック トレースを提供していただけますか? jstack コマンドを使用するか、「kill -3」を JVM プロセスに送信することで取得できるはずです。また、JVM の起動時に com.unboundid.ldap.sdk.debug.enabled プロパティを true に設定するか、「com.unboundid.util.Debug.setEnabled(true)」を呼び出して、LDAP SDK のデバッグを有効にできると便利です。 "。シャットダウンの実行中に何らかの例外がキャッチされた場合、デバッグを有効にすると、何が起こっているのかをよりよく理解できるようになります。

ニール

于 2011-11-10T16:59:27.503 に答える