41
JRuby Rails Ruby 语言融入于 Java 项目 QCon Beijing 2009 骆古道 / Gudao Luo www.lycom.de www.hhtong.com [email protected], @2009, 北京 , 中国 , 08.04.2009

J Ruby和Rails 让Ruby语言融入Java项目

Embed Size (px)

Citation preview

Page 1: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 和 Rails让 Ruby 语言融入于 Java 项目

QCon Beijing 2009

骆古道 / Gudao Luo

www.lycom.dewww.hhtong.com

[email protected], @2009, 北京 , 中国 , 08.04.2009

Page 2: J Ruby和Rails 让Ruby语言融入Java项目

骆古道 / Gudao Luo

● 1983 年毕业于西北工业大学数理力学系● 1988 年国家公派留学德国 Augsburg 大学

从事组合最优化理论学习和研究● 从 90 年代起在德国企业从事于软件工作● 《 JRuby 语言实战技术》作者● 个人博客为“道喜技术日记”

Page 3: J Ruby和Rails 让Ruby语言融入Java项目

● Ruby 语言的现实● JRuby/Ruby 和 Ruby 语言● Rails 框架主要特点和优势● JRuby 与 Java 项目● Rails 的企业软件开发作用● 重要技术资源

Page 4: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实Apple Mac OS X 10.5 Leopard 系统标准配置

Ruby和Rails

Page 5: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实NetBeans for Ruby

Page 6: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实JRuby是太阳公司投资的开源项目

Page 7: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实MacRuby是苹果公司投资的开源项目

Page 8: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实Ruby:

infoQ

六大社区

之一

Page 9: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实Ruby语言

成为

前十大

程序语言

之一

Page 10: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实Ruby语言图书世界

Page 11: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实真实JRuby软件世界

Page 12: J Ruby和Rails 让Ruby语言融入Java项目

Ruby 语言的现实真实Rails软件世界

Page 13: J Ruby和Rails 让Ruby语言融入Java项目

JRuby/Ruby 和 Ruby 语言:基本名称

Ruby语言是一门软件编程语言

JRuby是Ruby语言的Java语言实现

Ruby/CRuby是Ruby语言的C语言实现

JRuby ≈ Ruby

Page 14: J Ruby和Rails 让Ruby语言融入Java项目

JRuby/Ruby 和 Ruby 语言: Ruby 语言Ruby语言: 动态程序语言

Ruby语言: 100%面向对象程序语言

Ruby语言: 简洁和优美的程序语言

Ruby语言: 一切事情都是对象(Everything is an object)

Page 15: J Ruby和Rails 让Ruby语言融入Java项目

JRuby/Ruby 和 Ruby 语言: JRuby

● JRuby:集成Java/Ruby语言强大功能● JRuby:比CRuby实现的运行速度更快● JRuby:自然线程● JRuby:支持外来函数接口(FFI)● JRuby:运行于Java虚拟机● 。。。

Page 16: J Ruby和Rails 让Ruby语言融入Java项目

Ruby语言: 100%面向对象程序语言

- 1.class # Fixnum

- 3.14.class # Float

- [1, 'Ruby', :name].class # Array

- {:id => 11, :name => 'Luo' }.class # Hash

- (class Company;end).class # NilClass

Page 17: J Ruby和Rails 让Ruby语言融入Java项目

Ruby语言 : 简洁和优美的程序语言 (1)

# define a classclass Company; end

# use the class Companyibm = Company.newibm.methods

Page 18: J Ruby和Rails 让Ruby语言融入Java项目

Ruby语言 : 简洁和优美的程序语言 (2)# define a class Companyclass Company attr_accessor :id def name; @name; end def name=(name); @name=name; endend

# use the class Companyibm = Company.newibm.id = 11; ibm.name = 'IBM'

Page 19: J Ruby和Rails 让Ruby语言融入Java项目

Ruby语言 : 一切事情都是对象( Everything is an object )

“有、无相生” “天下万物生于有,有生于无” – 老子

ibm.class=> Companyibm.class.superclass=> Objectibm.class.superclass.superclass=> nil

nil.class=> NilClass

Page 20: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架主要特点和优势Rails框架: Web软件框架

Rails框架: 数据库持久性框架

Rails框架: MVC(Model-View-Control)框架

Rails框架: DSL(Domain Specific Language)

Rails框架: Ruby实现的Web软件框架

Page 21: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架主要特点和优势视图:css, ajax, iphone, html, pdf, xml, json, xls,js, ...

Page 22: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架主要特点和优势控制器:access

cache

logic

...

Page 23: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架主要特点和优势模型:

migration,validation,status,finder,callbacks,...

Page 24: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目● Java 项目向 JRuby 项目迁移● 基于 Java 运行环境下的 JRuby 项目● 基于现有 Java 企业项目的 JRuby 项目● 基于 Java 资源的 JRuby 项目● 利用 JRuby 资源开发 Java 项目

Page 25: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目● JRuby on Android● JRuby on Swing● JRuby on Jackrabbit (JCR=Java Content Repository)

● JRuby on Hibernate (ORM, Ribs)

● JRuby on JBoss / GlassFish (Java Application Server)

● JRuby on 。。。

Page 26: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目: JRuby 实例演示 (1) # Import Java packagesinclude Java

import javax.swing.JFrameframe = JFrame.new("Hello Swing")

# Show frameframe.set_default_close_operation(JFrame::EXIT_ON_CLOSE)frame.packframe.visible = true

Page 27: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目: JRuby 实例演示 (2) # Create a button for the framebutton = javax.swing.JButton.new(" 点击我 !")

# Add the button to the frameframe.get_content_pane.add(button)frame.visible = true

Page 28: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目: JRuby 实例演示 (3) # Add an action for the buttonbutton.add_action_listener do |evt| javax.swing.JOptionPane.showMessageDialog(nil, <<EOS)<html> 来自 <b><u>JRuby</u></b> 问候! <br>Button '#{evt.getActionCommand()}' clicked.EOSend

Page 29: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目: JRuby on Android

Page 30: J Ruby和Rails 让Ruby语言融入Java项目

JRuby 与 Java 项目: JRuby on Android实例演示

● Android on Mac OS X 10.5.6● JRuby on Android

● 创建 Android 应用实例● 运行 JRuby 程序

Page 31: J Ruby和Rails 让Ruby语言融入Java项目

Rails 的企业软件开发作用● 基于 Ruby 语言的数据库迁移技术● 基于 Ruby 语言的测试框架 Cucumber

● 基于 Ruby 语言的易和快 PDF 生成库Prawn

● 基于 Ruby 语言的。。。

Page 32: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架优势实例:数据库迁移技术 (1)

Rails 迁移: 使用Ruby语言实现Rails 迁移: 不重复你自己(DRY)Rails 迁移: 支持数据/模式迁移Rails 迁移: 允许嵌入模型逻辑于数据迁移(而SQL 脚

本难以做到)

Rails 迁移: 独立于数据库(而 SQL 脚本不独立)

Rails 迁移: 允许嵌入SQL语句(例如存储过程或约束)(而有些 ORM 并不支持)

Page 33: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架优势实例:数据库迁移技术 (2)class CreateCustomers < ActiveRecord::Migration def self.up create_table :customers do |t| t.string :name, :limit => 30, :null => false t.integer :age t.binary :photo, :limit => 2.megabytes t.timestamps end Customer.create :name => "David", :age => "32" end

def self.down; drop_table :customers; endend

Page 34: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架优势实例:数据库迁移技术 (3)class ChangeAlbumYearToInteger < ActiveRecord::Migration

def self.up add_column :albums, :year_int, :integer, :limit => 4 Album.reset_column_information say_with_time "Updating albums" do albums = Album.find_all albums.each do |a| a.update_attribute(:year_int, a.year.to_i) say "#{a.release_name} updated!", true end end# ...

Page 35: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架优势实例:测试框架 Cucumber(1)

Cucumber是跨计算机语言的代码测试工具

Cucumber是使用本地化语言的代码测试工具

Cucumber是集成多种测试工具于一体的工具

Cucumber彻底分离测试描述(文字工作者)与描述实现(软件工作者)

Cucumber更加人性化,更加语言化,更加简单化

Page 36: J Ruby和Rails 让Ruby语言融入Java项目

Rails 框架优势实例:测试框架 Cucumber(2)功能 :管理帖子 为了能够控制“帖子MVC” 作为软件普通用户 我要完成“帖子MCV”创建和删除帖子的功能 

场景 : 创建一个新的帖子 假如 我已经在创建新帖子页面 当 我在输入框 <post_title>中输入内容 <lycom.de是什么网站 > 而且 我在输入框 <post_body>中输入内容 <lycom.de是一个 Ruby/Rails技术新闻博客 > 而且 我点击按钮 <Create> 那么 我应该看到 <lycom.de是什么网站 > 而且 我应该看到 <lycom.de是一个 Ruby/Rails技术新闻博客 > 场景 : 删除第一个帖子 假如 存在 <4>个帖子 当 我删除第一个帖子 那么 还应该有 <3>个帖子

Page 37: J Ruby和Rails 让Ruby语言融入Java项目

Rails 实例演示 (1) # create rails application in system shellrails demo && cd demo./script/generate scaffold blog title:string body:textrake db:migrate./script/server

# use the rails application in browseropen http://0.0.0.0:3000

# debug, test and use the rails application in rails shell./script/console

Page 38: J Ruby和Rails 让Ruby语言融入Java项目

Rails 实例演示 (2) # install rails edge current version 2.3mkdir -p myapp/vendor && cd myappgit clone git://github.com/rails/rails.git vendor/railsruby vendor/rails/railties/bin/rails -v

# create a rails generator file: rails_template.rbgenerate(:scaffold, "blog title:string body:text")rake("db:migrate")

# create rails 2.3 application with rails templateruby vendor/rails/railties/bin/rails . -m rails_template.rb

Page 39: J Ruby和Rails 让Ruby语言融入Java项目

重要技术资源 (1)JRuby/Ruby/Rails 官方网站

● http://www.ruby-lang.org

● http://rubyonrails.org/

● http://jruby.codehaus.org/

Page 40: J Ruby和Rails 让Ruby语言融入Java项目

重要技术资源 (2)JRubyRuby/Rails 博客

● http://www.rubyinside.com/

● htp://asciicasts.com/ ● htp://ryandaigle.com/ ● htp://www.jrubyinside.com/

视频 Rails 博客 : http://railscasts.com/

Page 41: J Ruby和Rails 让Ruby语言融入Java项目

重要技术资源 (3)

Ruby/JRuby/Rails 图书● 《应用 Rails 进行敏捷 Web 开发》 http://www.dearbook.com.cn/book/109115

● 《 Programming Ruby 中文版》 http://www.dearbook.com.cn/book/109114

● 《 JRuby 语言实战技术》 http://www.china-pub.com/39945