1

OSGi バンドルからアクセスできるようにしたいいくつかのリソース (ログ・ファイル、データベース・ファイル、個別の構成ファイルなど) があります。これまでは、相対ファイル パスを使用してアクセスしていました。ただし、現在、同じバンドルが異なる環境 (プレーンな古い Felix と Glassfish) で実行されています。

もちろん、作業ディレクトリは異なります。ディレクトリが既知で決定論的な方法を使用できるようにしたいと考えています。私が知る限り、Glassfish の作業ディレクトリは想定すべきではなく、仕様も定められていません (現在、glassfish3/glassfish/domains/domain1/config)。

これらのファイルをバンドル自体に埋め込むことはできますが、そうすると簡単にアクセスできなくなります。たとえば、ログ ファイルを簡単に見つけられるようにし、アクセスするためにキャッシュされたバンドルを展開する必要がないようにしたいと考えています。また、H2 JDBC ドライバーにバンドル内の URL を指定できるかどうかもわかりません。

4

2 に答える 2

2

A good method is to store persistent files in a subdirectory of the current working directory (System.getProperty("user.dir") or of the users home directory (System.getProperty("user.home"))

Temporary and bundle specific files should be stored in the bundle's data area (BundleContext.getData()). Uninstalling the bundle will then automatically clean up. If different bundles need access to the same files, use a service to pass this information.

Last option is really long lived critically important files like major databases should be stored in /var or Window's equivalent. In those cases I would point out the location with Config Admin.

In general it is a good idea to deliver the files in a bundle and expand them to their proper place. This makes managing the system easier.

于 2012-07-21T13:26:36.693 に答える
1

ここにはいくつかのオプションがあります。1つは、構成管理サービスを使用して構成ディレクトリを指定することです。これにより、必要に応じてファイルにアクセスできます。

ログファイルについては、Ops4JPaxLoggingをお勧めします。slf4jのようなロギングAPIを使用するだけで、PaxLoggingがログ管理を行います。log4j構成を使用して構成できます。

DBもバンドルとしてインストールする必要があると思います。たとえば、私は小さなプロジェクトでダービーをよく使用します。Derbyは、バンドルとして開始し、データベースファイル自体を管理するだけです。h2についてはよくわかりませんが、同じように機能すると思います。

于 2012-07-20T22:38:00.793 に答える