首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JRuby:結合 Java 與 RoR 之長處

     編輯:Java 相關知識

前言

Rails 正迅速成為輕量級 Web 應用開發領頭羊。有了 JRuby,Rails 望獲得 Java 程式庫與 JVM 的功能、效能及業界認可度。

JRuby 是面向 Ruby、基於 JVM 的解釋器,結合 Ruby 語言簡易性與強大 JVM 執行機制,含與 Java 程式庫全面整合。Rails 徹底加快並簡化 Web 應用開發,但讓人覺得不夠成熟,特別在高端企業級功能方面。Java 平台與其虛擬機、程式庫、應用伺服器在速度、穩定性、功能持續提升,公認是開發高端伺服器應用領先平台。但若 Java 平台不與 Ruby 等新興語言結合,可能落後於潮流趨勢。

JRuby 結合這些技術互補優點,望提高 Ruby 與 Rails 知名度,同時為 Java 平台運行非 Java 語言賦予新角色。

Rails:Java 框架演進方向

慣例優於配置

早期 Java EE 每個組件需大量配置與程式碼。EJB 每個 bean 需多個原始碼與 XML 配置檔,複雜性使 EJB 成重量級開發代名詞,導致 EJB 3 180 度大轉向:追求 POJO bean 冗餘與配置最小化。即使如此,重型 Java EE 應用仍需開發程式碼表示多個軟體層(GUI、業務邏輯、持久層)同一業務物件,並用配置檔粘合。較新的 Seam、Spring 框架用極少配置與程式碼發布業務物件。

Java 框架也向跨 Web 應用多層堆疊標準化整合邁進。早期手寫程式碼從 Servlet 取得 HTML、自建 MVC、用 SQL 而非 JDBC 存取資料庫。後來聚集標籤庫、Struts、Hibernate 等組件。近期 Spring 將大部分功能整合到單一自上而下輕型堆疊。

Rails 從一開始體現簡潔原則:「不要重複自己」與「慣例優於配置」(避免冗餘與有意義預設值為軟體工程古老原則)。框架依簡明慣例推測不同層連接關係。Rails 甚至動態添加屬性反映資料庫欄位:last_name 欄位自動出現 last_name 屬性。特殊情況下仍可用純 Ruby 程式碼或輕量 YAML 格式配置,去除 XML 冗餘括號與結束標籤。

動態與反射機制

Java 框架向反射與元程式設計邁進。Spring 用反射配合依賴注入串連各部分;標準 Java EE 伺服器通常採靜態方法。Hibernate 用動態元程式設計映射,運行時更新位元碼,而早期資料存取框架需開發時生成大量原始碼或位元碼。Hibernate 開發者只能採用高階技術實現。Ruby 中元程式設計是語言有機部分,Rails 運行時不但能動態生成映射,還能生成存取及顯示底層資料庫所需業務層類別定義,盡量減少此需求。

支援開發流程

90 年代末 Java 開發者大量使用 JUnit,但伺服器端應用測試用例編寫總有難度。Spring 生成 Web 應用同時生成測試。Rails 同樣功能,充分利用動態機制與元程式設計支援多種測試:單元、功能、整合測試。

為何在 JVM 上運行 Rails

若正使用 Spring、Hibernate 等 Java 框架,無需改變。但若可靈活選擇下一專案新開發方法,請考慮 Rails。

改用新語言常被視為危險,管理層顧慮風險。JRuby 讓 Rails 更易被管理層接受。在 JVM 上, Rails 成一種 Java 框架。如同 JSP 中非 Java 語言實際同樣用於「Java」Web 框架。

如同 C/C++ 撰寫的作業系統為較抽象語言應用提供基礎設施,Java 平台也為 Ruby 等動態語言扮演「系統軟體」角色,提供基礎設施層支援。現可透過 Java 存取眾多功能。JDBC、JMS 等 API 同類中最佳,許多不可替代的內部或獨立軟體廠商企業資訊系統可透過 Java API 存取。Rails 應用透過 JRuby 可像呼叫 Java 程式碼一樣呼叫現有 Java 程式庫。

JRuby 讓 Rails 應用可與 Java Web 應用在現有 Java EE 應用伺服器上共同運行。此類伺服器擁有強大技術基礎設施。人員與培訓方面通常不缺教育計畫與有經驗開發支援人員。只要運行在 JVM 上,即能獲得近十年 JVM 優化項目帶來的好處。

JVM 擁有比 Ruby 複雜得多的安全模型,為 JRuby on Rails 提供處理 Web 應用常見安全難題工具,含控制各來源 Ruby 腳本。還包含內建國際化支援功能。

向動態語言邁進是向更高抽象機制發展一面。在 JVM 管理環境下而非作業系統層面運行 Ruby 解釋器是向更高抽象層邁出一步。使用 Rails 作為 Web 應用層標準實現機制亦然,只把針對特定應用功能留給開發者。

JRuby 面臨的挑戰

版本號顯示 JRuby 0.9.2 尚未準備好運行生產應用。錯誤待解決;目前 JRuby 速度不如 MRI。搭配 Rails 使用 Java 應用伺服器需非標準適配器 Servlet,建構 WAR 檔需特殊 Ant 腳本,兩者非 JRuby 發行版標準部分。

Rails 處理舊有組件功能特別弱。雖對大多數常見問題支援良好,但缺乏支援替代方案彈性。如 ActiveRecord 假定每個表有名為 id 單一主鍵欄。雖可用鍵欄替換另一名稱,無特殊外掛無法定義多欄鍵。相比之下 Hibernate 等 Java 框架雖簡單情況下開發較慢,但處理極端狀況與舊有程式碼效果好得多。

採用 Rails 面臨主要挑戰在於:是否渴望現有語言與框架統一標準。Rails 適用於此渴望較強烈的新專案與新組織。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved