j ruby和rails 让ruby语言融入java项目
TRANSCRIPT
![Page 1: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/1.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/2.jpg)
骆古道 / Gudao Luo
● 1983 年毕业于西北工业大学数理力学系● 1988 年国家公派留学德国 Augsburg 大学
从事组合最优化理论学习和研究● 从 90 年代起在德国企业从事于软件工作● 《 JRuby 语言实战技术》作者● 个人博客为“道喜技术日记”
![Page 3: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/3.jpg)
● Ruby 语言的现实● JRuby/Ruby 和 Ruby 语言● Rails 框架主要特点和优势● JRuby 与 Java 项目● Rails 的企业软件开发作用● 重要技术资源
![Page 4: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/4.jpg)
Ruby 语言的现实Apple Mac OS X 10.5 Leopard 系统标准配置
Ruby和Rails
![Page 5: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/5.jpg)
Ruby 语言的现实NetBeans for Ruby
![Page 6: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/6.jpg)
Ruby 语言的现实JRuby是太阳公司投资的开源项目
![Page 7: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/7.jpg)
Ruby 语言的现实MacRuby是苹果公司投资的开源项目
![Page 8: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/8.jpg)
Ruby 语言的现实Ruby:
infoQ
六大社区
之一
![Page 9: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/9.jpg)
Ruby 语言的现实Ruby语言
成为
前十大
程序语言
之一
![Page 10: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/10.jpg)
Ruby 语言的现实Ruby语言图书世界
![Page 11: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/11.jpg)
Ruby 语言的现实真实JRuby软件世界
![Page 12: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/12.jpg)
Ruby 语言的现实真实Rails软件世界
![Page 13: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/13.jpg)
JRuby/Ruby 和 Ruby 语言:基本名称
Ruby语言是一门软件编程语言
JRuby是Ruby语言的Java语言实现
Ruby/CRuby是Ruby语言的C语言实现
JRuby ≈ Ruby
![Page 14: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/14.jpg)
JRuby/Ruby 和 Ruby 语言: Ruby 语言Ruby语言: 动态程序语言
Ruby语言: 100%面向对象程序语言
Ruby语言: 简洁和优美的程序语言
Ruby语言: 一切事情都是对象(Everything is an object)
![Page 15: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/15.jpg)
JRuby/Ruby 和 Ruby 语言: JRuby
● JRuby:集成Java/Ruby语言强大功能● JRuby:比CRuby实现的运行速度更快● JRuby:自然线程● JRuby:支持外来函数接口(FFI)● JRuby:运行于Java虚拟机● 。。。
![Page 16: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/16.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/17.jpg)
Ruby语言 : 简洁和优美的程序语言 (1)
# define a classclass Company; end
# use the class Companyibm = Company.newibm.methods
![Page 18: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/18.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/19.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/20.jpg)
Rails 框架主要特点和优势Rails框架: Web软件框架
Rails框架: 数据库持久性框架
Rails框架: MVC(Model-View-Control)框架
Rails框架: DSL(Domain Specific Language)
Rails框架: Ruby实现的Web软件框架
![Page 21: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/21.jpg)
Rails 框架主要特点和优势视图:css, ajax, iphone, html, pdf, xml, json, xls,js, ...
![Page 22: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/22.jpg)
Rails 框架主要特点和优势控制器:access
cache
logic
...
![Page 23: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/23.jpg)
Rails 框架主要特点和优势模型:
migration,validation,status,finder,callbacks,...
![Page 24: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/24.jpg)
JRuby 与 Java 项目● Java 项目向 JRuby 项目迁移● 基于 Java 运行环境下的 JRuby 项目● 基于现有 Java 企业项目的 JRuby 项目● 基于 Java 资源的 JRuby 项目● 利用 JRuby 资源开发 Java 项目
![Page 25: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/25.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/26.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/27.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/28.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/29.jpg)
JRuby 与 Java 项目: JRuby on Android
![Page 30: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/30.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/31.jpg)
Rails 的企业软件开发作用● 基于 Ruby 语言的数据库迁移技术● 基于 Ruby 语言的测试框架 Cucumber
● 基于 Ruby 语言的易和快 PDF 生成库Prawn
● 基于 Ruby 语言的。。。
![Page 32: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/32.jpg)
Rails 框架优势实例:数据库迁移技术 (1)
Rails 迁移: 使用Ruby语言实现Rails 迁移: 不重复你自己(DRY)Rails 迁移: 支持数据/模式迁移Rails 迁移: 允许嵌入模型逻辑于数据迁移(而SQL 脚
本难以做到)
Rails 迁移: 独立于数据库(而 SQL 脚本不独立)
Rails 迁移: 允许嵌入SQL语句(例如存储过程或约束)(而有些 ORM 并不支持)
![Page 33: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/33.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/34.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/35.jpg)
Rails 框架优势实例:测试框架 Cucumber(1)
Cucumber是跨计算机语言的代码测试工具
Cucumber是使用本地化语言的代码测试工具
Cucumber是集成多种测试工具于一体的工具
Cucumber彻底分离测试描述(文字工作者)与描述实现(软件工作者)
Cucumber更加人性化,更加语言化,更加简单化
![Page 36: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/36.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/37.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/38.jpg)
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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/39.jpg)
重要技术资源 (1)JRuby/Ruby/Rails 官方网站
● http://www.ruby-lang.org
● http://rubyonrails.org/
● http://jruby.codehaus.org/
![Page 40: J Ruby和Rails 让Ruby语言融入Java项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/40.jpg)
重要技术资源 (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项目](https://reader034.vdocuments.net/reader034/viewer/2022052310/55592faed8b42a543d8b489c/html5/thumbnails/41.jpg)
重要技术资源 (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