JRuby 和 Rails让 Ruby 语言融入于 Java 项目
QCon Beijing 2009
骆古道 / Gudao Luo
www.lycom.dewww.hhtong.com
[email protected], @2009, 北京 , 中国 , 08.04.2009
骆古道 / Gudao Luo
● 1983 年毕业于西北工业大学数理力学系● 1988 年国家公派留学德国 Augsburg 大学
从事组合最优化理论学习和研究● 从 90 年代起在德国企业从事于软件工作● 《 JRuby 语言实战技术》作者● 个人博客为“道喜技术日记”
● Ruby 语言的现实● JRuby/Ruby 和 Ruby 语言● Rails 框架主要特点和优势● JRuby 与 Java 项目● Rails 的企业软件开发作用● 重要技术资源
Ruby 语言的现实Apple Mac OS X 10.5 Leopard 系统标准配置
Ruby和Rails
Ruby 语言的现实NetBeans for Ruby
Ruby 语言的现实JRuby是太阳公司投资的开源项目
Ruby 语言的现实MacRuby是苹果公司投资的开源项目
Ruby 语言的现实Ruby:
infoQ
六大社区
之一
Ruby 语言的现实Ruby语言
成为
前十大
程序语言
之一
Ruby 语言的现实Ruby语言图书世界
Ruby 语言的现实真实JRuby软件世界
Ruby 语言的现实真实Rails软件世界
JRuby/Ruby 和 Ruby 语言:基本名称
Ruby语言是一门软件编程语言
JRuby是Ruby语言的Java语言实现
Ruby/CRuby是Ruby语言的C语言实现
JRuby ≈ Ruby
JRuby/Ruby 和 Ruby 语言: Ruby 语言Ruby语言: 动态程序语言
Ruby语言: 100%面向对象程序语言
Ruby语言: 简洁和优美的程序语言
Ruby语言: 一切事情都是对象(Everything is an object)
JRuby/Ruby 和 Ruby 语言: JRuby
● JRuby:集成Java/Ruby语言强大功能● JRuby:比CRuby实现的运行速度更快● JRuby:自然线程● JRuby:支持外来函数接口(FFI)● JRuby:运行于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
Ruby语言 : 简洁和优美的程序语言 (1)
# define a classclass Company; end
# use the class Companyibm = Company.newibm.methods
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'
Ruby语言 : 一切事情都是对象( Everything is an object )
“有、无相生” “天下万物生于有,有生于无” – 老子
ibm.class=> Companyibm.class.superclass=> Objectibm.class.superclass.superclass=> nil
nil.class=> NilClass
Rails 框架主要特点和优势Rails框架: Web软件框架
Rails框架: 数据库持久性框架
Rails框架: MVC(Model-View-Control)框架
Rails框架: DSL(Domain Specific Language)
Rails框架: Ruby实现的Web软件框架
Rails 框架主要特点和优势视图:css, ajax, iphone, html, pdf, xml, json, xls,js, ...
Rails 框架主要特点和优势控制器:access
cache
logic
...
Rails 框架主要特点和优势模型:
migration,validation,status,finder,callbacks,...
JRuby 与 Java 项目● Java 项目向 JRuby 项目迁移● 基于 Java 运行环境下的 JRuby 项目● 基于现有 Java 企业项目的 JRuby 项目● 基于 Java 资源的 JRuby 项目● 利用 JRuby 资源开发 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 。。。
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
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
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
JRuby 与 Java 项目: JRuby on Android
JRuby 与 Java 项目: JRuby on Android实例演示
● Android on Mac OS X 10.5.6● JRuby on Android
● 创建 Android 应用实例● 运行 JRuby 程序
Rails 的企业软件开发作用● 基于 Ruby 语言的数据库迁移技术● 基于 Ruby 语言的测试框架 Cucumber
● 基于 Ruby 语言的易和快 PDF 生成库Prawn
● 基于 Ruby 语言的。。。
Rails 框架优势实例:数据库迁移技术 (1)
Rails 迁移: 使用Ruby语言实现Rails 迁移: 不重复你自己(DRY)Rails 迁移: 支持数据/模式迁移Rails 迁移: 允许嵌入模型逻辑于数据迁移(而SQL 脚
本难以做到)
Rails 迁移: 独立于数据库(而 SQL 脚本不独立)
Rails 迁移: 允许嵌入SQL语句(例如存储过程或约束)(而有些 ORM 并不支持)
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
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# ...
Rails 框架优势实例:测试框架 Cucumber(1)
Cucumber是跨计算机语言的代码测试工具
Cucumber是使用本地化语言的代码测试工具
Cucumber是集成多种测试工具于一体的工具
Cucumber彻底分离测试描述(文字工作者)与描述实现(软件工作者)
Cucumber更加人性化,更加语言化,更加简单化
Rails 框架优势实例:测试框架 Cucumber(2)功能 :管理帖子 为了能够控制“帖子MVC” 作为软件普通用户 我要完成“帖子MCV”创建和删除帖子的功能
场景 : 创建一个新的帖子 假如 我已经在创建新帖子页面 当 我在输入框 <post_title>中输入内容 <lycom.de是什么网站 > 而且 我在输入框 <post_body>中输入内容 <lycom.de是一个 Ruby/Rails技术新闻博客 > 而且 我点击按钮 <Create> 那么 我应该看到 <lycom.de是什么网站 > 而且 我应该看到 <lycom.de是一个 Ruby/Rails技术新闻博客 > 场景 : 删除第一个帖子 假如 存在 <4>个帖子 当 我删除第一个帖子 那么 还应该有 <3>个帖子
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
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
重要技术资源 (1)JRuby/Ruby/Rails 官方网站
● http://www.ruby-lang.org
● http://rubyonrails.org/
● http://jruby.codehaus.org/
重要技术资源 (2)JRubyRuby/Rails 博客
● http://www.rubyinside.com/
● htp://asciicasts.com/ ● htp://ryandaigle.com/ ● htp://www.jrubyinside.com/
视频 Rails 博客 : http://railscasts.com/
重要技术资源 (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