2016-06-23 6 views
5

私は最近、中規模のレガシーコードベース(3.xから5.2へ)でHibernate依存関係のバージョン(他のものの中でも)にバンプすることを許可されました。コードそのものは部分的に10年以上経過していますが、まだ日常的に使用されています。レガシーHibernateアプリケーションのアップグレードパスは何ですか?

APIの呼び出しが増えた後でも、現在では非難されていた領域や欠けている領域まで、多くのAPI呼び出しを移植しても(SchemaExportを実行する方法を見つけるのは特に楽しい経験でした)完全な移行として。

多くの場合、エンタープライズシステムは10年から15年程度の期間であり、必要なバグ修正や機能を得るためには、より新しい依存バージョンにジャンプする必要があるため、レガシーユーザーのためのアップグレードパスは何ですか?

次の点は、ややまだ開いている:

  • JPAのアノテーションに.hbm.xmlマッピング情報を移行する明確なまたは自動的な方法はありません。私は、手動での移行は非常にエラーが発生する可能性が高く、すべての概念が明確で明白な対抗手段を持っているわけではありません。

  • 以前のCriteria APIの使用方法については、多くの非推奨警告(org.hibernate.orm.deprecation)がありますが、明確なアップグレードパスもありません。 1つのアプリケーションのdbアクセスコード全体を、まったく異なる、より冗長なAPIに書き直すことはできません。

  • org.hibernate.transform.ResultTransformerのネイティブクエリとインスタンスをたくさん使用しているようですが、org.hibernate.query.Query#setResultTransformer()はこれを回避する方法が示されていません。

は、一般的には、私は非推奨に関するドキュメントを見つけて、リッテ希少Hibernateの側のアップグレードパスを意図しました。私はそれがオープンソースプロジェクトであり、古いAPIを永遠に維持したくないということを理解していますが、まだ少し失われていると感じています。これがまだ使用中の唯一のレガシーJavaアプリケーションであるとは思わない今日。

+0

ほとんどの懸念事項は、統合テストの存在によってカバーされています。あなたがレガシーシステムで働いているとすれば、私はそれを持っていません。それがあなたの主な問題です.Hibernateが時間の経過とともに進化したという事実ではありません。同様のアップグレードを行いましたが、サーバ(JBoss 5.1からWildfly 9へ)とJSF(1.2 + JBoss SeamからJSF 2.2 + Primefaces)にアップグレードしました。これは6ヶ月間のコード再設計に苦労しました。それは従来のシステムと同じように、そしてなぜ多くの人がアップグレードしないかを選択する理由です。 – Gimby

+0

アプリケーションで使用しているパターンとテクノロジは何ですか?私はあなたがMVCを使用するアプリケーションを意味する、サービス層のためにあなたはSpring、EJBなどを使用します。 –

+0

5.1にアップグレードし、まだ5.2にアップグレードしないことをお勧めしますか? 5.2は、Hibernate 6に向かって「道路を舗装する」ことについて非常に多くのことを話しています。私たちが知っているいくつかのものを非難します。また、いくつかの変更が余りにも行き過ぎていて、5.2.1に少し戻っています。つまり、https://hibernate.atlassian.net/browse/HHH-10877 – Sanne

答えて

1

私はあなたが意味することを理解しています。実際、私は最近、フォーラムから3.xから4.xおよび5.xへの移行に関するあらゆる種類の質問を見てきました。

  1. すべての移行の開始ページとして移行ランディングページが必要です。このように、ユーザーは1ページに移動して必要なものすべてを見つけなければなりません。
  2. 自動HBM対アノテーションツールはありません。しかし、代替手段があります。 HBM - >データベースを作成し、リバースエンジニアツールを使用してデータベーススキーマからアノテーションを生成することができます。
  3. 2つのCriteria APIを管理する余裕がなくなるため、従来のCriteriaは廃止されました。さらに、JPA Criteriaはより高度です(タイプセーフなクエリとMetamodelを持っています)。残念ながら、レガシーからCriteria APIへの自動移行はありません。しかし、このようなメソッド呼び出しが何百もある場合でも、自動的に(regex/perl/vi)または手動で簡単に移行できます。それはあまりそれをすることはありません。
  4. ResultTransformerは、ラムダをよりよく利用できる新しいメカニズムに置き換えられます。このため、新しいインターフェイスは機能インターフェイスでなければなりません。
+0

特定の質問。 :) – aeisele

関連する問題