快速业务通道

在Ruby on Rails应用程序中重用Java代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
了 tar 归档实用程序的本地 Java 实现,当与 java.util.zip 包相结合时,它可以处 理 .tar.gz 文件。它还利用 Java 语言的平台独立性,可以不作修改地在所有 UNIX® 变体和 Windows 上运行。作为练习,您将使用它来解压一个样例 tar 文件的内容。通过类似的方法,可以在 Ruby on Rails 应用程序中使用任 何遗留 Java 代码。

练习的目标是:

将 tar.jar 文件装载到一个 Rails 应用程序中。

将 JAR 文件所需的类装载到应用程序中。

解压使用这些类的样 例 test.tar 文件的内容。

入门

获取样例文件

首先,需 要为系统获取样例 tar 文件(test.tar)和 Java Tar 包:

将 test.tar 下载并保存 到一个方便的位置。

下载和保存 javatar- 2.5.tar.gz。

将 javatar-2.5.tar.gz 的内容解压到一个方便的位置。 这个练习中,这个包中惟一需要用到的文件是 tar.jar,它在 jars 目录中。

访问共享库

RJB 使用 Java Native Interface (JNI) 实现它的 功能。因此,它需要访问 JDK 安装中附带的一些共享对象文件(共享库)。您 必须使用以下命令将这些文件的位置添加到 LD_LIBRARY_PATH 环境变量中:

[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 中,实例化这些类,并调用 所需的方法。

在Ruby on Rails应用程序中重用Java代码(3)

时间:2010-12-03 IBM Santhosh Krishnamoor

将 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: " + fileinpu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号