2

データアクセスにJPA2/ Hibernate 3.5.6を使用するJavaプロジェクトがあり、JBossアプリサーバーでうまく機能します。これをColdfusion9環境で実行しようとしていますが、CF9にはORMの実装に必要なhibernate3.jarと関連するjarがすでに含まれていることがわかります。しかし、私は自分のJavaプロジェクトをCFでそのまま使用したいと思います。そのためには、CFで同じhibenate3.5.6jarと関連するjarが必要になります。そこで、必要なすべてのjarを移動し、CFに新しいフォルダーを作成し、jvm.configを更新してこの新しいパスを含めました。うまくいきました!しかし、今懸念されているのは、これがCF9が使用するデフォルトのHibernate/ORM動作と競合するかどうかです。これにより、他の問題が発生しますか?(クラスの読み込み、競合など)?

オプション2:また、「起こりうる」問題を回避するために、Webサービスアプリケーションを作成し、必要なすべてのjarをパッケージ化して、CF9-JRun4にwarファイルとしてデプロイすることにしました。この場合、クラスローディングについて心配する必要はありません。これは、Webアプリケーションのスコープ内にあるためです。ただし、CFアプリからの呼び出しが、実際にWebサービスレイヤーを通過することは望ましくありません。データベースにアクセスしてデータを取得するだけでよい場合です。したがって、オプション1(前の段落)を実際に機能させたいと思います。

したがって、以前に同様の設定に取り組んだことがある人なら誰でも、これに関する洞察を提供できます。助けに感謝します!

4

1 に答える 1

2

私は現在、まさにそのセットアップに取り組んでいます(CFアプリ内で実行されているspring / hibernate / jpaアプリ)。唯一の違いは、私がRailoを使用していることですが、以前にもAdobeColdFusion(ACF)で同じことをしました。ACFとRailoの両方で、独自のHibernateを持ち込む際に問題が発生する可能性があります。組み込みのORM機能を使用していない限り、ACFのHibernateの削除/交換を回避できるというのがコンセンサスのようです。

あなたのように、私はオプション2を見ていて、あまり好きではありませんでした。実行しているCFコンテナからJavaアプリを適切に分離する場合は、JavaLoaderを使用する必要があります。これは、アプリにJARをロードできる子ファーストのクラスローダーを提供し、ACFで提供されるクラスへのチェーンを上るよりも、そこからクラスとリソースを解決します。

私が言及する唯一の落とし穴は、多くの最新のフレームワーク(特にSpring)がスレッドコンテキストClassloaderを使用してリソースを取得するため、Javaコードからオブジェクトを構築するときにクラスローダーを切り替える必要がある場合があることです。これはJavaLoaderのドキュメントで説明されていますが、コードがJARなどからプロパティファイルを読み込めないことをうめき声を上げていることが原因である可能性が高いことを知っておく価値があります。残りのアプリケーションコードをシンプルに保つことができます。その例として、CFSpreadsheetのRailo実装とこのクラスを特に見ることができます。

それがすべてあなたのためにうまくいくことを願っています

于 2012-06-29T08:57:15.893 に答える