2012-03-06 14 views
0

私はHibernate 3を使用するMaven 3プロジェクトを持っています。Hibernateプロパティファイルには、hibernate.connection.provider_classのエントリがC3P0接続プロバイダ(org.hibernate.connection.C3P0ConnectionProvider)に対応するクラスと一緒にあります。明らかに、このクラスは実行時にのみ使用されるので、コンパイルスコープを持つPOMに対応する依存関係を追加する必要はありません。今、私は任意の接続プーリングフレームワーク、を使用する可能性を与えたいので、POMにランタイム依存性を追加しないでください。ランタイム依存性(接続プールなど)とクラスパス?

ベストプラクティスは何ですか?

私は、アプリケーションが実行されるとき(例えば、コマンドラインを使って)ランタイム依存性(この場合はhibernate-c3p0)に対応するクラスパスへのエントリの追加について考えました。しかし、それが可能かどうかはわかりません。

これはSLF4Jとほぼ同じ問題です。私は、Hibernateが接続プーリングにファサードパターンも使用しているかどうかはわかりません。

ありがとうございました

+0

すべてのソリューション..? –

答えて

2

あなたのコードは接続プーリングに依存しないので(メインコードもテストでも必要ではありません)、依存関係はどこにでも言及する必要はありません。

誰かがそれに言及すべきなら、それはHibernateがその設定でこの機能を提供するので、Hibernateになります。

しかし、あなたは示すためにoptional: trueであなたのPOMに追加することができます

  1. 私はあなたがそれを使用した場合、私はこのフレームワークと、このバージョン

をお勧めします

  • この機能をサポートあなたのプロジェクトのコンシューマーにとって、人生を少しシンプルにするでしょう。

    しかし、全体的には、(Hibernateの接続プーリングをより簡単に設定する方法を提供しているような)コードに影響を与えない限り、他のプロジェクトが提供/必要とする機能については言及しないでください。

    [編集]あなたの主な関心事はおそらく、QAのためのプロジェクトの設定方法です。この新しい動きの技術用語は "DevOps"です。顧客(QA)が慎重に構成しなければならないダンプWARを生成する代わりに、他のすべてと同様に構成は開発プロセスの一部です。あなたが渡すのは、完全に設定された、すぐに実行できるセットアップです。

    これを実装するには、プロジェクトおよびあなたが(それはDBCPに依存しますプラス、それは含まれています実行中のアプリケーションにデッドコードをオンにする必要がある他のすべてに依存して「プロジェクト -qa」と呼ばれる別のMavenモジュールを作成しますすべての必要な設定ファイル)。

    Mavenはoverlayed WARsをサポートしていますので、これを簡単に実装できます。

  • +1

    私のプロジェクトはライブラリではありません。私がそれをリリースすると、QAはテストを開始するかもしれません。しかし、hibernate-c3p0依存関係は、コネクションプーリングフレームワークとしてc3p0を使用させたくないので、アセンブリに含まれていません。オプションのスコープでc3p0への依存関係を宣言すると、どのように役立ちますか? –

    +0

    このシナリオでは、そうではありません。これは、Hibernateのようなライブラリやフレームワークにとってもっと便利です。あなたのケースでは、QAはHibernateを正しく設定する方法を自分自身で知る必要があります。 –

    +0

    しかし、QAがC3P0接続プーリングを使用することを選択した場合、Hibernateはhibernate-c3p0 JARを必要とする可能性があるため、クラスパスに関してどのように機能しますか?私がPOMにC3P0の依存関係を宣言しなければ、JARはクラスパス上に存在しません。 –

    0

    接続プロバイダごとに異なるプロファイルを使用できます。各プロファイルでは、使用する接続プロバイダに対応するランタイム依存関係を設定し、それに応じてhibernate.connection.provider_classプロパティを変更します。

    プロファイルの依存関係を構成する方法の詳細については、Different dependencies for different build profiles in mavenを参照してください。

    How can I change a .properties file in maven depending on my profile?

    +0

    このソリューションは、プロダクションが別の接続プーリングフレームワークを使用することを決定した場合に、プロジェクトを再コンパイルして(プロパティファイルをリフィルし、必要なランタイム依存性を追加するため)、助けにはなりません。とにかくありがとう。 –

    +0

    どのようなパッケージを使用していますか? JAR、WAR ...? –

    +0

    JARとWAR。それはデータベースアクセスに関係し、私は単独で、データベースにアクセスするWebアプリケーションを持っています。 –

    1

    あなたはoptionalとして、あなたの依存関係をマークすることができます参照hibernate.connection.provider_classプロパティの値を変更する方法を参照してください。この場合、アーカイブにパッケージ化されません。この場合、コンテナが必要なライブラリを提供していることを確認する必要があります。

    +0

    コンパイルに依存関係が必要ではなく、コンテナにそれを提供する責任を委任する場合、オプションの –

    +0

    @Fabrice:trueではなく、テストや開発の目的で、あなたのpomに依存関係を宣言する理由はありませんこれを行うことをお勧めします。 – tom

    +1

    +1「オプション」は、コードでこれを利用できることを意味し、プロジェクトのコンシューマがPOMを正しく設定できるようになります。 –