[Ruby][S2]Rubyからrjbを使ってS2DAO経由でPostgreSQLにアクセス

なんてことを実験してみた。
一応出来ました。

rubylib/Java.rb

require 'rjb'

class Java
	extend Rjb

	classpaths = Array.new
	# diconファイルもclasspathから検索されます。

	# for S2
	classpaths.push('classes')
	classpaths.push('javalib/s2-framework-2.2.8.jar')
	classpaths.push('javalib/ognl-2.6.5.jar')
	classpaths.push('javalib/servlet-api.jar')
	classpaths.push('javalib/aopalliance.jar')
	classpaths.push('javalib/commons-logging.jar')
	classpaths.push('javalib/javassist.jar')

	# for S2DAO
	classpaths.push('javalib/jta.jar')
	classpaths.push('javalib/s2-extension-2.2.8.jar')
	classpaths.push('javalib/s2-dao-1.0.26.jar')
	
	#for JDBC
	classpaths.push('javalib/postgresql-8.0-310.jdbc3.jar')

	load(classpaths.join(';'))

	System = import('java.lang.System')
	Class = import('java.lang.Class')
	ClassLoader = import('java.lang.ClassLoader')

	S2ContainerFactory = import('org.seasar.framework.container.factory.S2ContainerFactory')
end

classes/test/testDao.dicon


    

    
        dao.interceptor
    

Main.rb

require 'rjb'
require 'rubylib/Java'

p Dir::pwd

puts Java::System.getProperty('java.class.path')

puts "----------------------------------"
container = Java::S2ContainerFactory.create('test/testDao.dicon')
p container

puts "----------------------------------"
kls = Java::Class.forName('test.EmployeeDao', true, Java::ClassLoader.getSystemClassLoader)
c1 = container.getComponent(kls)
p c1
p c1.getEmployee(7799).toString

実行結果

"/cygdrive/d/home/EclipseProjects/TestS2"
classes;javalib/s2-framework-2.2.8.jar;javalib/ognl-2.6.5.jar;javalib/servlet-api.jar;javalib/aopalliance.jar;javalib/commons-logging.jar;javalib/javassist.jar;javalib/jta.jar;javalib/s2-extension-2.2.8.jar;javalib/s2-dao-1.0.26.jar;javalib/postgresql-8.0-310.jdbc3.jar
                                                                  • -
#<#:0x100d4708>
                                                                  • -
#<#:0x100d42d0> "{7799, hoge, 10, piyo}"