我试着根据一些例子实现我自己的类加载器.但是,我认为它没有按预期工作(无法重新加载Jar文件等.我看到很少引用推荐使用OSGI或Apache Felix来处理Jar文件加载.是否有任何加载Jar的例子,从Jar实例化一个类?
关于我想要完成什么的更多细节.我有一个基本上连续运行的Java命令行应用程序.我希望它能够在运行时动态引用JAR文件,并在运行时实例中引用这些jar中的类.这些罐子可能包含一个或多个支持类.这些罐子本质上是定制的工作单元,由连续运行的主应用程序中的某些事件条件执行. ..由于这是一个多客户端,我想让jar是一个可插入类型的工作单元.
我目前的方向是为客户提供一个代码接口,然后让他们将他们的类打包到一个jar文件中.然后,应用程序将执行配置的(数据库)jar路径并从Jar运行类.这适用于加载jar和类,但是,我希望能够基本上热部署这些jar.
总之,我想有一个包含支持函数的类的JAR文件.一个定义的类,将在运行时从Jar(来自主循环应用程序)引用.在主应用程序运行时更改JAR文件的能力.
如果我要使用第三方库,我最好使用Apache Felix.
谢谢
我想我用Apache Felix 4来解决它.这是加载jar /类的最佳方法吗?或者是否有更好的更有效的方式.到目前为止,我的研究并没有指出一个解决方案.谢谢.
FrameworkFactory ff = new FrameworkFactory ();
Map config = new HashMap();
config.put("org.osgi.framework.storage", "c:\\temp\\myclientBundles");
config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
"packages needed,more packages needed");
config.put(Constants.FRAMEWORK_STORAGE_CLEAN, "true");
Framework fwk = ff.newFramework(config);
fwk.start();
BundleContext bc = fwk.getBundleContext();
Bundle bundle = bc.installBundle("file:C:\\my_client.jar");
bundle.start();
bundle.update();
Class clazz = bundle.loadClass("client.work.process");
Job pc = (Job) clazz.newInstance();
pc.startWork(someConfigObject);
bundle.stop();
fwk.stop();