2

Tomcat で Apache Shiro を使用しており、EhCache による承認のキャッシュを有効にしたいと考えています。

私が行ったことは、shiro.ini に次の 2 行を追加することです。

cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager

ehcache-core-2.5.1.jar を WEB-INF/lib ディレクトリにコピーしました。承認のために、MySQL データベースからパーミッションを読み取るカスタム Realm を実装しました。そのため、データベースへのクエリを可能な限り削減するためにキャッシュを有効にしたいと考えています。

Shiro のドキュメントを正しく理解していれば、上記でキャッシュを有効にするのに十分ですが、私はそれを見ていません:(

Tomcat は例外なく起動し、テスト JSP では認証を使用していますが、最初は問題なく動作します。データベースのパーミッションを変更すると、テスト JSP が変更をすぐに認識することがわかります。テスト JSP がキャッシュから値を返すことを期待していました...何が問題なのか教えていただけますか? また、EhCache が実際に呼び出されているかどうか、およびその動作を確認する方法はありますか (ログを有効にする必要がある場合は、詳しくないので詳細な情報を教えていただければ幸いです)。

更新:行を追加したことにも言及する必要があります

System.out.println("キャッシュは有効です" + isCachingEnabled() );

私のカスタムレルムの初期化で、私は真実になります!

ティア、

セラフェイム

4

3 に答える 3

1

個人的には、Shiro はよく知らないし、Tomcat もよくわかりませんが、EHCache についてはかなり理解しています。API がキャッシュの更新をサポートしていることは知っています。Shiro が EHCache を使用する方法によっては、キャッシュされた情報が変更されるたびに更新される場合があります。更新されたことを示す JSP は、キャッシュが機能しているかどうかを証明しません。

プログラミングでは、EHCache の統計を取得するコードを挿入するのはかなり簡単ですが、この方法で統合されたときにどのようになるかはわかりません。EHCache には、囲んでいるアプリケーションが高いログ レベルに設定されている場合のログが組み込まれていますが、2.5.1 で機能させるのに苦労しました。EHCache のロギング設定は http://ehcache.org/documentation/operations/loggingで説明されていますが、メッセージを出力するように Shiro を設定する方法がわかりません。

それが役立つことを願っています。

于 2012-04-25T02:31:03.747 に答える
1

jconsole を使用して、EHCache の JMX 統計を監視します。

  1. jconsole を起動
  2. MBean タブを開く
  3. 左側で、「net.sf.ehcache」ツリーを開きます。
  4. net.sf.ehcache/CacheStatistics/[キャッシュ名、デフォルトは net.sf.ehcache.CacheManager@some_id] に移動します。
  5. 名前でキャッシュを見つけ、ツリーを開き、「属性」を選択します

これで、キャッシュの属性を確認できます。アプリを操作して、「CacheHits」変数と「ObjectCount」変数が適切に変化するかどうかを確認します。ObjectCount は、任意の時点で ehcache がキャッシュしたすべての項目です。CacheHits は、それらのアイテムが実際に使用されているかどうかを示します。

これはリモートで行うこともできますが、少し面倒です。JConsole を SOCKS プロキシ経由でトンネリングする必要があります。この記事では、その手順について詳しく説明しています: http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html

于 2012-10-26T08:15:51.357 に答える