2011-10-19 3 views
1

新しいdroolsを作成するときにStatefulKnowledgeSessionインスタンスがCPUを大量に消費するという問題があります。それについて話す古いナブルのリンクがありますhere。私はそれを回避する方法がわからないので、私はそれらのプールを作成すると思った。これまでのところ、私は再利用可能かどうかを完全に知ることはできません。私は、2つのスレッドが同時にルールを実行するという意味で、マルチスレッドの安全ではないことを知っていますが、最後の使用がdispose()を呼び出した後、新しいスレッドでセッションを再利用できますか?DroolsはStatefulKnowledgeSessionを再利用しますか?

答えて

3

1つのKnowledgeSessionConfigurationを作成し、KnowledgeSessionを作成するたびに再利用しました。何らかの理由で(明らかに大きなクラスパス)、構成を作成することは、私がリンクした記事のように、私にとっては非常に高価でした。 KnowledgeSessionConfigurationを一度作成して再利用することで、何が失われるのか分かりません。すべて正常に動作しているようです。

1

別のコンテキストでナレッジベースを作成する場合、statefulKnowledgeSessionsの作成は高価ではありません。セッションが必要になるたびにルールをコンパイルしないでください(builder.add())。リクエストごとに新しいセッションを作成し、メモリリークを避けるためにそれを処分することができます。セッションを再利用するのではなく、細かいセッションを作成することになります。 乾杯