打印

混合Java与Ruby的应用程序

本主题由 maninred 于 2007-12-9 22:35 设置高亮

混合Java与Ruby的应用程序

混合Javaphp?name=Ruby" onclick="tagshow(event)" class="t_tag">Ruby的应用程序
引用:
原文标题:Mixing Java and Ruby Applications
原文地址:
http://www.netbeans.org/kb/60/ruby/java-ruby.html
译者:insight777@Ruby中文社区翻译团队
校对:xiaoqiu@ Ruby中文社区翻译团队
译文首发:
http://ruby-lang.org.cn/forums/thread-2221-1-1.html
转载请保留本版权信息,违者必究!
Contributed by Tor Norbye and maintained byBeth Stearns Beth Stearns Beth Stearns
October 2007 [Revision number: V6.0-1]


本次发表适用于NetBeans IDE 6.0 版本
这篇文章说明了怎样在NetBeans IDE中将Ruby与Java应用程序结合起来。

内容

-文章的先决条件
-创建Java项目
-编辑Java项目
-编写rails应用程序

文章的先决条件

这篇文章展示怎样将Ruby应用程序与Java应用程序结合起来。在这过程中也示范了一些NetBeans IDE 6.0中最新的有关Ruby的性能。


这篇文章需要以下先决条件:
  • 基本的Ruby编程技术知识
  • 您的计算机上装有支持Ruby的NetBeans IDE 6.0 (下载)

设置说明

有几个设置任务,主要包括数据库建立和TopLink JAR文件。下面是怎样将必需的货币数据添加到数据库表中。当你创建Rails项目时,你要添加一些必要的TopLink JAR文件。

你需要按如下步聚配置一个数据库:
  • 新建一个名为CURRENCY的表。
  • 在CURRENCY表中新建三个string (或 VARCHAR)类型的列:Country,Currency和Name。
  • 在这个表中添加一些数据。例如:你可以添加这三种货币再加上任何其它你想要的货币:“USA”,“Dolla”,“USD”,“Czech Republic”,“Koruna”,“CZK”,“Norway”,“Krone”,“NOK”。

你也必须设置NetBeans以使它能够访问数据库表。即如果需要的话,给数据库配置JDBC驱动并且在服务窗口中添加数据源。

例如,下面的SQL语句在名为SAMPLE的Derby数据库(用户名APP和密码为APP)中创建了一个CURRENCY表。如果你想使用同样的SAMPLE数据库,你可以在IDE内部执行这个SQL语句(在连接到SAMPLE 数据库后)并建立这张表。也可以随意点击Tools->Java DB Database->Create Database action来创建你自己的Derby数据库。在不同的数据库系统中创建同样的表的SQL语句可能会与这个例子的不同。

drop table "APP"."CURRENCY";
create table "APP"."CURRENCY" (
country VARCHAR(20), currency VARCHAR(20), name VARCHAR (20),
id INTEGER GENERATED always AS IDENTITY);

alter table CURRENCY add constraint currencyPK PRIMARY KEY (id);
INSERT INTO CURRENCY VALUES ('USA', 'Dollar', 'USD',DEFAULT);
INSERT INTO CURRENCY VALUES ('Czech Republic', 'Koruna', 'CZK',DEFAULT);
INSERT INTO CURRENCY VALUES ('Norway', 'Krone', 'NOK',DEFAULT);
INSERT INTO CURRENCY VALUES ('France', 'Euro', 'EU',DEFAULT);




创建Java项目


一旦完成设置任务,就可以建立你的项目。首先建立一个Java桌面应用程序,实际上是Swing应用程序,并为数据库绑定选择这个选项。这个向导带你一步一步地将项目连接到数据源,我们把这个项目叫Money ,在这个例子中数据源是Derby数据库sample中的CURRENCY 表。通过点击几个按钮,你就会得到一个功能完全的数据库CRUD 应用程序。

图1:创建名为Money的数据库应用程序



图2:将项目连接到数据源



运行Money应用程序(右击Money然后选择Run),你应该会看到类似下面的界面:(用Ctrl+Q退出这个应用程序。)

图3:Money应用程序


编辑Java项目


首先检查生成的Java类,特别是Currency.java类。这儿有一些查看项目片段的技巧。


从这个项目的窗口,展开这个项目的Source Packages->money节点,然后双击 Currency.java,并 在Source编辑区中打开这个文件。Editor窗口会显示整个类及其代码。

类成员


按Ctrl+F12来查看Currency类的成员列表。你可以使用Members对话框在这个类中快速移动。


图4:Currency.java类成员


例如,为了查看类定义,在Filter域中输入Cur。

图5:Currency类定义




注意
:确保生成的Currency.java 代码正确地声明了ID标志符域。你可能要在Java文件中加入一行来指出标志符被生成并且是唯一的。标志符域的正确代码写在这行的后面。你还要注意,为生成的类型加入这一行(@GeneratedValue (strategy=GenerationType.IDENTITY))很有可能导致缺少导入的错误,并且这行会被加上红色的下划线。你可以通过点击这个错误和按Alt+Enter来轻松修正这个错误。

 @Id
 @GeneratedValue (strategy=GenerationType.IDENTITY)
 @Column(name = "ID", nullable = false)
 private Integer id; 




任务列表

Netbeans会自动维护一个任务列表来指出编译的错误和警告等等。你可以在任何时候按Ctrl+6打开并查看任务列表。

图6:任务列表




测试Currency源代码。注意它包含了一些Java Persstence API注释。这些注释指出了对数据库列的绑定并用符号@做出标记。例如,对数据库列的绑定被标记为@Column,其后是列的名称和Java变量,就像: @Column(name="COUNTRY") private String country;

创建Java类访问数据库的列

你需要建立一个新的Java类CurrencyLookup,用它来访问一些Java Persstence实体,即数据库的列。然后,你的Rails应用程序调用这个CurrencyLookup类从数据库中获得这些货币的列表。Netbeans IDE源编辑器的代码的完备性和一些模板特性会帮助你完成这个任务。


在CurrencyLookup类中,编写一个getAll方法来返回这些货币的列表。完整的方法如下所示。注意持久单元samplePU,要与我们使用过的SAMPLE数据库的名称匹配;你的持久单元可能会与这个不同。

public List<Currency> getAll() {
   EntityManager em = Persistence.createEntityManagerFactory("samplePU").createEntityManager();
   Query query = em.createQuery("select c from Currency c");
   return query.getResultList();
}; 


1.在Source Packages下右击money节点,并选择 New->Java Class。


2.在New Java Class对话框的Class Name域中输入CurrencyLookup。(要确保对话框中指出位置是Source Packages并且package名是money。如果不是,就要设置这些域。)Netbeans IDE创建一个 CurrencyLookup.java类,并将它放在Source Packages->money节点中。

3.编写返回所有这些货币列表的方法。Netbeans IDE的一些功能(如代码的完备性,固定导入,等等)可以帮助你。 首先在CurrencyLookup 类的某处键入pu(public的缩写),然后按 Ctrl+Space。注意Netbeans IDE会帮你完成这个正文。(注意这里指出的快捷键组合适用于Windows平台,在其它平台中可能会不同。你可以参考 Help->Keyboard Shortcuts file来为你的环境确定准确的键位组合。)

图7:代码的完备性



4.键入List</Cu之后按组合键Ctrl+K来完成Currency类名。Netbeans IDE会以CurrencyLookup来完成这个类名,所以要确定删除Lookup。

图8:类名的完成


5.继续输入方法名和这个方法的其余代码。

更多的源代码编辑技巧

这是一些其它的源代码编辑技巧:

  • 用Editor窗口的上下文菜单的固定导入功能来导入任何丢失的类。
  • 按Alt+Enter来查看关于方法里丢失成分的提示。
  • 当编辑方法体时按Return插入相匹配的右花括号(})。
  • 你可以将鼠标放在一个单词上然后按Ctrl+R并输入新的正文,来快速替换这个单词。
当你完成CurrencyLookup查询类的时候,如果你想,就可以测试它。使用Tools->Create JUnit Test功能,或者使用快捷键组合Ctrl+Shift+U。这会生成一个 CurrencyLookupTest类的框架。你可以删除假代码并加入一个assertFalse行来测试它。例如,你可以加入下面的一行来测试从数据库返回的一行数据不为空:assertFalse("contains data", new CurrencyLookup().getAll().isEmpty());。然后,用Shift+F6来运行这个测试。

编写Rails应用程序

现在创建这个将访问Money应用程序中的Java代码的Rails应用程序。你首先需要做一些小的设置工作,包括建立Money项目并且添加一些Java JAR文件到Rails项目。


创建和设置Rails项目

1.首先,确保 Money Java桌面应用程序已经被建立。选择这个项目的上下文菜单的Clean和 Build功能,或按Shift+F11。


2.建立一个新的Ruby on Rails项目。接受向导的默认项,并且Netbeans IDE生成这个Rails项目。(如果你已经安装了原有的C Ruby,你会被询问选择一个Ruby解释器。你应该选择绑定的JRuby解释器。)

图9:创建Rails项目




3.接下来,给Rails 项目设置一些Java属性。特别地,你需要为Java Persistence API添加一些TopLink JAR文件,并为Money Java桌面应用程序加上JAR 文件。(这个Money.jar文件在Money项目的/dist目录中。) 右击Rails project 节点,选择Properties。选择Java category,然后点Add JAR/Folder按钮。 定位到这三个JAR文件并且包含它们。要确定包括toplink-essentials-agent.jar和toplink-essentials.jar,这两个文件都可以在你的NetBeans安装目录java1/modules/ext/toplink/下找到。没有必要在这个项目中编辑Rails的config/database.yml文件,因为Rails应用程序用Java代码来进行其数据库查询操作。

图10:包含JAR文件




将Currency Lookup添加到Rails项目


在这里,修改生成的Rails项目来使用Money Java项目的这个货币查询代码。


1.首先,运行Rails项目在浏览器中生成默认的空的Rails页面。编辑默认的URL来把它设置到这个应用程序中。例如,你应该看见像http://localhost:3001/ 一样的URL,在其后加上/money/list。浏览器这时会显示路由错误的信息。当你完成代码时,你会添加一个方法来响应这个URL,然后应用程序会正确地在浏览器中运行。

2.用Rails代码生成器来建立 money控制器和一个列表视图。从Rails 项目的上下文菜单中选择Generate。在Rails Generator对话框的Generate域中选择controller,并且在Name域中键入money,在View 域中键入list。点击OK。

图11:生成Money Controller



[ 本帖最后由 maninred 于 2007-11-29 13:09 编辑 ]
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • maninred R币 +10 奖励一下 2007-11-29 11:59

TOP

这个生成的money controller在编辑窗口中打开。 向controller中添加代码使应用程序能够访问Java代码(require 'java')并且包含CurrencyLookup Java 类(include_class 'money.CurrencyLookup')。一旦完成它,你就可以像调用其它类一样调用Money项目的CurrencyLookup类。还要记住Netbeans IDE有特殊的Ruby and Rails代码完备功能,按Ctrl+K和 Ctrl+Space来协助完成这些方法名称等等。

这是MoneyController类的完整代码:

class MoneyController < ApplicationController
  def list
    require 'java'
    include_class 'money.CurrencyLookup'
    lookup = CurrencyLookup.new
    @list = lookup.get_all
  end
end




创建视图

下面是关于怎样生成格式很好的表格来显示数据库中的三列。我们也会向你展示一些Netbeans IDE的Ruby快捷键。

1、打开由MoneyController 类生成的列表视图。用Navigate->Goto Rails Action/View 功能,或者按Ctrl+Shift+A。 在编辑窗口打开这个list.rhtml文件,或者Money#list视图。

2、在这个列表视图中插入一个table框架。为了快速完成这个操作,键入table然后按Tab键。Netbeans IDE会为表的行和单元添加HTML代码。

图12:使用Tab快捷键



3、选择table行(<tr>)块,然后按Alt+Enter。因为你想要代码遍历所有的货币列表,所以要让表的每一行置于for循环中。Alt+Enter快捷键显示了一个快速的固定选项,这个固定选项高亮的图标出现。 选择Surround with for选项,然后按Enter键。

图13:使用Alt+Enter快捷键



4、现在,改变for循环的参数来匹配货币的数据。用Tab来移动这些参数。调用循环变量c而不是f,并将@field 改为@list。使用代码完备快捷键在行标签(<tr></tr>)内添加附加的表单元标签(<td></td>)。

图14:使用代码完备功能添加HTML标签



5、表单元标签内为Ruby表达式插入代码模板。键入re然后按Tab键。Netbeans IDE会插入Ruby表达式<%= %>。

图15:插入Ruby表达式




6、设置三个这样的表单元块,每一个都含有<%= %> Ruby表达式。在<%= %>块内插入这些货币的列名 (c.country,c.code,和c.name)。当你完成时,代码应该如下所示:

<h1>Money#list</h1>
  <p>Find me in app/views/money/list.rhtml</p>
  <table border="1">
<% for c in @list %>
<tr>
  <td>
     <%= c.country %>
  </td>
  <td>
     <%= c.currency %>
  </td>
  <td>
     <%= c.name %>
  </td>
</tr>
<%end%>
</table>




7、Shift+F6在浏览器中查看这张表。你应该看到以下的内容,这些内容取决于你在数据库中添加的货币:
图16:显示Ruby Currency表


总结

这篇文章展示了你怎样能将Ruby on Rails应用程序与一个 Java桌面应用程序结合起来。这个Java桌面应用程序包含了访问数据库表的代码,并且这个Ruby 应用程序调用Java 数据库表访问代码来获得并显示数据。

这篇文章也说明了一些开发Java和Ruby应用程序时有用的键盘快捷键。

下几步



[ 本帖最后由 maninred 于 2007-11-29 13:05 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

辛苦了。

字体小一点吧,还有标题用红色的,统一一下。
参考
http://ruby-lang.org.cn/forums/thread-1896-1-1.html
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

发布规范:

# 发布时的格式等方面应遵循之前发布的文章的格式。
# 字体同一为Verdana。
# 正文字体为3号字,黑色。文章标题为6号字,红色。文章小段标题为5号字,橙色。
# 标题不用加粗。
# 代码需要放在代码框中。
# 图片要上传到附件中再贴出来。
# 代码和图片的标题用3号字,粗体,黑色。

麻烦777再整理一下。另外此规范已加入到工作规范中:http://ruby-lang.org.cn/forums/thread-1858-1-1.html

[ 本帖最后由 maninred 于 2007-11-29 12:51 编辑 ]
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

引用:
原帖由 maninred 于 2007-11-29 10:58 发表
发布规范:

# 发布时应该包含有团队发布信息。
# 发布时的格式等方面应遵循之前发布的文章的格式。
# 正文字体为4号字,黑色,宋体。文章标题为6号字,红色,宋体。文章小段标题为5号字,橙色,宋体。
# ...
开始图片标题就用的4号字,感觉太大了,所以现在换成了三号。还有正文字体4号也有点大,我的文章有两种小标题,橙色5号,蓝色4号,蓝色的标题从属于橙色的,所以要小一号,如果正文也用4号就没法区分了

TOP

我现在还不能编辑了,超过60分钟就不让,我给drive2me发消息了,他可能还没看见。

TOP

引用:
原帖由 insight777 于 2007-11-29 11:25 发表

开始图片标题就用的4号字,感觉太大了,所以现在换成了三号。还有正文字体4号也有点大,我的文章有两种小标题,橙色5号,蓝色4号,蓝色的标题从属于橙色的,所以要小一号,如果正文也用4号就没法区分了
嗯,是我搞错了,正文应该是3号,更正一下。
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

还有等可以改的时候,把标题的粗体改改过来,标题不用加粗。

777很认真,对格式很重视,值得学习。
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

知道了,其实格式是最烦人的,等你写毕业论文时就知道了。

TOP

再次更改一下,这次是字体的问题。不用用宋体,用比较通用和美观的Verdana。还有代码标题和图片标题的大小。感谢Rangnarok的提醒。

# 发布时的格式等方面应遵循之前发布的文章的格式。
# 字体同一为Verdana。
# 正文字体为3号字,黑色。文章标题为6号字,红色。文章小段标题为5号字,橙色。
# 标题不用加粗。
# 代码需要放在代码框中。
# 图片要上传到附件中再贴出来。
# 代码和图片的标题用3号字,粗体,黑色。

请大家发布时注意。
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

引用:
原帖由 insight777 于 2007-11-29 12:06 发表
知道了,其实格式是最烦人的,等你写毕业论文时就知道了。
嗯。格式是很重要,但是也是很繁琐的。
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

干得很好,谢谢。
本帖最近评分记录
  • maninred R币 +10 大哥也辛苦了。 2007-12-3 13:23
Flying Piggy...! 
天地人合一!

TOP

不错,希望下次合作愉快!
本帖最近评分记录
  • insight777 R币 +10 谢谢! 2007-11-30 08:45
  • maninred R币 +10 校对的也辛苦了。 2007-11-29 22:45

TOP

奇怪!

第一个贴还没编辑呢,一看字数:10749字节,上限是10000字节,这是怎么回事?

TOP

引用:
原帖由 insight777 于 2007-11-30 14:05 发表
第一个贴还没编辑呢,一看字数:10749字节,上限是10000字节,这是怎么回事?
论坛里的编辑器神下神下。
###
blog => red_world,
mail => [image]http://services.nexodyne.com/email/icon/NTbKP7EQRA%3D%3D/c2n6Sgw%3D/R01haWw%3D/0/image.png[/image]
###

TOP

2008-12-05 05:08 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61