Skip to content

Latest commit

 

History

History
231 lines (187 loc) · 7.57 KB

jframe_manual_zh_CN.org

File metadata and controls

231 lines (187 loc) · 7.57 KB

Jframe Manual

工程目录

下载地址

git clone /~https://github.com/dzh/jframe.git

工程说明

项目checkout目录结构

注: 以下结构可能与实际稍不同

- jframe                            #checkout目录
  - doc                             #项目文档
  - jframe                          #jframe框架根目录,注意在eclipse里选择它install,不要在下面的module项目上install
    - backup                        #存放一些文件,用户备份
    - jframe-core                   #框架核心
    - jframe-example-plugin         #演示插件编写的示例插件
    - jframe-ext                    #jframe-core的扩展
    - jframe-launcher               #启动Main函数
    - jframe-release                #install构建的jframe结构,一定要在jframe根目录install
      - jframe                      #这个目录之下,代表了jframe框架的程序结构布局
        - bin                       #启动、停止脚本
        - conf                      #配置文件,包括config.properties、vmargs、logback.xml等
        - doc                       #文档  
        - lib                       #公共lib库,动态dll|so默认目录,由系统类加载器加载
        - log                       #默认日志输出目录
        - plugin                    #默认插件目录,下面的插件有插件类加载器加载
        - temp                      #默认临时目录,如存放进程pid文件等
        - update                    #默认系统更新目录,upg更新插件使用
    - jframe-swt                    #jframe的swt插件实现,这个示例还没做好,目前演示了将jframe用于C端的方式
    - jframe-watch                  #资源更新插件,跟踪配置文件的修改并通知其他插件
  - jframe-plugin                   #jframe实现的一些插件

Maven说明

  • jframe项目使用eclipse+maven开发和管理
  • 在eclipse里通过在jframe和jframe-plugins上install后,将直接构建最后的发布格式
    • 如jframe构建后的jframe-release即所有使用jframe框架应用程序的一般目录布局(可以通过config.properties定制)
    • jframe-plugins构建说明

安装/使用

运行环境

  • oracle jdk1.5以上
  • 支持linux、windows
  • Eclipse+Maven插件+git插件

构建启动

  • 将clone到本地目录里的jframe项目导入到eclipse里

../doc/images/eclipse-jframe-structure.jpeg

  • 在项目’jframe’上右键

框架配置

启动脚本

框架日志

config.properties

vmargs[-win]

Jframe

jframe-launcher

启动过程

  • Main 守护进程main函数
  • FrameMain

  • v1.2.0版本开始功能, 和jframe-core的依赖关系倒置
  • 设计目标让launcher

jframe.launcher.api

use launcher

jframe-core

jframe状态机

UnitManager

signal

PluginClassloader

类加载过程

Plugin

插件示例

开发插件

定义插件类

插件配置文件 - plugin.properties

插件使用技巧

插件间交互~Policy

插件间交互~Message

  • 消息说明
    • 所有实现jframe.core.msg.Msg的类都可以作为插件间交流的消息 继承PluginMsg实现自己的Msg 常用TextMsg
    • Msg结构
      • type int 消息类型 插件根据type读取自己感兴趣的Msg
      • meta 存储辅助数据 可以视为一个map数据结构
      • value 消息内容 可选 可以用meta方式
  • 发送消息
    • Plugin必须继承自PluginSender或PluginSenderRecver
    • plugin.send(Msg<?> msg) 发送消息

    /注: 插件里的类都可以使用@InjectPlugin将插件实体注入 /

  • 接收消息
    • Plugin必须继承自PluginRecver或PluginSenderRecver
    • 订阅感兴趣的消息
      • Plugin注解@Message(msgTypes = {MsgType})
      • 重写interestMsg(Msg<?> msg) 若返回true标示接收这个消息

      /注: 使用注解方式时, 注意@Message的其他选项设置和父类注解内容保持一致 /

    • plugin.doRecvMsg(Msg<?> msg) 接收消息
  • 总结

Message机制实现异步调度, 解藕系统部件间的依赖, 实现可插拔的灵活功能调度

插件间交互~Service

  • 插件服务特性说明
    • 插件服务不依赖于插件启动次序
    • 服务是单例的
    • 插件卸载时, 定义在插件里的服务也将卸载, 并清除已注入的服务实例
    • 服务是基于接口的同步注入编程模型,方便插件间模块交互
  • 定义插件服务
    • 编写服务接口 通过注解定义服务,@Service(id=’服务唯一ID’,clazz=’服务实现类’)
    • 编写服务实现类 接口和实现目前要求在同一个插件内
    • 定义服务 plugin.properties里`Plugin-Service`,服务间用空格分隔(默认作为Export-Class导出)
  • 使用插件服务
    • 导入服务接口 plugin.properties里`Import-Class`,服务间用空格分隔
    • 注入服务 @InjectService(id=’服务唯一ID’),使用服务的类必须加@Injector
  • 总结

Service机制实现同步调度,

  • 示例插件服务

Policy vs Message vs Service

  • Policy 消息共享
  • Message 异步编程
  • Service 同步编程

获取配置更新

插件注解说明

插件相关

  • @Plugin 插件配置
  • @Message 插件消息配置

服务相关

  • @Service 定义插件
  • @Start 服务实例初始化启动
  • @Stop 服务示例卸载时执行

注入

  • @Injector 说明类使用注入功能,类没有这个注解的则下面的注解无效
  • @InjectPlugin 注入插件实例
  • @InjectService 注入服务

调试/性能

远程调试

调试守护进程(Main)

调试框架进程(FrameMain)

  • conf/vmargs或vmargs-win文件中,开启jvm远程调试

#+START_EXAMPLE -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=6666,server=y,suspend=n server=y jvm作为调试服务端 suspend=n jvm启动后直接运行,若y则jvm启动后挂起,在调试客户端连接后才继续执行 address=6666 jvm调试服务端监听端口6666

  • eclipse配置远程调试(以上面的配置为例)

./images/eclipse-jframe-debug-remote.jpeg

本地调试

在Eclipse中调式jframe项目

注: 以下说明以jframe/jframe-demo工程为例

  • 思路
    • MainLauncher行为是读取配置文件启动Frame进程
    • 通过eclipse调式配置,直接启动FrameLauncher
  • 构建工程,如cd jframe-demo | mvn install, 打包目录在jframe-demo/demo-release
  • 配置Eclipse Debug选项,如jframe-demo-debug
    • Main选项,配置启动Main函数

    ./images/debug-local-tab-main.png

    • Arguments选项, 主要配置3项: app.home应用根目录,launcher默认FrameLauncher,logback.configurationFile日志文件(可选,示例使用logback)

    ./images/debug-local-tab-argu.png

    • Classpath选项, 在User Entries里加入构建时项目依赖的jar,如示例demo-release/lib/*.jar

    ./images/debug-local-tab-path.png

    • Source添加调式项目源码

    ./images/debug-local-tab-source.png

  • 上述配置配好,点击debug按钮,控制台会有日志输出,在源码中需要的地方设置断点就可以。

使用jvisualvm

  • 性能监控配置

核心插件

jframe-watch

功能

配置

jframe-upg

jframe-rcp

高级主题

管理jframe

扩展jframe

源码分析

启动/关闭

加载插件

消息分发

进程内分发

jframe.core.dispatch.DefDispatcher

队列分发

jframe.ext.dispatch.ActivemqDispatcher