corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

混合 Java 和 Ruby 应用程序

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

内容

Content on this page applies to NetBeans IDE 6.0
本文需求
创建 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

Create database application

单击查看大图

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

Connect project to datasource

单击查看大图

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

图 3:Money 应用程序

Money Applicaton

编辑 Java 项目

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

在 Projects 窗口中,展开项目的 Source Packages->money 节点,然后双击 Currency.java 在源代码编辑器中打开该文件。Editor 窗口将显示完整的类和类的代码。

类成员

使用 Ctrl+F12 组合键查看 Currency 类的成员列表。您可以使用 Members 对话框快速选择要查看的类。

图 4:Currency.java 类的成员

Class members

比如说,要查看类的定义,可以在 Filter 栏中输入 Cur

图 5:Currency 类的定义

Curency Class definition

注意:确保生成的 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:任务列表

Task List display

检查 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:代码完成

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

    图 8:类名完成

    Code completion
  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 项目

    Create Rails project

    单击查看大图

  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 文件

    Include JAR files

在 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 控制器

Generate mondey controller

生成的 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 中添加表行和单元格。
  3. 图 12:使用 Tab 快捷键

    Using Tab shortcut

     

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

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

    Using code completion to add HTML tags
  8. 在表格单元标记中为 Ruby 表达式插入代码模板。键入 re 然后按下 Tab 键。IDE 将插入 Ruby 表达式 <%= %>
  9. 图 15:插入 Ruby 表达式

    Inserting Ruby expressions
  10. 建立三个这样的表格单元块,每个单元块中都包含 <%= %> Ruby 表达式。在 <%= %> 块中插入货币列的名称(c.countryc.codec.name)。完成之后的代码如下所示:
  11. <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>
  12. 使用 Shift+F6 组合键在浏览器中查看表格。您将看到类似下图的表格,表格内容为您在数据库中添加的数据:

图 16:显示 Ruby 货币表格

Displaying the currency table via Ruby project

结束语

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

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


未来展望




>> 更多 NetBeans Ruby 文档

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems