Plugin动态加载Extension,达到plugin.xml中配置的效果
2015-09-01 19:13
417 查看
在plugin.xml中配置扩展点和扩展内容是一种静态的让Osgi认识我们自己写的程序内容的方法。这个方法具有一定的局限性。
笔者最近在写一套通用组件的时候遇到了需要通过其他途径动态Osgi加载组件/类的情况。例如动态记载 快捷键 捆绑命令。
于是利用Osgi的ExtensionRegistry实现动态加载扩展。
以下以加载首选项Page扩展举例:
[java] view
plaincopy
public static void registryPreferencePageExtension(Bundle bundle) throws FileNotFoundException, UnsupportedEncodingException{
ByteArrayInputStream is =
new ByteArrayInputStream(getFile().getBytes("UTF-8"));
// use Eclipse Dynamic Extension API
IExtensionRegistry reg = RegistryFactory.getRegistry();
Object key = ((ExtensionRegistry)reg).getTemporaryUserToken();
IContributor contributor =
ContributorFactoryOSGi.createContributor(bundle);
reg.addContribution(is, contributor, false, null, null, key);
}
public static String getFile() {
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
sb.append("<plugin>");
sb.append("<extension point=/"org.eclipse.ui.preferencePages/">");
sb.append("<page category=/"com.ibm.chas.ui.preference.MainPreferencePage/"");
sb.append(" class=/"com.ibm.chas.emr.tmpltdesigner.preferences.MyPreferencePage/"");
sb.append(" id=/"com.ibm.chas.emr.tmpltdesigner.preferences.MyPreferencePage/"");
sb.append(" name=/"Template Designer Preference/"/>");
sb.append("</extension>");
sb.append("</plugin>");
return sb.toString();
}
笔者最近在写一套通用组件的时候遇到了需要通过其他途径动态Osgi加载组件/类的情况。例如动态记载 快捷键 捆绑命令。
于是利用Osgi的ExtensionRegistry实现动态加载扩展。
以下以加载首选项Page扩展举例:
[java] view
plaincopy
public static void registryPreferencePageExtension(Bundle bundle) throws FileNotFoundException, UnsupportedEncodingException{
ByteArrayInputStream is =
new ByteArrayInputStream(getFile().getBytes("UTF-8"));
// use Eclipse Dynamic Extension API
IExtensionRegistry reg = RegistryFactory.getRegistry();
Object key = ((ExtensionRegistry)reg).getTemporaryUserToken();
IContributor contributor =
ContributorFactoryOSGi.createContributor(bundle);
reg.addContribution(is, contributor, false, null, null, key);
}
public static String getFile() {
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
sb.append("<plugin>");
sb.append("<extension point=/"org.eclipse.ui.preferencePages/">");
sb.append("<page category=/"com.ibm.chas.ui.preference.MainPreferencePage/"");
sb.append(" class=/"com.ibm.chas.emr.tmpltdesigner.preferences.MyPreferencePage/"");
sb.append(" id=/"com.ibm.chas.emr.tmpltdesigner.preferences.MyPreferencePage/"");
sb.append(" name=/"Template Designer Preference/"/>");
sb.append("</extension>");
sb.append("</plugin>");
return sb.toString();
}
相关文章推荐
- Oracle数据库直连IO异常,更改localhost为本机IP地址后运行正常
- mvc EF 执行SQL语句
- [leetcode 226] Invert Tree
- HTML URL 编码
- JSON.stringify
- xilinx zynq-7000 基本知识
- 在Ubuntu Kylin中使用SVN管理代码
- 敌兵布阵
- Factorial Trailing Zeroes
- linux常用命令(16):which命令
- 第一篇 演示如何访问 Email 字段 并调用出来
- 关于ListView循环播放的一些事情
- IOS科研IOS开发笔记学习基础知识
- 一个关于四位数猜想的验证
- eclipse上安装sonarqube插件
- LeetCode题解——Valid Sudoku
- uva644-字符串
- 获取程序运行时间以判别算法优劣
- Linux mysql 以及sql 语句的使用
- CSDN Markdown 效果