抢先一步
VMware 提供培训和认证,为您的进步加油助力。
了解更多SpringSource Application Platform 的主要优势之一是它能够按需配置依赖项。这样做有两方面的好处:它确保了平台的内存占用尽可能小,并且允许在部署应用程序时无需将所有依赖项封装在一个庞大的部署单元中(例如 WAR 文件)。要利用这些功能,您需要了解平台的 provisioning repository,本博客旨在提供这方面的说明。
当平台启动已部署的应用程序时,其 bundle 会安装到 Equinox 中。然后平台会向 Equinox 请求所有 bundle 的未满足依赖项列表,并尝试满足它们。让我们通过一个简单的示例场景来分析这个过程。
如果平台无法从其 repository 满足某个依赖项,则会生成一条日志消息,详细说明无法满足的依赖项。有了这些信息,您就可以使用 SpringSource Enterprise Bundle Repository 来获取您需要的东西。我们希望 repository 能够提供尽可能完整的 bundle 集:如果您需要某个依赖项但它不可用,请告知我们。
如上所述,平台使用其 provisioning repository 的内存索引,该索引在启动期间填充。除此之外,平台在部署应用程序时还会检查其对 repository 的视图是否最新。当您想要安装带有新依赖项的应用程序时,只需将依赖项复制到 repository 中相应的位置,然后部署您的应用程序即可。在部署处理过程中,平台会注意到 repository 已更新并刷新其视图。这意味着您无需在每次安装带有新依赖项的应用程序时花费时间重新启动平台。
平台在创建其 provisioning repository 时扫描的位置可以在 config/platform.config 文件中配置。在没有任何特定配置的情况下使用的默认配置是:
"provisioning" : {
"searchPaths": [
"repository/bundles/subsystems/{name}/{bundle}.jar",
"repository/bundles/ext/{bundle}",
"repository/bundles/usr/{bundle}",
"repository/libraries/ext/{library}",
"repository/libraries/usr/{library}"
]
}
任何相对路径都被平台解释为相对于其安装根目录,但也支持绝对路径。搜索路径中花括号内的条目只是通配符,例如,subsystems 搜索路径 repository/bundles/subsystems/{name}/{bundle}.jar 将在 subsystems 目录的任何直接子目录中找到名称以 .jar 结尾的任何文件。
希望您可以看到,在不同平台之间共享部分或全部 provisioning repository 是一个微不足道的更改。例如,要让平台在其自身的 subsystems 和 ext 目录中以及文件系统根目录中名为 shared-bundles 的目录中进行搜索,您只需将以下 JSON (JavaScript Object Notation) 代码片段添加到 platform.config 文件中:
"provisioning" : {
"searchPaths": [
"repository/bundles/subsystems/{name}/{bundle}.jar",
"repository/bundles/ext/{bundle}",
"/shared-bundles/{bundle}",
"repository/libraries/ext/{library}",
"repository/libraries/usr/{library}"
]
}
通过使用此配置来配置两个或更多平台安装,可以使它们共享 /shared-bundles 中的 bundle。这可以很容易地更进一步,将所有搜索路径配置为指向共享位置,这样您就根本不需要管理每个平台的 provisioning repository 了。
我们还打算通过允许平台配置为在尝试满足依赖项时可选地搜索远程 repository,来结合平台按需配置和 SpringSource Enterprise Bundle Repository 的强大功能。如果在远程 repository 中找到了依赖项,平台将自动处理其下载和安装。希望这能让开发人员的生活更轻松,尤其是在应用程序开发的初始阶段,因为新依赖项会定期添加。
在我们开发上述增强功能以及平台本身时,我们很想听听您的建议:请随时在本博客文章下发表评论、提交 JIRA,或在我们的论坛上发帖。