JRuby で S2JDBC を使用してみる
Groovy では JAR ファイルを変更する事になったが、JRuby はどうなのかと思い試してみることに。
今のところ JRuby ではアノテーションが扱えなさそうだったので、エンティティクラスは Java で定義したものをそのまま使用し、以下のようなスクリプトを実行してみたところ、何の手間を加えずに JRuby 1.0・1.1b1(共に JavaSE 6 で実行、S2・S2Tiger 2.4.18 RC3)上で問題なく動作した。
require 'java' module S2 include_package 'org.seasar.framework.container' include_package 'org.seasar.framework.container.factory' include_package 'org.seasar.extension.jdbc' include_package 'org.seasar.extension.jdbc.where' end module Entity include_package 'woz.entity' end S2::SingletonS2ContainerFactory.init jdbcManager = S2::SingletonS2Container.getComponent("jdbcManager") dept = Entity::Dept.new dept.deptNo = 2 dept.deptName = "testdata" puts jdbcManager.insert(dept).execute insDept = jdbcManager.from(Entity::Dept.java_class).where(S2::SimpleWhere.new.eq("id", dept.id)).getSingleResult puts "result : #{insDept.id}, #{insDept.deptNo}, #{insDept.deptName}"
Java の可変長引数が適切に扱えないようだったので、where の引数に SimpleWhere のインスタンスを使うようにした。
なお、dicon ファイルは以下のものだけを使い、app.dicon 以外は Java で S2JDBC を使った時(id:fits:20071127)のファイルをそのまま使用した。
ちなみに、app.dicon は以下のように変更。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="s2jdbc.dicon"/> </components>
S2JDBC を試したり、簡単に使ったりするのに JRuby もありかなと思うが、やっぱり現時点では Groovy の方が書き易い。とりあえず JRuby 2.0 に期待かな。