在本教程中,我们将使用 nashorn 和 camel 创建一个非常有趣的组合。
Nashorn 是最新版本 jdk: 8 附带的 javascript 引擎。
使用 Nashorn 可以使用 java 启动 shell 脚本。
您可以启动 nashorn 输入:
> /usr/java/jdk1.8.0_31/bin/jjs
或者
> jjs
Nashorn 与任何其他 shell 一样工作,但它使用 javascript!前面的命令打开交互式 javascript shell。使用 Nashorn,您可以执行 javascript 代码,也可以调用对象上的 java 方法。
在这个例子中,我们在项目的类路径中添加了Camel库,代码被组织在一个文件中:camel.sh
这个例子简单而强大。
在第一行:
#!/usr/java/jdk1.8.0_31/bin/jjs -fv
操作系统被通知:“ehi 我是一个新的 shell:jjs
命令是:
jjs -cp ./log4jproperties:./CamelInNashorn.jar:./src:. camel.sh
-jjs 是 nahsorn 外壳
– cp 是类路径参数
您也可以直接使用 ./filescript.sh 或 sh ./filescript.sh 来启动 jjs 脚本,但是 cp 参数存在错误 (https://bugs.openjdk.java.net/browse/JDK-8072138),因此我更喜欢使用 jjs -cp。
然后我们必须创建一个Camel路线。它是实现方法配置的 RouteBuilder 的简单扩展。
在 nashorn 中,我们可以分两步扩展一个 java 类型:
1)有对java类型的引用来扩展
2)扩展它
var RouteBuilder = Java.type("org.apache.camel.builder.RouteBuilder"); var myRouteBuilder = Java.extend(RouteBuilder);
现在我们可以配置camel****route了。Camel路线是实现企业集成模式的简单活动流。
在此示例中,我们使用内联匿名类。
这种构造有点不方便:我们可以使用静态 Java.super(parent) 方法覆盖或访问父类中只有对超类的引用的方法。 Java.type、Java.extend、Java.super 方法不会被 OOP 的纯粹主义者所喜爱。
现在我们准备好使用camel dsl创建路线了。它是自动解释的:它从文件夹中获取一些文件(xml 文件)并使用 xpath 过滤它们。该文件将根据本书的作者重定向到另一个文件夹。
#!/usr/java/jdk1.8.0_31/bin/jjs -fv var RouteBuilder = Java.type("org.apache.camel.builder.RouteBuilder"); var myRouteBuilder = Java.extend(RouteBuilder); var route=new myRouteBuilder(){ configure: function() { var _super = Java.super(route); _super.from("file:src/data?noop=true") .choice() .when( _super.xpath("/book/author = 'Alessio Soldano'")) .log("WebServices") .to("file:target/messages/WS") .when( _super.xpath("/book/author = 'Francesco Marchioni'")) .log("Wildfly") .to("file:target/messages/Wildfly") .otherwise() .log("Other books") .to("file:target/messages/others"); } };
为了启动路由:让它运行并让它监视新添加的文件,我们使用帮助类:“org.apache.camel.main.Main”:这个类管理camel上下文和路由。 camel.sh 脚本的完整代码为:
#!/usr/java/jdk1.8.0_31/bin/jjs -fv var RouteBuilder = Java.type("org.apache.camel.builder.RouteBuilder"); var myRouteBuilder = Java.extend(RouteBuilder); var route=new myRouteBuilder(){ configure: function() { var _super = Java.super(route); _super.from("file:src/data?noop=true") .choice() .when( _super.xpath("/book/author = 'Alessio Soldano'")) .log("WebServices") .to("file:target/messages/WS") .when( _super.xpath("/book/author = 'Francesco Marchioni'")) .log("Wildfly") .to("file:target/messages/Wildfly") .otherwise() .log("Other books") .to("file:target/messages/others"); } }; var Main = Java.type("org.apache.camel.main.Main") var mainCamel = new Main(); mainCamel.enableHangupSupport(); mainCamel.addRouteBuilder(route); mainCamel.run();
要运行脚本,我们需要安装 jdk 8。它使 jjs 命令可用。
外壳命令是:
jjs -cp ./log4jproperties:./CamelInNashorn.jar:./src:. camel.sh
类路径引用两个文件:
1)CamelINashorn.jar:是一个带有camel库的jar
由于 Nashorn shell 在 jvm 中运行并且Camel公开其 MBean,因此可以使用 jmx 监视路由。
您可以在 jconsole 或连接到 jmx 层的其他工具内部检查已完成的消息数量、错误消息等。
如果您安装了 jdk,只需键入:
jconsole
并点击与 Nashorn shell 相关的进程。
你可以在这里找到代码:
https://github.com/mastertheintegration/Camel-in-Nashorn
要准备 CamelInNashorn.jar,只需键入 pom.xml 的同一文件夹:
mvn clean compile assembly:single
然后复制项目文件夹中的 log4j.properties 和 src 文件夹并启动它:
jjs -cp ./log4jproperties:./CamelInNashorn.jar:./src:. camel.sh
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.masterspringboot.com/various/camel/using-camel-in-nashorn-shell
内容来源于网络,如有侵权,请联系作者删除!