zoukankan      html  css  js  c++  java
  • RCP Buddy简易实现

    Eclipse有自己的一套ClassLoader机制

    比如OSGI Bundle是符合OSGI规范的

    同时,它还有一些额外的和Bundle机制不冲突的ClassLoader机制

    比如Buddy

    假设一下情况存在:

    1、插件A需要被插件B依赖

    2、插件A需要插件B的某些信息(类,资源)

    3、插件A需要在本地ClassLoader中获得,而非通过Bundle获得(这是可能由于使用了某些依赖反射的第三方包)

    我选择使用Buddy。

    -----------------------------------------------自言自语的分割线---------------------------------------------------------

    在我的问题里,遇到ClassLoader访问问题的是Hibernate。

    我们知道Hibernate大量使用了Class.forName方法,如果要在Eclipse RCP中使用Hibernate并将之插件化(见在插件里应用hsqldb和hibernate

    有以下插件:

    1、ext.eclipse.hibernate(Hibernate配置插件和自定义工具集)

    2、ext.eclipse.db.hsqldb(数据库插件,独立的数据库插件,维护自己的Hibernate数据库配置)

    3、ext.eclipse.ide.auth(业务相关插件,内包含JavaBean)

    4、ext.eclipse.ide.auth.intf(JavaBean接口插件)

    插件1和插件2是单纯的依赖关系,但是Hibernate和JavaBean之间关系要复杂很多,首先JavaBean所在的业务插件不应该暴露出Bean所在的包,它对外提供的是一个工厂类

    即是说,如果让Hibernate插件依赖JavaBean来通过Bundle机制访问Bean,就不可避免的暴露一些包。

    再,从逻辑上说,Hibernate作为独立的业务无关插件,不应该依赖业务插件,而应该是反过来,需要使用Hibernate的业务插件依赖Hibernate。

    ------------------------------------------------------------------------------------------------------------------------

    ok,下面说一下Buddy。

    实现很简单:

    1、在Hibernate插件的Manifest.MF文件加入定义:Eclipse-BuddyPolicy: registered

    2、在JavaBean所在的业务插件的Manifest.MF文件中加入定义:Eclipse-RegisterBuddy: ext.eclipse.hibernate 以及 Require-Bundle: ext.eclipse.hibernate

    如此就完成了配置,在Hibernate中可以通过反射访问到业务插件的类了。

  • 相关阅读:
    PHP开发用工具
    AS3与js的几种简单通讯方式
    圣斗士,饶了我吧。
    有关访问域的深入探讨
    Flex实现将Wrod文档和Excel文档转xml,以及读取csv
    [转]帝国cms目录结构与模板结构以及标签变量介绍
    flash的小技巧,查看操作代码
    在javascript中在function处提示missing(before function parameters错误
    窗口中的对象和元素(BOM)
    IE9下通过windows.status修改浏览器的状态栏,修改不能成功
  • 原文地址:https://www.cnblogs.com/anrainie/p/2523543.html
Copyright © 2011-2022 走看看