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

GlassFish v3 實戰:Rails 應用與 Java EE Servlet 共部署整合指南

     編輯:Java 相關知識

背景:多語言共存的企業級應用服務器需求

GlassFish v3 引入模塊化內核,支援非 Java EE 容器(如 JRuby/Rails)與標準 Servlet/JSP/EJB 共同運行,消除了以往需 Warbler 打包 WAR 或 Goldspike 插件的繁瑣步驟,實現原生級 Rails 部署。

環境準備與 Rails 應用創建


# 1. 安裝 JRuby 1.1 (含 Rails)
# 2. 創建 Rails 應用
~/testbed/jruby-1.1/samples/rails $ ../../bin/jruby -S rails railsee3
# 生成標準 Rails 目錄結構

整合 Servlet:標準 Web 應用結構植入

1. 添加 Web 部署描述符

在 Rails 根目錄創建 WEB-INF/web.xml:


<web-app>
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>server.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

2. GlassFish 專用描述符 WEB-INF/sun-web.xml


<sun-web-app error-url="">
  <context-root>/servlet</context-root>
  <class-loader delegate="true"/>
</sun-web-app>

3. 放入 Servlet 實現 JAR


mkdir WEB-INF/lib
# 將編譯好的 HelloServlet.jar 複製至 WEB-INF/lib

配置 GlassFish v3 啟用 JRuby


# 編輯 config/asenv.conf 設置 JRUBY_HOME
JRUBY_HOME="/Users/arungup/.../jruby-1.1"

部署與驗證


# 部署 Rails 應用 (目錄即為應用)
~/testbed/glassfish/v3/p2b9/glassfish/bin/asadmin deploy --force=true railsee3
# 輸出: railsee3 deployed successfully

訪問 Servlet:https://localhost:8080/servlet/hello 顯示 "Hello World"。
Servlet 默認頁面

帶參數訪問:https://localhost:8080/servlet/hello?name=Duke 顯示 "Hello Duke"。
Servlet 參數頁面

深度整合:Rails Controller 呼叫 Servlet 服務

1. 生成 Controller 與 View


~/testbed/jruby-1.1/samples/rails/railsee3 $ ../../../bin/jruby script/generate controller home index

2. 修改 Controller 呼叫 Servlet


# app/controllers/home_controller.rb
class HomeController < ApplicationController
  include Java
  def index
    url = java.net.URL.new("https://localhost:8080/servlet/hello")
    conn = url.open_connection
    reader = java.io.BufferedReader.new(java.io.InputStreamReader.new(conn.get_input_stream))
    @servlet_output = ""
    while (line = reader.read_line) != nil
      @servlet_output << line
    end
    reader.close
  end
end

3. 修改 View 顯示結果


# app/views/home/index.html.erb
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<%= @servlet_output %>

4. 重新部署並訪問 Rails 路由


asadmin deploy --force=true railsee3

訪問 https://localhost:8080/railsee3/home/index,頁面顯示 Rails 標題及 Servlet 返回內容。
Rails 整合 Servlet 效果圖

關鍵技術點總結

  • 零打包部署:直接部署 Rails 目錄,無需 Warbler 生成 WAR。
  • 共享 JVM:JRuby 運行於 GlassFish 同一 JVM,Java 類可直接在 Ruby 代碼中通過 include Java 調用。
  • 標準 Servlet 協議:Rails 通過 HTTP 呼叫同容器內 Servlet,亦可共享 Session、數據源等容器資源。
  • 類加載隔離:sun-web.xml 中 delegate="true" 讓 Web 應用優先使用父類加載器,便於訪問容器級庫。

適用場景與遷移建議

  • 存量 Java EE 系統逐步引入 Ruby/Rails 新功能模塊。
  • 團隊技術棧多元化,需單一應用服務器統一部署運維。
  • 遷移至現代雲原生架構時,可考慮將 Rails 服務拆分為獨立微服務,通過 gRPC/REST 通訊,降低運行時耦合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved