Java和Groovy脚本互相调用实例
本实例是GODU动态脚本的一个技术简化版,演示了java调groovy,groovy又调java的运行过程。 测试用例: package com.boco.godu.integration;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.boco.godu.gapi.ConnManager;
import com.boco.godu.gapi.Constants;
import com.boco.godu.gapi.IConnection;
import com.boco.godu.gapi.IResult;
public class SimpleExpScriptTest {
private static final Logger logger = Logger
. getLogger (SimpleExpScriptTest. class );
private IConnection conn ;
@Before
public void setUp() throws Exception {
conn = ConnManager. getDataConn ( "10.0.2.47" , 1234,
"< aa ><7001><administrator><autocmd>" , "goduapp" ,
Constants. TYPE_DATA_CMD_SYNC , 5);
}
@After
public void tearDown() throws Exception {
conn .close();
}
@Test
public void testImport() throws Exception {
Map<String, String> params = new HashMap<String, String>();
params.put( "cmd1" , "ls" );
params.put( "id" , 3);
IResult result = conn .execScript( "ImportEx" , params);
}
}
Java代码:
IConnection.java
package com.boco.godu.gapi;
public interface IConnection {
......// other method definition
public IResult execScript (String name, Map<String, Object> params)
throws Exception;
}
GoduDataConnection.java
package com.boco.godu.gapi.conn;
public class GoduDataConnection extends AbstractConnection {
......// Other IConnection Methods
public IResult execScript(String name, Map<String, Object> params)
throws Exception {
String[] roots = new String[] { "e:/MyDoc/Project/GoduScript" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
for (Entry<String, Object> item : params.entrySet()) {
binding.setVariable(item.getKey(), item.getValue());
}
GapiIosessionUtils giu = new GapiIosessionUtils();
binding.setVariable( "giu" , giu );
gse.run(name, binding);
System. out .println(binding.getVariable( "result" )); // 运行结果是这里输出“11”,即3*2+5。
return null ;
}
}
GapiIosessionUtils.java
package com.boco.godu.gapi.util;
public class GapiIosessionUtils {
......// other method
public int testM( int x, int y) {
return x * 2 + y;
}
}
groovy代码:
e:\MyDoc\Project\GoduScript\ImportEx
def send(cmd){
def result = giu.testM(cmd,5);
return result;
}
result = send(id)
运行过程
测试用例 ->GoduDataConnection.java -> groovy代码 -> GapiIosessionUtils.java;
总结
binding的setVariable中定义的变量(如giu是com.boco.godu.gapi.util.GapiIosessionUtils对象,id是int型数据)在groovy脚本里直接使用,可以出现在脚本的任何地方,且无需声明类型,无需使用import导入定义该变量的类(例如对于giu来说,如果在java代码中,需要import com.boco.godu.gapi.util.GapiIosessionUtils)。
Java和Groovy脚本互相调用实例的更多相关文章
- 使用 Java 执行 groovy 脚本或方法
1. 引入依赖 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groo ...
- Java执行groovy脚本的两种方式
记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...
- Java中通过脚本引擎调用js函数
import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...
- java项目中rmi远程调用实例
1.创建一个学生实体类Student.java: package com.RMIdemo.entity; @SuppressWarnings("serial") public cl ...
- Java执行groovy脚本
Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell s ...
- java 和groovy的混合使用
在应用中,我们可以在一个Java类.一个Groovy类或者一个Groovy脚本中实现某个特定功能.之后可以在Java类.Groovy类或Groovy脚本中调用该功能. 在groovy 使用groovy ...
- C程序与Lua脚本相互调用
Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...
- Java 调用 groovy 脚本文件,groovy 访问 MongoDB
groovy 访问 MongoDB 示例: shell.groovy package db import com.gmongo.GMongoClient import com.mongodb.Basi ...
- JAVA嵌入运行Groovy脚本
摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...
随机推荐
- sonarqube 8.9版本配置项目访问权限
soanrqube设置项目权限 admin->项目->要设置的项目 进行项目权限配置 选择权限 权限配置(公开,私有)如果是公司项目建议选择私有 根据项目团队成员的角色需求,进行勾选配置 ...
- GitLab升级(yum安装版v11.11.8~12.0.12)
参考官方升级建议(注意升级路线:Example upgrade paths) 升级前请自行备份(测试可忽略此步骤) 生成备份文件,在/var/opt/gitlab/backups/目录下生成备份文件 ...
- ClouderaManager安装kafka报错
是因为默认的java heap size是50M,将broker_max_heap_size参数设置为512M后,重启kafka服务即可
- SpringMVC的注解关键词解释
SpringMVC的注解关键词解释 @Controller控制器定义 和Struts1一样,Spring的Controller是Singleton的.这就意味着会被多个请求线程共享.因此,我们将控制器 ...
- 从 Java 代码到 Java 堆
本文将为您提供 Java 代码内存使用情况的深入见解,包括将 int 值置入一个 Integer 对象的内存开销.对象委托的成本和不同集合类型的内存效率.您将了解到如何确定应用程序中的哪些位置效率低下 ...
- 13 shell while循环与until循环
while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环. unti 循环和 while 循环恰好相反,当判断条件 ...
- Java初级面试题整理
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员. 我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 1. Java语言有哪些特点 ...
- Day10 类与对象-面向对象编程(1)
面向对象编程(OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据. 抽象 三大特征: 封装 继承 多态 从认识论角度考虑是先有对象后有类.对象,是具体的事物.类,是抽象的, ...
- 小程序框架WePY 从入门到放弃踩坑合集
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
- map 和 unordered_map
map就是映射. 定义 map<typename,typename> 注:map的元素是pair. 特性 map会对第一个对象自动排序. map不允许有两个相同的关键字. map可以定义迭 ...