使用 Equinox 开发 OSGi 应用程序(五)

探讨 OSGi 应用架构

设计思路

到目前为止,我们已经涉及到了 OSGi 的诸多方面,那么在实际进行应用程序的架构设计的时候我们要考虑哪些因素呢,这一节我们详细讨论一下这个问题。

应用架构的设计应该充分考虑到可靠性、可扩展性、可维护性等因素,使用了 OSGi 框架后,我们可以更加容易的实现系统分层,组件化的设计方式。通过使用 HTTP 服务我们可以设计出一个基于 HTTP 服务的程序维护平台。架构如下:


图 28. 基于 HTTP 服务的程序维护平台
图 28. 基于 HTTP 服务的程序维护平台

说明:

  1. 通用第三方库层:这一层包括了常用的第三方库,例如 apache commons,jfreechart,xml 包等等,这一层需要将这些包全部 export 出去,这样上层就可以直接通过 require bundle 的方式使用这些包。
  2. 业务模型定义层:这一层依赖于(require-bundle)通用第三方库层,定义了应用的业务模型,例如各种 JavaBeans,也可以在这一层提供额外的应用统一配置服务,即为上层应用提供配置文件的管理服务。
  3. 业务逻辑实现层:这一层依赖于(require-bundle)通用第三方库层,还依赖于 (import package) 业务模型定义层提供的业务模型,定义了应用的业务逻辑,这一层可以细分为:
    1. DAO(Database Access Object)服务层:即为上层应用提供数据库存取服务的层,其 export 出去的接口全部都是和数据库操作相关的;
    2. Service 层:为 UI 层提供的业务逻辑的封装层,这样 UI 层只需要执行 service 层的接口即可,可以将更多的精力放在 UI 的设计;
  4. 展现维护层:这一层依赖于(require-bundle)通用第三方库层,和下面各层提供的管理服务接口,基于 HTTP 服务的方式提供应用的维护,例如配置文件的在线修改、服务的管理,bundle 的管理,日志的管理,内存的管理等等,这些都可以以“ RUNTIME ”的方式展现,管理员或者维护人员操作的就是 Equinox 运行环境。还可以实现大部分的操作不需要重启 JVM,这一点类似于 JMX。
  5. 事件服务:事件服务层是 OSGi 框架提供的标准服务之一,为除了通用第三方库层以外的各层提供事件服务,包括同步、异步的通知各种事件、发布各种事件等。通过事件服务,可以实现各层之间的联动。

这种架构的优势在于:

  1. 各层只用关心自己的业务,例如通用第三方库层只需要 export,其它事情不用管,它也没有自己的 Activator 类,业务模型定义层只需要关心业务模型,而不必关心业务的流程,业务逻辑层中的 DAO 层则只需要关心数据库操作,service 层则负责组合业务流程。各司其职,这样才能精于自己的模块;
  2. 较好的可维护性:最上层的维护展现层,为管理员提供了一个 OSGi 应用的管理窗口,提供在线重启服务、管理各个 bundle 和服务的能力,提供了类似于 JMX 的能力;
  3. 统一的事件管理框架:为各层定义了统一的事件管理接口,基于 TOPIC 方式的事件监听机制能够有效的过滤事件,而且提供了异步、同步两种方式对事件进行处理,可以说有相当大的灵活性。

 




回页首


可维护性的考虑

一般的应用架构可能都比较多的考虑可靠性、灵活性、可扩展性等,对可维护性却没有提供太多的关注,使用 OSGi 后,将对可维护性提供类似于 JMX 的支持,当然这不需要您实现 MBEAN,就像上述介绍的架构设计,我们在最上层可以设计一个基于 HTTP 的维护层,这样,提供了一个小的 Web 控制台,供管理员进行维护。

维护的方面包括:

  1. 系统维护
    1. Bundle 的管理:包括每个 bundle 的更新、停止、启动;
    2. 服务的管理:包括运行环境注册的服务的列表、停止、启动;
    3. 系统所有服务的重启、停止、启动;
  2. 系统状态的监控
    1. 对各个业务层提供的服务的状态进行实时监视、统计;
    2. 对各个业务层提供服务的状态进行控制,通过 OSGi 事件的方式进行通知;
  3. 系统日志的管理
    1. 对系统中各个层的日志进行统一列表、查看;
    2. 对系统中所有操作进行统一日志记录、管理;
  4. 配置管理
    1. 对各个业务模块需要的配置文件进行统一展示;
    2. 对各个业务模块提供的配置文件提供在线编辑、提交功能;
    3. 对修改后的配置文件提供实时上线的功能;
  5. 其它
    1. 维护系统的登录、登出;
    2. 维护系统自审计;
    3. 维护系统权限控制;
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值