hibernate

Spring+HibernateEntityManager(archetype編)

前回のおさらい 前回は、component-scan を用いつつ、ドメインモデル実装中の SpringFramework に依存したアノテーションを排除しました。 今回のテーマ 今回は、Spring+HibernateEntityManager 環境のサンプルプロジェクトの生成を、maven の maven-archet…

Hibernate Core 3.3.0 goes GA

Hibernate3.3 出ましたね。 Hibernate Core 3.3.0 goes GAartifact が central には上がらなくなってしまったようですね。jboss のリポジトリにおいてあるようです。 http://repository.jboss.org/maven2/org/hibernate/ キャッシュの設計が大幅に変更され,…

Hibernateのキャッシュについて考えてみる(その6)

前回は ReadOnlyCache について掘り下げてみました。今回は ReadWriteCache について掘り下げてみたいと思います。 マニュアル曰く If the application needs to update data, a read-write cache might be appropriate. This cache strategy should never b…

Hibernateのキャッシュについて考えてみる(その5)

前回は Cache Concurrency Strategy を全体的に扱いました。今回からは各 Cache Concurrency Strategy のそれぞれを個別にフォーカスしていこう思います。今回は、ReadOnlyCache について掘り下げてみようと思います。 マニュアル曰く If your application n…

Hibernateのキャッシュについて考えてみる(その4)

前回はキャッシュ並列性戦略の概要を確認してみました。今回は CacheConcurrencyStrategy インタフェースにフォーカスしてみようと思います。 インタフェース説明 Implementors manage transactional access to cached data. Transactions pass in a timesta…

Hibernateのキャッシュについて考えてみる(その3)

前回は、キャッシュ関連の分類と、キャッシュプロバイダ実装側の対応について考えてみました。分類にもいろいろあり、実装にもいろいろあって、一気にすべて理解するのは難しそうです。ということで、今回は Cache Concurrency Strategy の概要を確認してみ…

Hibernateのキャッシュについて考えてみる(その2)

前回は、Hiberanteの2次キャッシュを、単純に技術的に適用して動かすだけなら簡単だけど、適切に設計して実案件に取り込むのはハードルが高そうだねぇという話でした。今回は、キャッシュ関連の分類と、キャッシュプロバイダ実装側の対応について考えてみよ…

Hibernateのキャッシュについて考えてみる

Hibernate では2次キャッシュ(query cache と collection cache 含む)を提供していますが、キャッシュプロバイダ実装の選定とか、実案件への適用ポリシー等についてはユーザーにお任せですよね。自由度が高いというメリットはあるけど、自由を持て余してしま…

Spring+HibernateEntityManager(コンポーネント自動検出 without アノテーション編)

前回のおさらい 前回は、@Component アノテーション、@Scope アノテーション、context:component-scan 要素を用いて、Entity のパッケージ以下の各クラスを bean として自動登録しました。その実際の記述は以下のようになります。 @Component("user") @Scope…

Spring+HibernateEntityManager(コンポーネント自動検出 with アノテーション編)

SpringFramework2.5から、クラスパスを走査し、アノテーションの付加されたコンポーネントを自動検出する機能がサポートされています。典型的には、@Component, @Repository, @Service, @Controller 等のステレオタイプでアノテートされたコンポーネントクラ…

Spring+HibernateEntityManager(@Resource編)

今回は、前回の続きです。 @Resource アノテーションとは? @Resource アノテーションは、クラス、メソッド、フィールドに対して指定可能なアノテーションで、リソースへの参照を宣言するためのものです。JSR 250: Common Annotations for the JavaTM Platfo…

Spring+HibernateEntityManager(DBCPのvalidationQuery編)

今回は、Spring+HibernateEntityManager(AspectJ AOP with Load-Time-Weaver編)の続きです。 コネクションタイムアウトのハンドリング忘れてた(^^; 以前、beans.xml に DBCP の設定は行いましたが、コネクションタイムアウト対策を忘れていました。おいら…

Spring+HibernateEntityManager(AspectJ AOP with Load-Time-Weaver編)

今回は、Spring+HibernateEntityManager(@Required編)の続きです。 トランザクションがかからない!? 現在は、ServiceImpl#registerUser(User) メソッドに、@Transactional アノテーションを用いてトランザクションをかけています。 @Transactional publ…

Spring+HibernateEntityManager(XMLからの外部リソース参照編)

SpringFramework や Hibernate の定義ファイルには、スキーマの定義等、外部の URL を参照すると思しき箇所があります。本番環境では、外部への HTTP 接続が不可能な場合や、ネットワーク障害で外部にアクセスできなくなったりする可能性がありますので、そ…

Spring+HibernateEntityManager(@Required編)

DIし忘れに注意 実行時に、いきなり NullPointerException 喰らって、それが単なる bean への DI し忘れだとヘコみますよね。そういうときには、@Required アノテーションによって、コンテキスト起動時に DI の抜けを確認することができます。 ぬるぽの例 前…

Spring+HibernateEntityManager(@Transactionalアノテーション編)

xmlファイルによるトランザクション設定 前回までの設定では、トランザクションの設定は、beans.xml ファイルの以下の箇所で行っています。 <tx:advice id="readWriteAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> </aop:config>

Spring+HibernateEntityManager(Spring+DDDっぽく編 その4)

アプリケーション層 アプリケーションは、ドメインの概念と実装を、アプリケーション形作るための階層です(とおいらは思っている)。そのため、アプリケーションの起動部分や、インスタンスの生成やら生成されたインスタンス間の依存関係の設定なども含まれ…

Spring+HibernateEntityManager(Spring+DDDっぽく編 その3)

インフラストラクチャ層の位置づけ インフラストラクチャ層は、上位層から利用される層という位置づけで、内容的には何でもありです。プレゼンテーション層、アプリケーション層、ドメイン層のすべてから依存が可能です。しかし、インフラストラクチャ層は上…

Spring+HibernateEntityManager(Spring+DDDっぽく編 その2)

徹夜明けで満員電車で帰宅 orz仮眠後出社 o...rzなんだかなー。 サンプルをちょっとだけ現実的に変更 さすがに、クラス A とかだとリアリティにかけるので、ちょっと変更。 User というインタフェースを作成。何のユーザーなのかよく分かりませんが、とりあ…

Spring+HibernateEntityManager(Spring+DDDっぽく編)

おいらは DDD っぽいのが好き。 前回は、HibernateEntityManager を使ったベタなサンプルでした。しかし、おいらは DDD っぽいのが好きなので、今回は DDD(Domain-Driven-Design)っぽい設計にしてみます。 Layered Architecture ソースコードを、DDD の階層…

Spring+HibernateEntityManager(宣言的トランザクション編)

今回は、前回のサンプルを、プログラム的なランザクションから、宣言的なトランザクションに変更してみます。 主な変更点 aspectjweaverの追加。 aspectj の AOP 文法を利用するため、aspectjweaver のライブラリを追加。追加しないと、以下のような例外が出…

Spring+HibernateEntityManager(とりあえずSpring編)

前回は、HibernateEntityManager を使ったベタなサンプルでした。今回は、とりあえず Spring Framework を使ってみるという程度に拡張します。 拡張点 機能実行部を Serivce として抜き出し。 EntityManagerFactory を Serivce に DI することにして、Entity…

Spring+HibernateEntityManager(HibernateEntityManager単体編)

おいらはここ数年 Spring Framework と HibernateEntityManager 環境で開発をすることが多いのですが、動けばいいやー的な方向に流されてるような気がする今日この頃です。ということで、Spring+HibernateEntityManager 環境について、ステップ・バイ・ステ…

普通には lazy フェッチできないケース(LoadTimeWeaverで対応)

前回、以下のアノテーションにより、対1関連をフェッチできると書きました。 @OneToOne(fetch=FetchType.LAZY) しかし、単純にそうもいかないケースもあるとも書きました。これらのケースを、例を追いながら説明し、その後 LoadTimeWeaver を用いた解決方法…

キャッシュパフォーマンスチューニング(eagerフェッチ関連)

eager フェッチが絡んでくると、ちょっと状況が複雑になってきます。 Hibernateのデフォルトのフェッチ戦略 Hibernateのデフォルトのフェッチ戦略では、MenyToOne と OneToOne 関連は eager フェッチが適用されます。しかし、それではうれしくない状況もあり…

Hibernateキャッシュパフォーマンスチューニング

あんまりまとまってないけど、とりあえずメモっておく。 確実に裏の取れていないところは、後で修正予定。 基本的禁則事項 クエリキャッシュ対象のエンティティの2次キャッシュが設定されていない場合。 この設定は、Hibernate のマニュアルでも禁止事項と…

OSCache#getElementCountInMemory が -1 を返す理由を考えてみた

com.opensymphony.oscache.hibernate.OSCache#getElementCountInMemory が -1 を返す理由と、自分が実装するとしたらどうするかを考えてみました。 第一印象 おいらが最初に OSCache を使った時には、getElementCountInMemory が -1 を返すなんてダメダメだ…

Hibernate専用キャッシュを自作してみる(その2)

前回は、限定された要件を満たす最低限のシンプルな実装を作成してみました。今回は、OSCache と EhCache とのベンチマークをしてみます。自作キャッシュは、とりあえず OfCache という名前にしておきます。 要件 前回の要件を適用します。 環境 ・おいらの…

Hibernate専用キャッシュを自作してみる

要件 最低限の要件を考えてみる。 Hibernateの Cache 機構を使用する。 Cache および CacheProvider インタフェースを実装する。 キャッシュ利用中に、キャッシュ対象テーブルの内容が変更されることは無い。 readonlyモードでのみ使用される。 キャッシュ内…

Hibernateのキャッシュについて考える

Hibernateは、キャッシュ周りのインタフェースを定義し、実装を交換可能にしています。ということで、CacheProvider インタフェースと Cache インタフェースを見てみました。 インタフェース org.hibernate.cache.CacheProvider Cache buildCache(String reg…