混合 Java 和 Ruby 应用程序

来源:互联网 发布:mysql order by 编辑:程序博客网 时间:2024/06/07 16:05

(源自:http://www.netbeans.org/kb/60/ruby/java-ruby_zh_CN.html)

混合 Java 和 Ruby 应用程序

撰稿人: Beth Stearns Beth Stearns
2007
年 10 月[修订号:V6.0-1]
本文适用于 NetBeans IDE 6.0 发行版

本文将演示如何使用 NetBeans IDE 结合 Ruby 和 Java 应用程序。

内容 - 本文需求- 创建 Java 项目- 编辑 Java 项目- 编写 Rails 应用程序

 

本文需求

 

本文将介绍如何将 Ruby 应用程序和 Java 应用程序结合在一起。然后,本文将演示 NetBeans IDE 6.0 中的一些最新的 Ruby 功能。

本文有以下需求:

  • Ruby 编程技术的基础知识
  • 计算中已安装 NetBeans IDE 6.0 with Ruby(下载)

建立操作

首先,需要执行一些建立任务,主要涉及数据库的建立和 TopLink JAR 文件的添加。下面将介绍如何在数据库表中添加所需的货币数据。我们将在建立 Rails 项目的时候添加所需的 TopLink JAR 文件。

需要遵循以下步骤配置数据库:

  • 创建一个名称为 CURRENCY 的表。
  • 在 CURRENCY 表中创建三个字符串(或 VARCHAR)列:Country、Currency 和 Name.
  • 在表中填入一些数据。比如说,可以在其中添加三种货币或更多:"USA"、"Dollar"、"USD";"Czech Republic"、"Koruna"、"CZK";"Norway"、"Krone"、"NOK".

还可以通过设置 NetBeans 使它能够访问数据库表。更确切地说,如果需要的话,可以为数据库配置一个 JDBC 驱动程序并在 Services 窗口中添加一个数据源。

比如说,下面的 SQL 代码将在一个叫做 SAMPLE 的 Derby 数据库中创建一个 CURRENCY 表(用户名和密码为 APP/APP)。如果希望使用相同的 SAMPLE 数据库,您可以在 IDE 中执行这段 SQL 代码并创建表(在此之前需要先连接 SAMPLE 数据库)。使用 Tools->Java DB Database->Create Database 操作可以创建自己的 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 项目。首先,创建一个 Java Desktop 应用程序(实际上是一个 Swing 应用程序),然后选择数据库绑定选项。根据向导的提示将 Money 项目连接到数据源(在本例中为 Derby 示例数据库中的 CURRENCY 表)。只需一些简单的操作使创建了一个功能完整的数据库 CRUD 应用程序。

图 1:创建一个桌面数据库应用程序 Money

单击查看大图

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

单击查看大图

运行 Money 应用程序(右键单击该项目并选择 Run),您将看到类似下图的界面。使用 Ctrl+Q 组合键退出应用程序。

图 3:Money 应用程序

编辑 Java 项目

首先,检查生成的 Java 类;尤其是 Currency.java 类。下面是查看项目时可以使用的一些技巧。

在 Projects 窗口中,展开项目的 Source Packages->money 节点,然后双击 Currency.java 在源代码编辑器中打开该文件。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; 

任务列表

IDE 将自动维护一个任务列表(Task List),用于显示各种编译错误和警告等等。查看任务列表的方法是使用 Ctrl+6 组合键。

图 6:任务列表

检查 Currency 源代码。我们注意到其中包含一些 Java Persistence API 注释。这些注释都标以 (@) 符号,作用是指示与数据库列的绑定。例如,与数据库列的绑定将使用 @Column 符号+列名和 Java 变量的形式,如:@Column(name="COUNTRY") private String country;

创建一个 Java 类访问数据库列

我们需要创建一个新的 Java 类 CurrencyLookup,该类用于访问这些 Java Persistence 实体,即数据库列。然后,Rails 应用程序将调用这个 CurrencyLookup 类,以获取数据库中的货币列表。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 并且包名为 money。如果不是,则将这些字段设置为相应的值。)IDE 将创建一个 CurrencyLookup.java 类并将它放在 Source Packages->money 节点下面。
  3. 编写返回所有货币列表的方法。IDE 的功能(比如说代码完成、修复导入等)可以提供帮助。首先,在 CurrencyLookup 类中键入 pu (表示 public),然后按下 Ctrl+Space 组合键。我们发现 IDE 会自动完成剩下的文本。(注意,此处所使用的快捷键组合适用于 Windows 平台,在其他平台上可能会有所不同。有关特定环境的快捷键信息,请参阅 Help->Keyboard Shortcuts 文件。)

    图 7:代码完成

  4. 键入 List<Cu,然后按下 Ctrl+K 组合键完成 Currency 类名。IDE 将使用 CurrencyLookup 作为完全名称,因此需要删除 Lookup

    图 8:类名完成

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

更多源代码编辑技巧

下面列出了其他一些源代码编辑技巧:

  • 使用 Editor 窗口的上下文菜单 Fix Imports 导入任何丢失的类。
  • 使用 Alt+Enter 组合键查看方法丢失的成分提示。
  • 编辑某个方法的正文时,按下回车键插入匹配的右括号(})。
  • 快速替换单词的方法:将光标放在单词上,然后按下 Ctrl+R 组合键并输入新文本。

完成 CurrencyLookup 查询之后,可以根据需要对它进行测试。使用 Tools->Create JUnit Test 功能,或者使用快捷键组合 Ctrl+Shift+U。这样将生成一个主干 CurrencyLookupTest 类。您可以删除伪代码并添加一行 assertFalse 代码用于测试。比如说,可以添加以下代码测试从数据库返回的数据不为空:assertFalse("contains data", new CurrencyLookup().getAll().isEmpty());。然后使用 Shift+F6 组合键运行测试。

编写 Rails 应用程序

接下来,我们将创建 Rails 应用程序。该应用程序将访问 Money 应用程序的 Java 代码。首先,需要执行一些琐碎的建立工作,包括构建 Money 项目和在 Rails 项目中添加一些 JAR 文件。

创建和配置 Rails 项目

  1. 首先,确定已经构建 Money Java 桌面应用程序。选择项目上下文菜单中的 Clean 和 Build 功能,或者按下 Shift+F11 组合键。
  2. 选择 Ruby->Ruby on Rails 创建一个新的 Ruby on Rails 项目。接受向导的默认设置,IDE 将生成一个 Rails 项目。(如果本机已经安装了 C Ruby,那么向导将要求您选择一种 Ruby 解释程序。应该选择绑定的 JRuby 解释程序。)

    图 9:创建 Rails 项目

    单击查看大图

  3. 接下来,为 Rails 项目设置一些 Java 属性。特别是,我们需要为 Java Persistence API 添加一些 TopLink JAR 文件,并为 Money Java 桌面应用程序添加一些 JAR 文件。(Money.jar 文件位于 Money 项目的 /dist 目录。)右键单击 Rails 项目节点并选择 Properties。在类别中选择 Java,然后单击 Add JAR/Folder 按钮。导航到三个 JAR 文件并添加它们。一定要添加 toplink-essentials-agent.jartoplink-essentials.jar,这两个文件都位于 NetBeans 安装的 java1/modules/ext/toplink/ 目录。没有必要在这个项目中编辑 Rails 的 config/database.yml 文件,因为 Rails 应用程序将使用 Java 代码执行数据库查询操作。

    图 10:添加 JAR 文件

在 Rails 项目中添加货币查询功能

下面将修改生成的 Rails 项目,让它使用 Money Java 项目中的货币查询代码。

  1. 首先,运行 Rails 项目在浏览器中打开默认的空白 Rails 页面。编辑默认 URL 使它指向应用程序。比如说,如果默认 URL 为 http://localhost:3001/,那么可以在后面附加 /money/list。浏览器将显示一个路由器选择错误消息。完成所有代码之后(需要添加一个动作以响应这个 URL),应用程序将在浏览器中正常运行。
  2. 使用 Rails 代码生成程序创建一个 Money 控制器和一个列表视图。在 Rails 项目的上下文菜单中,选择 Generate。在 Rails Generator 对话框中,在 Generate 字段中选择 controller,并在 Name 字段和 View 字段中分别填入 moneylist。然后单击 OK 按钮。

图 11:生成 Money 控制器

生成的 money 控制器将在 Editor 窗口中打开。在控制器中添加代码,使应用程序能够访问 Java 代码(需要 'java')。并添加 CurrencyLookup Java 类(include_class 'money.CurrencyLookup')。完成这些操作之后,您可以像调用其他类一样调用 Money 项目 CurrencyLookup Java 类。还需注意,IDE 支持特定于 Ruby 和 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

建立视图

接下来,我将介绍如何生成格式良好的表用于显示数据中的三列数据。此外,我还将演示一些 IDE Ruby 快捷操作。

  1. 打开为 MoneyController 类生成的列表视图。可以使用 Navigate->Goto Rails Action/View 功能或使用 Ctrl+Shift+A 组合键。list.rhtml 文件或 Money#list 视图将在 Editor 窗口中打开。
  2. 在表的主干代码中插入列表视图。要快速完成此操作,可以键入 table 并按下 Tab 键。IDE 将在 HTML 中添加表行和单元格。

    图 12:使用 Tab 快捷键

     

  3. 选择表行 (<tr>) 块并按下 Alt+Enter 键。我们希望代码迭代货币列表,因此可以在表行外部使用一个 for 循环。可以使用 Alt+Enter 快捷键显示快速修复选项,该选项为一个电灯泡图标。选择 Surround with for 选项,然后按下回车键。

    图 13:使用 Alt+Enter 快捷键

  4. 现在,修改 for 循环的参数,使它匹配货币数据。使用 Tab 键在这些参数之间切换。调用循环变量 c(而不是 f),并将 @field 修改为 @list。使用代码完全快捷键在行标记(<tr></tr>)中添加额外的表格单元标记(<td></td>)。

    图 14:使用代码完成功能添加 HTML 标记

  5. 在表格单元标记中为 Ruby 表达式插入代码模板。键入 re 然后按下 Tab 键。IDE 将插入 Ruby 表达式 <%= %>

    图 15:插入 Ruby 表达式

  6. 建立三个这样的表格单元块,每个单元块中都包含 <%= %> Ruby 表达式。在 <%= %> 块中插入货币列的名称(c.countryc.codec.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 货币表格

结束语

本文演示了如何将 Ruby on Rails 应用程序与 Java 桌面应用程序结合在一起。Java 桌面应用程序中的代码用于访问数据库表,而Ruby 应用程序将访问 Java 数据库表的访问代码,以检索并显示数据。

本文还演示了开发 Java 和 Ruby 应用程序时可用的一系列快捷键操作。

未来展望

 

  • 查阅 Ruby and Rails Learning Trail,了解关于 NetBeans IDE 支持 Ruby 的更多信息。
  • 要获得支持,以及 NetBeans Ruby 开发特性的最近更新,请加入 users &#x40 ruby.netbeans.org 和 dev &#x40 ruby.netbeans.org 邮件列表。
  • 要提交自己的 NetBeans Ruby 教程,请访问 NetBeans Community Docs 页面。