1

我希望能够从我的 OSGi 包中访问一些资源(日志文件、数据库文件、单独的配置文件等)。到目前为止,我一直在使用相对文件路径来访问它们。但是,现在我的相同包在不同的环境中运行(普通的旧 Felix 和 Glassfish)。

当然,工作目录是不同的,我希望能够使用一种目录已知且确定的方法。据我所知,不应该假设 Glassfish 的工作目录也没有指定(当前为 glassfish3/glassfish/domains/domain1/config)。

我可以尝试将这些文件自己嵌入到包中,但这样就不容易访问了。例如,我希望很容易找到日志文件,而不必分解缓存的包来访问它。另外,我不知道我是否可以为我的 H2 JDBC 驱动程序提供一个指向包内某些内容的 URL。

4

2 回答 2

2

一个好的方法是将持久文件存储在当前工作目录 (System.getProperty("user.dir") 或用户主目录 (System.getProperty("user.home")) 的子目录中

临时文件和特定于捆绑包的文件应存储在捆绑包的数据区域 (BundleContext.getData())。然后卸载捆绑包将自动清理。如果不同的包需要访问相同的文件,请使用服务来传递此信息。

最后一个选项是非常重要的文件,如主要数据库应该存储在 /var 或 Window 的等效文件中。在这些情况下,我会用 Config Admin 指出位置。

通常,最好将文件打包交付并将它们展开到适当的位置。这使得管理系统更容易。

于 2012-07-21T13:26:36.693 回答
1

你在这里有一些选择。第一种是使用 Configuration Admin 服务来指定配置目录,这样你就可以在需要时访问文件。

对于日志文件,我推荐 Ops4J Pax Logging。它允许您简单地使用像 slf4j 这样的日志 API,Pax Logging 进行日志管理。它可以使用 log4j 配置进行配置。

我认为您也应该将数据库安装为捆绑包。例如,我在较小的项目中经常使用 Derby。Derby 可以简单地以捆绑软件的形式启动,然后自行管理数据库文件。我不确定h2,但我想它可以类似地工作。

于 2012-07-20T22:38:00.793 回答