5

これまで、mavenの依存関係を使用してライブラリを指定してきました。つまり、次のようになります。

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>3.6.10.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-c3p0</artifactId>
  <version>3.6.10.Final</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>8.4-702.jdbc4</version>
</dependency>

ただし、現在、まったく同じ.warファイルを異なるマシンで実行しており、同じOne-war-file-to-rule-them-allを維持したいのですが、古いドライバーを使用して問題を発生させたくありません。 postgres 9.1のインストール時(特に、バイト配列エンコーディングのデフォルトが変更された場合など)。Cliff-Clavenのような情報は、おそらく重要ではありませんが、とにかく追加されます。これらのインストールの両方のOSはMac OS X Serverであり、Postgres 8.4は10.6で実行され、9.1は10.7で実行されます。データをアップグレードする必要はありません(個別のインスタンスを最初から開始します)。

おそらくそれは何よりもMavenの質問ですが、自分の状況に固有のことは何も見えなかったようです。私はこれを見つけましたが、それはもう適用されない古いHibernate3.5です。

4

3 に答える 3

5

PostgreSQLの場合、サーバーのバージョンに関係なく、真に非常に古いバージョンを除いて、最新バージョンのJDBCドライバーを使用する必要があります。

http://jdbc.postgresql.org/download.html#currentによると:

これは、ドライバーの現在のバージョンです。異常な要件(古いアプリケーションまたはJVMの実行)がない限り、これが使用する必要のあるドライバーです。Postgresql 7.2以降をサポートし、1.4以降のJVMが必要です。

PostgreSQL JDBCドライバーの場合、バグが修正され、機能が追加されるため、通常、最新バージョンにのみ適用されます。新しいJDBCドライバーバージョンは古いサーバーバージョンを認識し、サーバーバージョンに従って正しく動作します。

古いJDBCドライバーは新しいサーバーバージョンを認識しないことに注意してください。実際、サーバーバージョンより古いJDBCドライバーを使用すると、セキュリティの問題が発生する可能性があります。

于 2012-04-17T15:00:50.477 に答える
3

私があなたの質問を理解したかどうかわかりません。私はこの問題について少し違った見方をしています。これが私のコメント/提案です:

  1. ドライバー関連のjarファイルをwarファイルに直接バンドルする代わりに、アプリケーションサーバー(tomcatなど)によって管理されるデータソースを使用します。
  2. このようにして、戦争がドライバークラスに依存することはありません。
  3. データソースの構成はアプリサーバーで行うことができ、Webアプリケーションはそれを検索するためにJNDI名を知っている必要があります。
  4. また、warファイルはドライバー関連の依存関係から完全に独立しているため、これはOne-war-file-to-rule-them-allアプローチとも調和します。

このアプローチの欠点は、ドライバーjarをアプリサーバーで手動で維持する必要があることですが、そのタスクは1回だけであり、アプリケーションレベルの変更から完全に切り離されます。

于 2012-04-17T14:06:19.247 に答える
1

最善の解決策は、jdbcドライバーをサーバー上の共有libフォルダーに配置し、戦争中にパッケージ化しないことです。これは、スコープをに設定することで実行できますprovided

異なる依存関係バージョンを使用してpomでビルドプロファイルを定義できますが、その場合、ビルドを2回呼び出す必要があり、2つの異なるwarファイルが生成されます。

于 2012-04-17T13:05:29.360 に答える