我有一个相当简单的场景:
我的应用程序有包含应用程序逻辑的核心jar文件。这个核心jar应该在运行时动态监视文件夹,当插件jar放在那里时,它应该加载它并准备好使用它。可能有很多插件jars。
根据您的经验,实现此功能的最快、最可维护的方式是什么?我有两个建议:
1)一些OSGi容器,Apache Felix File Install (查看目录中是否有新的包)。而核心jar是作为包安装到容器中的。
1.1问题是核心jar应该如何检测新安装的包是它的插件?有没有办法观察每个添加的包,并使用我独特的字符串查找某种类型的设置,比如"kalazplugin"?换句话说:如何区分我的插件包?
2)只需观察目录的变化,当jar被删除时,然后用URLClassLoader动态加载它,并自己实现它。我可能需要为每个插件提供某种类型的配置文件,以指定一些设置,例如...
发布于 2011-02-22 15:25:18
如果您选择OSGi,则可以使用扩展器模式来查看任何包(已经安装和稍后安装),如果确定包是您的插件之一,则采取任何操作。该模式很容易实现,特别是在已经包含BundleTracker的OSGi 4.2上,但在早期的OSGi版本上只是稍微困难一点。
只要谷歌一下“osgi扩展模式”,你就会看到很多参考资料和实现。
发布于 2011-02-22 15:01:56
你可以参考'org.eclipse.equinox.p2.directorywatcher‘的实现,它可以做你想做的事情。
https://stackoverflow.com/questions/5074459
复制相似问题