Little-G:為您的應用伺服器瘦身

來源:互聯網
上載者:User
您是否常常構建簡單的應用程式,但是必須用重量級應用伺服器來部署它們?您是否知道在 Java Platform, Enterprise Edition(Java EE)眾多的特性中有百分之幾是我們常用的?我估計只有 10%。Apache Geronimo 是一種穩定、開源的 Java 2 Platform, Enterprise Edition(J2EE) 1.4 認證應用伺服器;但是它的特性過於豐富繁冗,規模過於龐大。為了給 Web 應用程式構建一種簡單、輕量但有用的容器,Apache 的開發人員建立了 Apache Geronimo Little-G,這是原始 Geronimo 應用伺服器的簡化版本。儘管 Little-G 不是 J2EE 認證的伺服器,但是它具備最常用的符合 J2EE 規範的特性,包括一個完整的 Web 容器、交易管理員、資料庫連通性。在本文中,我們將研究 Little-G 的特性並學習如何在其上部署和運行 Web 應用程式。

Geronimo 平台

在討論 Little-G 和 Geronimo 時,必須解釋底層的體繫結構。Geronimo 平台具有一種模組化的體繫結構。核心平台是一個用於單元服務元件 GBean 的運行時容器。相關的 GBean 被分組為可部署的單元,這樣的單元稱為配置(configuration)。Little-G 伺服器使用 Geronimo 平台的模組化體繫結構構建一個輕量級伺服器。圖 1 給出了 Little-G 的內部結構。


圖 1. Geronimo 平台體繫結構

可 以通過在 Geronimo 平台上部署配置來添加新的服務和功能。Geronimo 核心和基本 Geronimo 系統配置構成了所有 Geronimo 伺服器的核心平台。Little-G 是在這個核心之上構建的,添加了一個 Remote Method Invocation(RMI)命名配置,它提供命名服務功能。另外,RMI 命名配置提供一個線程池和外掛程式安裝程式。Java EE 伺服器和 Java EE 安全配置以 RMI 命名配置作為它們的父配置。Java EE 伺服器配置實現 Java EE 管理對象,比如伺服器域和伺服器對象。Java EE 安全配置實現基於 Java Authentication and Authorization Service(JAAS)的安全服務和 JAAS 登入模組,並建立一個基於設定檔的安全域,可以從使用者應用程式訪問這個安全域。在 Java EE 伺服器上構建了事務配置,它提供交易處理功能。最後,Apache Tomcat 配置在 Geronimo 中添加了 Tomcat Web 容器。

除了 圖 1 所示的配置之外,Little-G 還包含以下部署器和配置:

  • geronimo/geronimo-gbean-deployer/1.1.1/car 配置 —— 處理 Little-G 模組的部署
  • geronimo/j2ee-deployer/1.1.1/car 配置 —— 處理 Web 應用程式的 Java EE 部署
  • geronimo/tomcat-deployer/1.1.1/car 配置 —— 將 Web 應用程式部署到 Tomcat Web 容器
  • 三個配置:
    • geronimo/unavailable-ejb-deployer/1.1.1/car —— 處理 Enterprise JavaBeans(EJB)停用問題
    • geronimo/unavailable-webservices-deployer/1.1.1/car —— 處理 Web 服務停用問題
    • geronimo/unavailable-client-deployer/1.1.1/car —— 處理客戶機應用程式部署器停用問題




Little-G 服務和特性

Little-G 提供以下服務和特性:

  • 一個基於 Tomcat 或 Jetty 的 Web 容器
  • 一個 Java EE 基本伺服器
  • 一個基於 JAAS 的安全實現
  • 一個基於 RMI 的命名服務
  • 一個可以部署 GBean 配置的部署器
  • 一個可以部署 Web 應用程式的部署器
  • 通過 TranQL 代碼實現的 JDBC 連通性,TranQL 是一種用於建立持久化引擎的開放源碼實現
  • 用來建立和部署 Geronimo 外掛程式的設施

    注意:Geronimo 外掛程式與 Eclipse 外掛程式相似,它們都包含打包的應用程式或額外的功能。Geronimo 外掛程式封裝了所有部署資訊;因此,可以輕鬆地安裝它們,而不需要關心環境特有的設定。




開始使用 Little-G

可以以兩種方式之一設定 Little-G:

  • 下載並安裝伺服器歸檔檔案。
  • 通過原始碼構建伺服器。

如果希望通過原始碼構建伺服器,那麼必須下載原始碼檔案並運行特定的 Maven 目標來構建和建立伺服器。但就本文而言,您將安裝歸檔檔案,為此,需要使用 Subversion 來下載 Geronimo 原始碼。

下載並安裝 Little-G

首先 下載 Geronimo。 在這裡可以找到 Geronimo 伺服器和 Little-G 的 UNIX 和 Microsoft Windows 檔案。下載 Little-G Apache Tomcat 壓縮檔,並將它解壓到 GERONIMO_HOME 檔案夾中, 2 所示。


圖 2. Little-G 目錄

可以看到 Little-G 安裝的目錄結構與 Geronimo 安裝很相似。它畢竟只是一種 Geronimo 安裝。

對 Little-G 安裝進行測試

Little-G 沒有附帶控制台應用程式,所以不能通過在瀏覽器中存取控制台應用程式(http://localhost:8080/console)來測試安裝。對於 Little-G,必須使用 Command-Line Interface(CLI)與伺服器進行互動。從 GERONIMO_HOME/bin 目錄發出以下命令之一來啟動伺服器:


GERONIMO_HOME/bin> java –jar server.jar

或:

GERONIMO_HOME/bin> startup

伺服器啟動並在命令視窗中顯示啟動資訊, 3 所示。


圖 3. Little-G 啟動訊息

如果看到這些訊息,就說明 Little-G 的安裝工作正常。

Little-G 啟動以下監聽器:

  • 監聽連接埠 1099 的命名服務
  • 監聽連接埠 4242 的遠程登入監聽器
  • 用於 Apache Web 服務器整合的 Tomcat Accelerated Graphics Port(AGP)連接器
  • HTTP 和 HTTP over Secure Sockets Layer(HTTPS)監聽器,分別監聽連接埠 8080 和 8443
  • Java Management Extension(JMX)連接器,部署工具使用它來部署應用程式

您現在知道如何啟動 伺服器了。要想平穩地關閉它,應該從命令視窗發出以下命令:


GERONIMO_HOME/bin> shutdown –user system –password manager



修改 Little-G 設定

可以使用 Little-G 輕鬆地修改大多數系統設定(比如記錄層級和 Web 監聽器連接埠)。GERONIMO_HOME/var/config/config.xml 檔案包含持久性的設定資訊。例如,如果需要修改 Tomcat HTTP 監聽連接埠,就修改 TomcatWebConnector GBean 的 port 屬性的值,如清單 1 所示。


清單 1. Config.xml

<module name="geronimo/tomcat/1.1.1/car">
<gbean name="TomcatResources"/>
<gbean name="TomcatWebConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8080</attribute>
<attribute name="redirectPort">8443</attribute>
</gbean>
<gbean name="TomcatAJPConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8009</attribute>
<attribute name="redirectPort">8443</attribute>
</gbean>
<gbean name="TomcatWebSSLConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8443</attribute>
</gbean>
<gbean name="geronimo/tomcat/1.1.1/car?ServiceModule=geronimo/tomcat/1.1.1/car,
j2eeType=GBean,name=TomcatWebContainer">
<attribute name="catalinaHome">var/catalina</attribute>
</gbean>
</module>


同樣,可以通過修改 TomcatWebSSLConnector GBean 中 port 元素的值來修改 HTTPS 監聽器連接埠。每當啟動伺服器時都會讀取 config.xml 檔案,這些屬性值會應用於對應的 GBean。當部署新應用程式或者取消部署時,伺服器也會更新這個檔案來反映變化。在一般情況下,可以通過在這個檔案中指定相應的條目,為模組中的任何 GBean 提供新值或者修改現有值。但是,如果需要修改日誌設定,操作就不一樣了。必須在 GERONIMO_HOME/var/log/server-log4j.properties 檔案中進行修改。




下載、部署和運行應用程式範例

因為 Little-G 沒有附帶應用程式範例,所以必須單獨下載並部署它們。為此,需要學習如何在 Little-G 中部署和運行 Web 應用程式。

下載應用程式範例

單擊 Geronimo Documentation 頁面 上的 Sample applications 連結,就會顯示應用程式範例的列表。單擊 Web application security sample 連結,並下載這個應用程式範例。(還可以從 下載 一節下載這個應用程式範例,timereport.zip)。在這個應用程式範例中,僱員可以輸入他們的時間卡資訊,經理可以輸入時間卡資訊並添加新僱員。這個應用程式使用基於資料庫的安全域實現 Web 應用程式安全性。

設定資料庫

注意:我使用了一個 postgreSQL V8.0 資料庫(參見 參考資料 一節)。您可以使用任何其他資料庫,但是我的樣本清單使用的是適合 postgreSQL 的設定。

在建立可啟動並執行資料庫之後,運行 SQL 指令碼(config/TimeReportDB.sql,可以在 下載 一節提供的 timereport.zip 中找到)。這個指令碼建立使用者和組表,您將使用這些表設定基於資料庫的安全域。

在 Little-G 存放庫中安裝資料庫驅動程式

您 已經看到了 Little-G 的目錄結構:GERONIMO_HOME/repository 目錄包含所有外部庫。在這個目錄中安裝資料庫驅動程式 .jar 檔案。repository 目錄結構在子目錄中包含外部庫,這些子目錄名稱符合 Maven 命名規範,見圖 4。


圖 4. Little-G 存放庫

在 commons-digester/commons-digester/1.6 目錄中可以看到 commons-digester-1.6.jar 檔案。這意味著,如果有一個條目的 groupID 為 cglib,artifactID 為 cglib-nodep,版本為 2.1_3,類型為 jar,那麼 Little-G 會在 GERONIMO_HOME/repository/cglib/cglin-nodep/2.1_3 檔案夾中尋找檔案 cglib-nodep-2.1_3.jar。為了安裝 postgresql-8.0.jar 檔案,將它放在 repository 檔案夾的 postgresql/postgresql/8.0 子目錄中。

部署安全域

這 個應用程式範例使用一個基於資料庫的安全域,在安裝 Web 應用程式之前必須安裝這個域。編輯安全域部署計劃 —— config/TimeReportRealm.xml —— 指定依賴項為 postgreSQL 資料庫驅動程式 .jar 檔案、JDBC 驅動程式類和登入模組配置的 JDBC 串連 URL,如清單 2 所示。


清單 2. 安全網域設定部署計劃

<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
<environment>
<moduleId>
<groupId>console</groupId>
<artifactId>TimeReportRealm</artifactId>
<version>1.0</version>
<type>car</type>
</moduleId>
<dependencies>
<dependency>
<groupId>geronimo</groupId>
<artifactId>j2ee-security</artifactId>
<type>car</type>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.0</version>
<type>jar</type>
</dependency>
</dependencies>
</environment>
<gbean name="TimeReportRealm"
class="org.apache.geronimo.security.realm.GenericSecurityRealm">
<attribute name="realmName">TimeReportRealm</attribute>
<reference name="ServerInfo">
<name>ServerInfo</name>
</reference>
<reference name="LoginService">
<name>JaasLoginService</name>
</reference>
<xml-reference name="LoginModuleConfiguration">
<log:login-config
xmlns:log="http://geronimo.apache.org/xml/ns/loginconfig-1.1">
<log:login-module control-flag="REQUIRED"
server-side="true" wrap-principals="false">
<log:login-domain-name>TimeReportRealm</log:login-domain-name>
<log:login-module-class>
org.apache.geronimo.security.realm.providers.SQLLoginModule<
/log:login-module-class>
<log:option name="jdbcDriver">org.postgresql.Driver</log:option>
<log:option name="jdbcUser">postgres</log:option>
<log:option name="userSelect">
select userid, password from users where userid=?
</log:option>
<log:option name="groupSelect">
select userid, groupname from usergroups where userid=?
</log:option>
<log:option name="jdbcURL">
jdbc:postgresql://localhost:5432/TimeReportDB
</log:option>
</log:login-module>
</log:login-config>
</xml-reference>
</gbean>
</module>


moduleId 元素為這個部署單元(也稱為配置) 指定一個 Maven 風格的名稱。這意味著,可以用統一資源識別項(URI)common/TimeReportRealm/1.0/car 從其他配置引用這個配置。還要注意,我在存放庫中為 postgreSQL .jar 檔案指定了一個 Maven 風格的依賴項定義。還指定了 JDBC 驅動程式類、資料庫使用者名稱和串連資料庫(在這個資料庫中已經建立了 usersusergroup 表)所用的 JDBC URL。

在修改部署計劃之後,使用以下命令對配置進行部署:


deploy –user system –password manager deploy TimeReportRealm.xml

這個命令將安全域部署為配置 console/TimeReportRealm/1.0/car。如果需要取消這個安全域的部署,就使用以下命令:


deploy –user system –password manager undeploy console/TimeReportRealm/1.0/car

部署 Web 應用程式

可以從 release 目錄或者本文的 下載 一節獲得 Web 應用程式 .war 檔案。為部署 .war 檔案,執行以下命令:


deploy –user system –password manager deploy TimeReport.war

該命令將部署 Web 應用程式,可以在瀏覽器中訪問 http://localhost:8080/timereport 來調用這個程式。可以輸入 emp1 作為使用者名稱,pass1 作為密碼,從而作為僱員登入。要作為經理登入,可以輸入 mgm1pass3 作為密碼。還可以開啟 web.xml 和 geronimo-web.xml 部署描述符,從而進一步瞭解身分識別驗證是如何定義的以及如何映射到安全域。 作為使用者名稱,




Little-G 的適用場合

如 果 Web 應用程式只需要交易處理設施和資料庫連通性,那麼就可以使用 Little-G。從這方面來說,Little-G 提供了一個完整的 Web 容器,具備所有相關且必要的 Java EE 特性。您已經看到一個簡單的 Web 應用程式如何利用 Little-G 內建的 Web 安全特性。對於簡單的小型 Web 應用程式來說,Little-G 是非常合適的。




結束語

本 文介紹了 Little-G 以及它為 Java EE 應用程式提供的服務,並解釋了 Apache Geronimo 平台的模組化性質如何支援建立 Geronimo 的小型、輕量級版本。我們還在 Little-G 中配置、部署和運行了一個樣本 Web 應用程式。Little-G 提供了 Geronimo 的一個簡化版本,可以利用 Geronimo 的模組化性質在 Little-G 上開始構建應用程式。

練習:添加新的配置,提供您希望支援的服務。這正是 Geronimo 的強大之處!


下載

描述 名字 大小 下載方法
本文所用的時間報告應用程式範例 timereport.zip 95KB HTTP


關於作者


Kishore Kumar 是 US Technology 的 Java Center of Excellence 主管,他熱愛開放源碼系統、板球和古典音樂。他曾經是軟體工程師和 J2EE 架構師,還是許多圖書和文章的作者,包括 Pro Apache Geronimo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.