您的位置:首页 > 其它

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();  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: