任何脚本语言都可以,javafx/jpython/groovy等等,随便一种都可以。
*请注意,是调用脚本,我不管编译,java或容器可以编译但是我不管细节,因为我想通过web浏览器来直接编辑脚本。
这个想法可以实现吗?Banq老师请多指教
任何脚本语言都可以,javafx/jpython/groovy等等,随便一种都可以。
*请注意,是调用脚本,我不管编译,java或容器可以编译但是我不管细节,因为我想通过web浏览器来直接编辑脚本。
这个想法可以实现吗?Banq老师请多指教
大的框架需要用java语言规划出来,但是应用里还有一部分经常变动的规则,这部分最好由脚本语言嵌入进来,现实经常变化的规则定制。
有一种典型的应用,在RPG游戏里,像资源管理、图像显示、通讯等等都是固定的,这些可以用C++实现,但是游戏的剧情是经常变化的,每个节日都要定制针对这个节日的剧情,每年的节日活动,剧情都不一样,这一部分就用lua等脚本语言嵌入进来实现。
这种需求其实在很多场合下都有,我想知道在java里能实现这样的功能吗?
最好不用我来编译,能够互相传递java对象是必须的。
如果用我来编译的话也可以,可是我的应用在jboss里。我试过一使用一个简单的classloader load出自己编译过的java类,但是发现这些类与jboss的classloader加载的类发生cast Exception。我应该把我的class loader的parent设置成jboss ejb组件的classloader,这样只有脚本中定义的类是从自定义的class loader中加载的,其它的基本类还由jboss ejb的class loader加载,可惜这方面资料太少,谁能给一点资料或是一点提示...
另一条路就是绕过java的classloader机制,尝试使用更高层一点的协议,像基于http的webservice等...? 如果可能,还是pure java+脚本简单...
先谢谢banq老师的热心回复!
[该贴被atester于2009-10-04 10:29修改过]
我的做法是用java定义一个接口,然后脚本实现这个接口,把编译过的.jar文件用自定义的classloader加载进来,开始的时候自定义的classloader找不到接口,索性我把接口文件也放到自定义的classloader搜索路径中,这下接口是找到了,但是这个接口与ejb中的接口不是一个类,因为不是用一个classloader加载的....想来要这样做只能找出ejb的classloader是哪个,然后把它设置为自定义classloader的父?
这里其实就体现EJB的根本问题,它为解决一类问题,采取一些强封装,也就是说:它为解决某类问题采取断肢截背,结果这方面就成为弱项,而如果将来拓展恰恰是这方面,它就无能为力,所以,只依赖JVM是最好的设计。
非常感谢