前文私はあなたが万が一、既に提供され、おそらくより適したセッションの実装を使用することができない場合は、セッション管理の実装最初のチェックなどにehcacheを使用するように滑走している
。あなたはWebコンテナまたは完全な果肉JEEサーバを使用している場合、あなたは本当にこの最初の
なぜ
オーケーを試してみてください。あなたはそれを正しい簡単なやり方ではないと確信しています。ここにいくつかのヒントがあります。なぜ、あなたはセッションのためにehCacheを使いたいのですか?
- あなたのサービスは、jeeサーバ/ Webコンテナの一部ではありません。
- サービスはステートレスですが、時には状態(フレームワークコード)が必要です。
- あなたと区別できるクライアントとの間のプロキシのためにコールを区別することはできません。たとえば、サービス/サービスのミドルウェアのようなもので、デフォルトでは区別可能なデータは提供されませんが、userIdやsessionId 。
- あなたはRTFMを実行しておらず、やりたいと思っています。
1については、桟橋のようなウェブコンテナがオプションであるかどうかを確認してください。あなたは確かに、あなたのためにポップアップしないセッション全体のWebアクセスを使用します。
2については、Apache Shiroがあなたの望むことをしないかどうかを確認してください。そうでなければ、ehCacheはあなたの友人かもしれません。
3人はクラブにようこそ。
4 ...あなたがマニュアルを読んでいないのであれば、これも読まないでしょう。あなたはEhcacheのを使用してセッション管理を実装する場合は、あなたのデータは直列化可能であることを確認してくださいどのように
。これにより、問題が軽減され、ehCacheの機密機能を使用できるようになります。ディスクへの永続性、ノードのキャッシング、これからの回復などが含まれます。
do はすべてのセッションでキャッシュを使用しますが、はすべてキャッシュです。 sessionId
がキャッシュのキーで、値はMap
になります。並行性を忘れないでください(ajax呼び出しを考えてください)。 java.util.concurrent
からConcurrentHashMap
を使用するのが最善の方法です。しかし、たぶんあなたはDr Heinz M. Kabutzであり、もっとクールな方法でそれを見つけることができます。
私は、ストレージに保管するための要素の量よりもむしろサイズを使用することが非常に有用であることを発見しました。あなたは、後でどのデータ/オブジェクトが格納されるかわからないかもしれません。永続化戦略を設定することを忘れないでください。ここで一時フォルダへの格納を使用しました。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<cache name="vocCache"
eternal="false"
maxElementsInMemory="100MB"
maxElementsOnDisk="1GB"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LRU"
diskExpiryThreadIntervalSeconds="60">
<persistence strategy="localTempSwap" />
</cache>
我々はセッションマネージャを実装したいので、私たちはおよそtimeToLiveSeconds
を気にしないでください。一定のアイドル時間が経過すると、セッションがタイムアウトします。したがって、要素を最大のttlに制限するのではなく、要素をタイムアウトさせるためにtimeToIdleSeconds
を使用します。 timeToIdleSeconds
とtimeToLiveSeconds
は、後で追加する要素に特定の値を設定できるので気にしないでください。有効期限の
立ち退き
つのノート。構成された時間のために、メモリ内の要素は絶対に追い出されません。定義されたメモリ制約がヒットするまで、メモリは構築されます。したがって、100要素を定義すると、101要素が追加された場合、memoryStoreEvictionPolicy
がトリガーになり、1要素がこの構成でディスクにフラッシュされます(ehCache 2.2)。ディスクストレージの場合、有効期限(diskExpiryThreadIntervalSeconds
)のスレッドがチェックされます。 documentationを参照してください。 したがって、有効期限が切れていないことを確認するために、取り出された要素をisExpired()
を使用してキャッシュからチェックする必要があります。
は私もしようとしています
Cache cache = CacheManager.getInstance().getCache(CACHE_NAME);
Element elem = cache.get(identifier);
if (elem == null)
{
throw new SessionNotFoundException(identifier);
}
if (elem.isExpired())
{
throw new SessionExpiredException(identifier);
}
return elem.getObjectValue();
PUT
Cache cache = CacheManager.getInstance().getCache(CACHE_NAME);
// We use ttl = 0 and tti=<ttlInMinutes>, because session timeout is based on session idle timout.
element = new Element(identifier, new SessionElement(), Boolean.FALSE, (int) (timeToLive/VALUE_MS), 0);
cache.put(element);
こんにちはランキをGET:
だから、最後に、あなたはこのようなものになってしまいますehcacheを実装するための良い指針がありますかまたはそれのためのチュートリアルもしそうなら、私にそれのリンクを提供してください。 –
あなたはどのアプリケーションサーバーを使用していますか? –