
Java脚本调用
JSR223H2
Java中调用其他脚本语言可以通过JSR223来实现。JSR223规范定义了脚本调用的抽象,只要拥有对应脚本的JSR223的实现,即可实现Java对对应脚本的调用。
例如,下面是对JS脚本的调用
bash
import javax.script.*;public class HelloWorld {public static void main(String[] args) throws ScriptException {ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("JavaScript");engine.eval("print ('Hello World')");}}
Ruby的调用H3
JRuby提供了Ruby脚本的的JSR223的实现。只需直接依赖JRuby的包
bash
<dependency><groupId>org.jruby</groupId><artifactId>jruby</artifactId><version>${jruby.version}</version></dependency>
引擎名为jruby
bash
ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("jruby");Bindings bindings = new SimpleBindings();bindings.put("message", "global variable");String script ="puts $message";engine.eval(script, bindings);
使用gemH4
Jruby增强了RubyGems,它会寻找classpath下的specifications目录并自动地添加到Gem.path目录下,这意味着可以把整个gem repository打包成jar文件。
首先,需要通过安装需要的gem的来创建gem repository
bash
$ java -jar jruby-complete-1.1.6.jar -S gem install -i ./chronic-gems chronic --no-rdoc --no-riSuccessfully installed rubyforge-1.0.2Successfully installed rake-0.8.3Successfully installed hoe-1.8.2Successfully installed chronic-0.2.34 gems installed
然后打成jar包,注意jar包的名称不要和gem的名称一样(例如chronic.jar),否则当你require 'chronic'的时候JRuby会加载chronic.jar
bash
$ jar cf chronic-gems.jar -C chronic-gems .
然后可以查看jar包中所包含的gem
bash
java -jar jruby-complete-1.1.6.jar -S gem list
NodeJS的调用H3
J2V8是V8引擎的Java Binding,它通过JNI调用来实现NodeJS的调用。下面是一个调用NPM模块的例子
bash
public static void main(String[] args) {final NodeJS nodeJS = NodeJS.createNodeJS();final V8Object jimp = nodeJS.require(new File("path_to_jimp_module"));V8Function callback = new V8Function(nodeJS.getRuntime(), new JavaCallback() {public Object invoke(V8Object receiver, V8Array parameters) {final V8Object image = parameters.getObject(1);executeJSFunction(image, "posterize", 7);executeJSFunction(image, "greyscale");executeJSFunction(image, "write", "path_to_output");image.release();return null;}});executeJSFunction(jimp, "read", "path_to_image", callback);while(nodeJS.isRunning()) {nodeJS.handleMessage();}callback.release();jimp.release();nodeJS.release();}
Spring IntegrationH2
Spring Integration 2.1开始支持对JSR223实现的集成调用。 通过Service Activator即可实现方法调用
bash
<service-activator input-channel="input"><script:script lang="ruby" variables="foo=FOO, date-ref=dateBean"><script:variable name="bar" ref="barBean"/><script:variable name="baz" value="bar"/><![CDATA[payload.foo = foopayload.date = datepayload.bar = barpayload.baz = bazpayload]]></script:script></service-activator>
再配合Gateway,实现无缝的方法调用
bash
<gateway service-interface="com.some.Foo"default-request-channel="input"default-reply-timeout="10000"default-reply-channel="reply" />
评论
新的评论
上一篇
用Spring Test进行页面的功能测试
Spring Test Spring Test框架提供的MockMvc可用于实现Controller的集成测试。 例如 如果想更新一步,对页面的功能功能测试,也是可以的 但是这样的测试代码的有不少缺点,代码重复性较高,可维护性较差,页面稍微变更,现有的代码的xpath也不得不修…
下一篇
实现后台长时间任务的监控
后台长时间任务的监控,例如,处理进度的监控,可以通过客户端轮询拉或者服务器推技术来实现。这里主要讨论服务器推技术的实现。 Comet 基于HTTP 长连接、无须在浏览器端安装插件的“服务器推”技术为“Comet”。Comet主要有两种实现方式。 基于 AJAX 的长轮询(lon…
