RCP Buddy简易实现

简介: Eclipse有自己的一套ClassLoader机制 比如OSGI Bundle是符合OSGI规范的 同时,它还有一些额外的和Bundle机制不冲突的ClassLoader机制 比如Buddy   假设一下情况存在: 1、插件A需要被插件B依赖 2、插件A需要插件B的某些信息(类,资源) 3、插件A需要在本地ClassLoader中获得,而非通过Bundle获得(这是可能由于使用了某些依赖反射的第三方包)   我选择使用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中可以通过反射访问到业务插件的类了。

 

目录
相关文章
|
5月前
|
安全 Shell Linux
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
162 0
|
20天前
|
存储 Linux 网络安全
【VMware VCF】使用 SFTP 服务器备份 VCF 核心组件的配置文件
【10月更文挑战第6天】以下是使用 SFTP 服务器备份 VMware VCF 核心组件配置文件的步骤:首先,设置 SFTP 服务器并配置用户账号与权限;其次,确保 VCF 环境能与 SFTP 服务器建立网络连接,并检查防火墙规则;接着,识别核心组件配置文件的位置,并使用 SFTP 客户端工具(如 `lftp` 或 WinSCP)进行备份;最后,验证备份结果的完整性和正确性,并定期执行备份操作,设置备份文件保留策略以节省存储空间。
|
5月前
|
网络协议 安全 网络安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
135 0
|
Linux 网络安全
通过 vscode Remote-SSH 远程开发Linux上的代码
通过 vscode Remote-SSH 远程开发Linux上的代码
186 0
|
NoSQL Linux 网络安全
Linux-(rcp,scp)
rcp命令 1.命令格式: rcp [参数] [源文件] [目标文件] 2.命令功能: rcp命令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。
1504 0
|
Ubuntu Windows
使用pscp命令将windows系统里的文件传送到远程服务器
使用pscp命令将windows系统里的文件传送到远程服务器
111 0
使用pscp命令将windows系统里的文件传送到远程服务器
|
网络安全 数据安全/隐私保护 iOS开发