在 Ruby on Rails 应用程序中重用 Java 代码
2009-11-20 00:00:00 来源:WEB开发网[root@san]# export JAVA_HOME=/usr/local/jdk60
[root@san]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386
[root@san]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386/client
如果打算在独立的 Ruby 脚本中使用 RJB,那么只需在正在处理的 shell 中设置这些环境变量。对于您的 Ruby on Rails 应用程序,还必须在 Rails 应用程序的 environment.rb 文件中设置这些变量。
将 RJB 装载到 Rails 应用程序
要将 RJB 装载到 Rails 应用程序并将它设置为可以调用 Java 类,需要执行两个步骤:
告诉 Ruby 将 rjb 库包含到代码中。
装载 JVM,设置类路径和其他可选的 JVM 参数。
首先,使用下面的命令初始化 RJB:
require 'rjb'
接着,将 Rails 应用程序中将要使用的所有 legacy .jar 文件 — 本例中为 tar.jar — 添加到 classpath 变量:
Rjb::load(classpath = '.:/path/to/tar.jar', jvmargs=[])
可以将 jvmargs 留空,除非希望为 JVM 指定额外的参数。
现在,可以将准备使用的 Java 类导入到 Ruby 中,实例化这些类,并调用所需的方法。
将 Java 类导入到 Ruby 并实例化
清单 1 中的 Ruby 代码从 tar.jar 包中导入了需要的 Java 类,并从导入的类中创建了 Ruby 对象:
清单 1. 将 Java 类导入到 Ruby 并实例化
tararchive = Rjb::import('com.ice.tar.TarArchive')
fileinputstream = Rjb::import('java.io.FileInputStream')
file = Rjb::import('java.io.File')
file_instance = file.new_with_sig('Ljava.lang.String;','.')
fileinputstream_instance =
fileinputstream.new_with_sig('Ljava.lang.String;','test.tar')
tararchive_instance =
tararchive.new_with_sig('Ljava.io.InputStream;',fileinputstream_instance)
p "Let's verify that the objects created are indeed of the classes we
wanted..."
p "------------------------------"
p "For the File instance...."
p "Expecting: java.io.File , it is: " + file_instance._classname
p "------------------------------"
p "For the FileInputStream instance...."
p "Expecting: java.io.FileInputStream , it is: " +
fileinputstream_instance._classname
p "------------------------------"
p "For the TarArchive instance...."
p "Expecting: com.ice.tar.TarArchive , it is: " +
tararchive_instance._classname
更多精彩
赞助商链接