2011-07-18 17 views
0

私はインターセプタとAOPについて、あなたのコードを解き放つことができ、クロスカッティングの問題を側面に対処する方法を読んでいました。私は即座にCDIとデータベースにアクセスしようとするたびにカスタム・インターセプタを使用してキャッシュにアクセスすることを考えました。 これを既に実装しているmemcacheをサポートするライブラリはありますか?私はentitymanagerへの呼び出しは傍受されるべきだと思います。CDIインターセプタとmemcache

+0

[はんだ](http://seamframework.org/Seam3/Solder) – Shahzeb

答えて

3

IMHO、もしあなたがそのようにしたいのであれば、Hibernate Cache/JBoss Cache(あなたのテクノロジースタックについて推測するだけですが、ほぼすべてのスタックのための製品/ソリューションがあります)あなたのニーズに合った?

あなたは自分のクエリやオブジェクトキャッシュを開発するという点で、ホイールを再開発したくはありませんか?

+0

1月、あなたの答えに感謝します。私は確かにホイールを再発明したくないし、それをHibernateのキャッシュに多く見ていない、私はmemcache thoに精通していた。私はそれを見て、それが私のニーズに合っているかどうかを見ます。 – arg20

+1

hibernateはキャッシュとしてmemcachedを使用できます.btw – Dustin

1

一般に、memcachedを使用して直接DB要求を回避することは、適切かつ効率的ではありません。あなたは本当にDAO - > DTO境界のような高レベルの概念をキャッシュしたいと思っています。

私はAOPを使用して、キャッシュ無効化とオブザーバ管理コードをJavaプログラムに挿入するのに成功しました。 AOPを使用すると、コードのさまざまな部分の異なる再利用可能性を考えることができます。それは私がこれらの側面を設計する必要はないという意味ではありませんが、それは私の制限を解放し、切断や貼り付けから私を防ぐ...

私はこのアクセスパターンを設計することですこれらの境界のそれぞれで作業をしなければならず、コンパイル時にその作業を挿入するクロスカットを設計する必要があります。

+0

ダスティン、私はあなたの提案を理解するのに少し苦労しています。私の最初のアイデアは、entitymanagerへの呼び出しを傍受することでした。このインターセプタは、要求されたオブジェクトがすでにキャッシュに入っているかどうかをチェックし、データベースにクエリを実行しない場合はオブジェクトをキャッシュから取得し、memcache 、これは良い考えではないですか? – arg20

+0

また、インターセプタを使用する価値はありますか?キャッシュを使用するポイントはデータベースを照会するのを避けることです。これによりパフォーマンスを向上させることができますが、デコレータ/インターセプタが顕著なオーバーヘッドを追加すると、この利得は無駄になります。 – arg20

+1

キャッシュのポイントは、データベースのクエリを避けるものではありません。キャッシュのポイントは、高価な作業をメモすることです。これはしばしばデータベースに関係しますが、通常はデータベースクエリの結果とは直接関係しません。 - あなたの方法論が健全なものであれば、それは間違いなく有効ですが、無効化はより困難になります。 jan grothの応答を参照してください。 :) – Dustin