Groovyのサイトからダウンロード。ダウンロードは以下のサイトから。このエントリを書いた時点では1.8.0が最新版だった。
前準備
Groovy 1.8.0 final
http://groovy.codehaus.org/Download
You can have a look at the JIRA release notes.
圧縮ファイルを解凍するとlibフォルダがあり、そこにGroovy本体がある。これを作っているアプリとかのライブラリのフォルダに放り込みパスを通す。
groovy-1.8.0.jar
あと、実行する際に必要な(と思われる)ライブラリも入れてあげる。これらは圧縮ファイルのlibフォルダにあった。
asm-3.2.jar asm-analysis-3.2.jar asm-commons-3.2.jar asm-tree-3.2.jar asm-util-3.2.jar antlr-2.7.7.jar
実行してみる
Webアプリとかのボタンの処理でGroovyScriptEngineクラスを使用するコードを書いてみる。
とある、処理で・・・
// 第一引数はスクリプトファイルがあるフォルダ GroovyScriptEngine gse = new GroovyScriptEngine("c:\\gs"); Binding bind = new Binding(); // 第一引数はスクリプトファイル名、第2引数は引数オブジェクト? Object o = gse.run("abc.groovy", bind); Logger.getLogger(getClass()).debug("o=" + o);
c:\\gs\\abc.groovy
println 'hello groovy'
実行結果
hello groovy
変数はどうやって引き渡すか
Bindingクラスを使う。このBinding#setVariable()の第一引数に引き渡した文字列が呼び出されたGroovyスクリプト内での変数名になる。
引き渡すクラス
class Hoge{ ・・・ }
GroovyScriptEngine gse = new GroovyScriptEngine("c:\\gs"); Binding bind = new Binding(); bind.setVariable("varhoge", hoge); bind.setVariable("varstr", "Stringの変数"); Object o = gse.run("abc.groovy", bind); Logger.getLogger(getClass()).debug("o=" + o);
c:\\gs\\abc.groovy
println 'hello groovy' println varhoge println varstr
実行結果
hello groovy Hoge@14c4b73 Stringの変数 2011-07-19 23:58:52,375 [DEBUG] o=null
戻り値はどうなの
Stringの戻り値を返してみる。
下は先ほどのabc.groovy
println 'hello groovy' println varhoge println varstr return 'hello too!'
結果
hello groovy Hoge@1d3db5c Stringの変数 2011-07-20 00:05:54,319 [DEBUG] o=hello too!
オブジェクトを返してみる
下は先ほどのabc.groovy
println 'hello groovy' println varhoge println varstr return varhoge
hello groovy Hoge@1d3db5c Stringの変数 2011-07-20 00:05:54,319 [DEBUG] o=Hoge@1d3db5c
なるほど、引数で渡したオブジェクト自身が返ってきた。(考えれば当たり前だけど)
Java側で書いていたDBへの接続処理はどうなるのか
今回、Javaに書いていたものをGroovy化する目的があったんだけど、今まで書いていたDb接続処理とかはスクリプトに貼り付けて動くのだろうか?今動いているコードを貼り付けて実験
abc.groovy
import java.sql.Connection; import jp.僕のパッケージ.DBUtil; import jp.僕のパッケージ.dao.SelectInformationTbl; con = DBUtil.getConnection() // java.sql.Connectionを取得する処理 SelectInformationTbl sql = new SelectInformationTbl(); List sqllist = sql.exec(con) // SQLを発行するメソッドとか・・・ println sqllist.get(0).getId()
一応、動いた。