首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
PowerPC
» 用 OSGi 应用程序开发和工作的最佳实践 (6)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
用 OSGi 应用程序开发和工作的最佳实践 (6)
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-9-7 20:46
|
只看该作者
用 OSGi 应用程序开发和工作的最佳实践 (6)
10. 使用 WAB 而不是 WAR
开发企业级 OSGi 应用程序时,创建一个 Web 应用程序 bundle (WAB),不依赖 WAR 进行 WAB 转换。
原因如下
WebSphere Application Server 的 OSGi 应用程序功能自动将一个 WAR 文件转换成一个 OSGi bundle,就是所谓的 Web 应用程序 bundle。在刚开始学习 OSGi 时,这个功能是很有用的,但是自动转换阻碍了某个功能的使用。因而,在开发过程中,WAR 文件应该被转换成一个 bundle 部署到生产系统中。
使用 OSGi bundle 时,应用程序可能显示一系列支持的 bundle。这样一来,不需要重新部署整个应用程序单独的 bundle 也可以更新。该功能取决于模块所拥有的一个已知特性,并不是自动转换,其中特性是在部署时生成的。
当一个 WAR 被转换成一个 WAB 时,包导入生成不可控的版本。结果,包可能捡起所需版本的二进制不兼容版本。如果一个包的版本 2 和版本 3 都可用,不可能阻止 WAR 使用版本 3。如果WAR 需要版本 2,而对版本 3 是不兼容的,这将导致运行时错误。
11. 必要时只使用 Use-Bundle(专用于 WebSphere Application Server)
创建一个 WebSphere Application Server OSGi 应用程序时,一个最佳实践是仅在共享场景 bundle 的一个特定子集中指定 Use-Bundle 应用程序清单头部。
原因如下
WebSphere Application Server Use-Bundle 应用程序清单头部提供一种方法,可以引导应用程序部署进程在导出相同包的其他 bundle 上执行一个 bundle。
在运行时,OSGi 应用程序彼此隔离,但是他们的依赖项是共享的。在 OSGi 应用程序的 Application-Content 头部指定的 bundle 运行在它们自己独立的 OSGi 框架中。依赖项运行在服务器的共享 bundle 空间。
在 OSGi 应用程序部署过程中依赖项被确定。在部署过程中,应用程序 bundle 导入的包匹配应用程序或配置的 bundle 存储库中的 bundle 导出的包。如果 bundle 存储库中需要一个 bundle,将它提供给服务器。由于包的版本约束,两个应用程序被部署和配置来运行是可能的,其中不同 bundle 在共享 bundle 空间中提供相同的包。如果两个应用程序需要使用类实例(来自所涉及的包)互相交互,这就变成了一个问题。如果是的话,那么 Use-Bundle 应用程序清单头部应该用于确保两个应用程序是连接到同一个 bundle 的。
指定 Use-Bundle 来实现应用程序之间的依赖项共享不是必须的。只需要在两个应用程序需要共享一个类的同一版本时,确保它们被连接到同一个提供的 bundle。
示例
例如,一个含有 Bundle X 的应用程序被部署,从 1.0 到 2.0(不包括 2.0)版本中导入一个 包 org.hal.a(图 13)。根据 OSGi 语义版本控制,这意味着 X 可以连接到任何导出 org.hal.a 的 bundle,而不会中断 API 更改,从用户角度使用 API。此时,只有一个 bundle API.A 导出 org.hal.a,在 1.0 版本中也是这样的。因此 Bundle X 被连接到 API.A。Bundle X 因此可以看得见 org.hal.a 版本 1.0 的实现。Implementation.A 是这类实现之一。
图 13. OSGi 将 Bundle X 连接到 API.A 来在可接收 Bundle X 的版本上提供 org.hal.a
然后,部署一个含有 Bundle Y 的应用程序(图 14)。Bundle Y 从 1.5 到 2.0 版本(但不包括 2.0)导入 org.hal.a 包。API.B 也被部署,在版本 1.5 中导出包 org.hal.a。Bundle Y 不能连接到 API.A ,因为它导入一个新的 org.hal.a 版本,但它
可以
被连接到 API.B。Implementation.B bundle 提供了一个 org.hal.a 1.5 版本的实现,从 1.5 到 1.6 版本(但不包括 1.6)导入。 对这一原因进行详细的讨论。
图 14. OSGi 将 Bundle Y 连接到 API.B 来在可接收 Bundle Y 的版本上提供 org.hal.a
然后,部署第 3 个应用程序,其中含有 Bundle Z。Bundle Z 从与 Bundle X 相同的版本导入 org.hal.a 包:从版本 1.0 到版本 2.0 但不包括 2.0(图 15)。Bundle Z 的编写者想要它使用 Implementation.A,但是由于 API.B 是在版本 1.5 上导出 org.hal.a 的(这处在 Bundle Z 的导入范围中),Bundle Z 能被连接到 API.B,随后只能看到 Implementation.B。
图 15. Bundle Z 被连接到 API.B,因此不能看到 Implementation.A
为了确保 Bundle Z 连接到 API.A,Bundle Z 应该指定一个 Use-Bundle 应用程序清单头部:API.A,然后,Bundle Z 将获得对 Implementation.A 的可见性,而不是 Implementation.B。这就是作者想要的(图16)。
图 16. Bundle Z 被连接到 API.A,现在可以看到 Implementation.A
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议