0

OK、通常は各 Web アプリに Tomcat 7 インスタンスをインストールしています。これらはほぼ同じコード ベース (実際には同じアプリ) ですが、変更のために 1 つのアプリをダウンさせて他の顧客に影響を与えるわけにはいかないためです。

しかし、非常に多くの Tomcat をインストールするのは時代遅れです。そのため、Tomcat の数を顧客グループごとに 1 つに減らすことにしました。

とにかく、私たちの Hibernate 構成は JNDI を使用しており、Tomcat グループごとにユニバーサル context.xml ファイルを作成し、CATALINA_BASE/conf/context.xmlそれを に保存して、同じグループのすべてのアプリケーションが同じ実稼働データベース データ ソースを共有できるようにしようと考えました。

開発用にローカルの Tomcat で同じことを行い、コンテキストに開発データ ソース情報を含めるだけです。そのため、戦争を本番サーバーまたはローカル開発サーバーにデプロイするだけで、コンテキスト ファイルを変更する必要がありません。

次のスキームを維持すれば、これをうまくやってのけることができるはずだと思います。

CATALINA_BASE/conf/context.xml  # either contains production or dev connections
CATALINA_BASE/conf/Catalina/localhost/    # EMPTY - don't want apps overwriting data sources
CATALINA_BASE/webapps/<webapp>/META-INF/context.xml  # almost BLANK.

これはこれまでのところ機能しているように見えますが (1 つの Web アプリでのみテストされています)、context.xml に<webapp>/META-INFは有効なコンテキストとコンテキスト パスが含まれている必要があるようです。何故ですか?そのパスは Web アプリごとに異なる必要がありますか? 現在、そのファイルには接続情報はありません (ファイルのみにありますconf/context.xml)。

要するに、各 Web アプリがデータベース接続情報を取得する場所を「ダム」にして、war ファイルをどこにでもドロップでき、それらが自動的に接続されるようにしたいのです。

提案をありがとう。

4

1 に答える 1

0

$CATALINA_BASE/context.xml に DataSource 定義を配置すると、同じ定義が各 Web アプリケーションに使用されるため、複数の DataSource が作成されます。

複数のアプリケーション間で 1 つの DataSource を共有する場合は、DataSource 定義をグローバル リソースとして server.xml に追加し、ResourceLink を $CATALINA_BASE/context.xml に追加します。

META-INF/context.xml は必須ファイルではありません。完全に省略できます。それが存在する場合、それは有効な context.xml ファイルでなければなりません (たとえば、有効です) が、ドキュメントに従って、パスまたは docBase 情報を含めてはなりません。

于 2013-05-04T18:50:34.567 に答える