首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时添加的类的类转换

运行时添加的类的类转换
EN

Stack Overflow用户
提问于 2013-10-15 19:43:53
回答 1查看 111关注 0票数 0

我有一个问题,我就是不能让我的头。

我正在创建一个jsf应用程序,在那里我(作为管理员)可以上传一个jar文件,这样就可以更新应用程序了。

通过本教程:http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html,我成功地对jar文件进行了类加载。第一个问题是,我只能将类加载为"Object“,而不能转换为其他类类型。我得到了一个ClassCastException。

代码语言:javascript
复制
JarClassLoader jcl=new JarClassLoader(url);
Class cl= jcl.retreiveClass(jcl.getMainClassName());
Object ob=cl.newInstance(); //I would like to make this a RouteBuilder object instead of Object

具体来说,我使用Apache,在这里我可以向现有的“核心”(CamelContext)添加路由。正在发生的事情是,我在我的web应用程序中运行了apache camel的核心,然后我可以添加路由运行时。这是一条我希望打包成jar并加载到应用程序运行时的路由(我希望在本地环境中开发和测试该路由,然后将其上传到生产应用程序中)。具体的路由只是一个简单的java类,它扩展了RouteBuilder。我想上传jar,classLoad (URLClassLoader)主类(可能是整个jar?-这有意义吗?),并将其转换为RouteBuilder。这似乎是不可能的。我选择将jar文件上传到war之外的文件夹中,以便在重新启动webapp时不会删除路由(这是明智的还是应该以另一种方式完成?)这是关于名字空间的问题吗?此外,我还无法确定是否需要遍历整个jar文件和类加载中的单个类。对此有什么评论吗?

在我看来,对于如何扩展/更新java应用程序,我似乎有一些基本的误解。我只是找不到任何好的例子/解释如何解决我的问题,因此我得出结论,我没有从概念层面上理解这一点。

有人能详细说明如何扩展运行中的jsf应用程序(我猜在本机java应用程序中也存在同样的问题),解释如何在运行时上传和类加载jar,以及如何将加载的类转换为对象以外的其他类类型?

谢谢

拉塞

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-17 01:21:33

如果您对在不停止应用程序的情况下加载路由感兴趣,可以考虑使用像Karaf这样的OSGi容器。Karaf为Apache骆驼路线提供了开箱即用的支持:http://camel.apache.org/karaf.html

所有的类加载都是由OSGi容器管理的,您只需要运行一些命令就可以更新内容。我不确定这是否适用于您的JSF应用程序,但值得一看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19389677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档