Geronimo入门与进阶
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Geronimo入门与进阶
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                本文來(lái)自于本人在www.matrix.org.cn網(wǎng)站翻譯的文章
原文為 這里
譯文為 這里原文作者Kunal Jaggi 是一個(gè)獨(dú)立的Java咨詢顧問(wèn),主要關(guān)注Java技術(shù)中的企業(yè)解決方案。?
Geronimo是一個(gè)最新的Apache發(fā)起的開(kāi)源的應(yīng)用服務(wù)器.Geronimo使用Apache V2.0 許可證,它是一個(gè)通過(guò)Java EE 1.4 認(rèn)證的應(yīng)用服務(wù)器。
在這篇文章中,我們將主要涵蓋如下內(nèi)容 :
1 . 為什么要Geronimo
??? 2 . A Look Under the Hood
??? 3 . 使用Geronimo
??? 4 . 應(yīng)用程序范例
????5 . 部署的計(jì)劃
????6 . 寫(xiě)你的第一個(gè)Geronimo程序
????7 . 構(gòu)建這個(gè)程序
????8 . 部署這個(gè)程序
????9 . 測(cè)試這個(gè)程序
Geronimo是基于一些最好的開(kāi)源的技術(shù)的集合,一個(gè)蓬勃發(fā)展的社區(qū)支持的一個(gè)開(kāi)源服務(wù)器,它給整個(gè)企業(yè)市場(chǎng)帶來(lái)了風(fēng)暴。這篇文章將介紹Geronimo以及在Geronimo上開(kāi)發(fā)和部署一個(gè)簡(jiǎn)單的Java EE 的web程序所需要的基本點(diǎn)。
為什么需要Geronimo?
Geronimo 不是市場(chǎng)上唯一的一個(gè)開(kāi)源的應(yīng)用服務(wù)器。還有一些諸如ObjectWeb的JOnAS等其他開(kāi)源的Java EE 應(yīng)用服務(wù)器。然而,Geronimo完成了一個(gè)其他應(yīng)用服務(wù)器沒(méi)有做到的需求。我們可以使用Geronimo來(lái)很容易的集成其他組件。它的主要目標(biāo)就是從 支持傳統(tǒng)的構(gòu)建過(guò)程調(diào)整到對(duì)具體的應(yīng)用程序的要求。Geronimo提供了一些選擇。例如,如果你不需要事務(wù)管理,你可以使用一個(gè)web應(yīng)用層的服務(wù)器, 比如所Tomcat或者Jetty。Geronimo可以很容易的支持傳統(tǒng)組件的聚合。簡(jiǎn)而言之,你可是使得它成為你需要的那種樣子。這就意味著 Geronimo 不僅僅只是一個(gè)應(yīng)用服務(wù)器,它提供了一個(gè)框架來(lái)將不同的組件結(jié)合在一起。
Geronimo并沒(méi)有做一些重復(fù)的工作,它也不是現(xiàn)有的開(kāi)源框架或是工具的模仿。相反,Geronimo繼承了許多開(kāi)源的工程,下面列出其中的一些:
Tomcat Jetty OpenEJB ActiveMQ HOWL
Geronimo最優(yōu)秀的一個(gè)特性就是它不需要重啟。和其他web層和business層的容器在改變?nèi)魏闻渲弥蠖夹枰貑⒉煌?#xff0c;Geronimo從一開(kāi)始就設(shè)計(jì)成為支持動(dòng)態(tài)class裝載,能夠像一個(gè)不中斷的服務(wù)那樣一直運(yùn)行。
A Look Under the Hood
Geronimo 是一個(gè)叫做Geronimo beans 或者就是GBeans的組件的松散的結(jié)合。GBeans 是Geronimo的構(gòu)建塊,在Ioc容器的概念上的可管理的beans,他們用于向Geronimo內(nèi)核增加服務(wù)。Geronimo中幾乎所有的東西都 是一個(gè)GBean.
通過(guò)部署新的GBeans,我們可以很容易的擴(kuò)展Geronimo。GBeans定義了服務(wù)器的能力,當(dāng)它被部署 的時(shí)候通時(shí)注冊(cè)到內(nèi)中中。Gbean組件遵循一個(gè)特性的生命周期,內(nèi)核創(chuàng)建他們, injects dependencies, 事件通知, 然后調(diào)用他們的方法。每一個(gè)GBean都可以維持一個(gè)狀態(tài),依賴于其他的GBeans,包含了定義它的功能的邏輯。GBean架構(gòu)時(shí)一個(gè)DI配置和管理系 統(tǒng)。一個(gè)GBean時(shí)通過(guò)一個(gè)plan插入到內(nèi)核中的,這個(gè)plan就是基于XML的配置文件。此外,組件可以通過(guò)修改配置文件來(lái)很輕松的移除。想要了解 更多的關(guān)于 Geronimo 的GBean架構(gòu)和Ioc容器,請(qǐng)參閱 資源 一節(jié)
開(kāi)始使用Geronimo
Geronimo要求Java SE 1.4(或者更高的版本,但是必須早于SE 5)。最新的milestone 發(fā)布版本是M5。將Geronimo和Tomcat容器解壓到某個(gè)地方,然后將環(huán)境變量中的GERONIMO_HOME設(shè)為這個(gè)地方。
通過(guò)啟動(dòng)Geronimo 的內(nèi)核來(lái)啟動(dòng)Geronimo 。一旦Geronimo 開(kāi)始運(yùn)行了,它將裝載所以預(yù)定義的模塊以及上面提到的其他應(yīng)用模塊(為了簡(jiǎn)要起見(jiàn),并沒(méi)有列出所有的域)
D:/>cd %GERONIMO_HOME%
D:/geronimo-1.0>java -jar bin/server.jar
Booting Geronimo Kernel (in Java 1.4.2_08)...
Starting Geronimo Application Server
[********************] 100%??44s Startup complete
??Listening on Ports:
????1527 0.0.0.0 Derby Connector
????8080 0.0.0.0 Tomcat Connector HTTP
????8443 0.0.0.0 Tomcat Connector HTTPS
??Started Application Modules:
????EAR: geronimo/daytrader-derby-tomcat/1.0/car
????EAR: geronimo/uddi-tomcat/1.0/car
????WAR: geronimo/welcome-tomcat/1.0/car
??Web Applications:
????http://WINKJ185011-NZR:8080/
????http://WINKJ185011-NZR:8080/console
Geronimo Application Server started
此 后,通過(guò)訪問(wèn)網(wǎng)址http://localhost:8080/console 來(lái)顯示Geronimo 控制窗口 來(lái)檢驗(yàn)Geronimo 的安裝,如圖一所示。使用默認(rèn)的用戶名(system)和密碼(manager)。停止Geronimo 也是很容易的,按下Ctrl+C 將停止應(yīng)用服務(wù)器。
Figure 1. Apache Geronimo Console
范例
對(duì)于一篇這樣的介紹性文章,我們將創(chuàng)建一個(gè)簡(jiǎn)單的web應(yīng)用程序,并將它部署在Geronimo上。請(qǐng)確定如下的環(huán)境變量都正確的設(shè)置了。
Environment variable ????????Purpose
JAVA_HOME ????????Indicates the base directory of your standard Java SE installation.
GERONIMO_HOME ????????Set to the root directory of your Geronimo installation.
ANT_HOME ????????Set to the root directory of your Ant installation.
GERONIMO_DEV ????????Indicates the base directory of application development space.
PATH ????????????????????????Ensure that ANT_HOME/bin is in your PATH.
在GERONIMO_DEV路徑下創(chuàng)建如下的目錄:
?????????etc: All deployment plans are kept inside this directory.
?????????src: This directory is used for placing any servlets and other Java source files.
?????????web: All public JSP documents are placed inside this directory.
部署plan
我們需要兩個(gè)部署plan,叫做web.xml和geronimo-web.xml。在我們進(jìn)入這些文件之前,我先來(lái)介紹一下他們的差別。下面的一張表將會(huì)幫助你區(qū)別這兩個(gè)部署plan之間的不同以及他們所扮演的角色。
web.xml : 標(biāo)準(zhǔn)Java EE web 部署描述符號(hào)
geronimo-web.xml : Geronimo-specific 的部署描述.
編碼第一個(gè)Geronimo程序
我們通過(guò)創(chuàng)建一個(gè)簡(jiǎn)單的JSP頁(yè)面來(lái)歡迎用戶并顯示當(dāng)前的日期和時(shí)間。創(chuàng)建如下的hello.jsp文件,并把它放在GERONIMO_DEV/web 目錄中。
……
<jsp:useBean id="currentdate"
????class="java.util.Date" />
……
<h3>Hello world from Geronimo!! on
${currentdate}</h3>
……
隨后,創(chuàng)建如下的兩個(gè)部署plan,并將他們放在GERONIMO_DEV/etc目錄中。第一個(gè)部署paln,web.xml 是一個(gè)標(biāo)準(zhǔn)的Java EE部署描述符 ,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
????<display-name> Hello JSP Web App
????</display-name>
????<description>First Geronimo App
????</description>
</web-app>
下面的代碼段顯示了Geronimo具體的部署 plan, geronimo-web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.0"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.0"
configId="com/onjava/safari/myApp">
??<context-root>/myApp</context-root>
??<context-priority-classloader>false/
??</context-priority-classloader>
</web-app>
configId屬性描述了我們程序的名字,com/onjava/safari/myApp。之后我們?cè)O(shè)置上下文(/myApp),這個(gè)目錄就是我們的程序部署到Geronimo中存放的地方了。
構(gòu)建這個(gè)程序
之后我們使用ant做一個(gè)增量編譯。我們需要一個(gè)Ant的文件(build.xml),放置在GERONIMO_DEV路徑下。build.xml是一個(gè)格式良好的XML文件,它描述了我們程序的構(gòu)建過(guò)程。
<project name="GeronimoApp" default="war"
basedir=".">
??<property environment="env"/>
<path id="cp">
??????<pathelement path="${java.class.path}"/>
??????<fileset dir="${env.GERONIMO_HOME}/
??????repository/org.apache.geronimo.specs/jars">
????????<include name="*.jar"/>
??????</fileset>
????</path>
<target name="prepare">
????<mkdir dir="dist"/>
????<mkdir dir="classes"/>
????<mkdir dir="build"/>
????<delete>
???? <fileset dir="classes"
?????? includes="**/*.class"/>
????</delete>
????<mkdir dir="build/WEB-INF"/>
????<mkdir dir="build/WEB-INF/lib"/>
????<copy file="etc/web.xml" todir="build/WEB-INF"/>
????<copy file="etc/geronimo-web.xml"
????todir="build/WEB-INF" />
????<copy todir="build">
??????<fileset dir="web"/>
????</copy>
</target>
<target name="compile" depends="prepare">
????<javac srcdir="src" destdir="classes"
????debug="on" deprecation="off">
??????<classpath refid="cp"/>
????</javac>
</target>
<target name="war" depends="compile">
?? <war destfile="dist/safari.war"
?? webxml="build/WEB-INF/web.xml">
????<classes dir="classes" />
??????<fileset dir="build">
????????<exclude name="WEB-INF/web.xml"/>
??????</fileset>
????</war>
</target>
</project>
下面是我們運(yùn)行完ant腳本后的輸出。
D:/>cd %GERONIMO_DEV%
D:/gdev>ant
Buildfile: build.xml
prepare:
??[mkdir] Created dir: D:/gdev/dist
??[mkdir] Created dir: D:/gdev/classes
??[mkdir] Created dir: D:/gdev/build
??[mkdir] Created dir: D:/gdev/build/WEB-INF
??[mkdir] Created dir: D:/gdev/build/WEB-INF/lib
?? [copy] Copying 1 file to D:/gdev/build/WEB-INF
?? [copy] Copying 1 file to D:/gdev/build/WEB-INF
?? [copy] Copying 1 file to D:/gdev/build
compile:
war:
??????[war] Building war: D:/gdev/dist/safari.war
BUILD SUCCESSFUL
Total time: 3 seconds
在/dist目錄中創(chuàng)建好了一個(gè).war的文件,這個(gè)文件可以部署在Geronimo應(yīng)用服務(wù)器裝載的Tomcat容器里。
部署這個(gè)程序
這 兒我們使用Geronimo的部署器來(lái)部署.war文件。Geronimo為這個(gè)功能提供了一個(gè)”deploy“的命令行。里必須在命令行使用管理員帳戶 登陸(system/manager)。如果沒(méi)有顯式的說(shuō)明,部署器將會(huì)向你提出這個(gè)要求。下面的命令部署了這個(gè).war文件。
D:/>cd %GERONIMO_HOME%
D:/geronimo-1.0>java -jar bin/deployer.jar --user
system --password manager deploy
%GERONIMO_DEV%/dist/safari.war
????Deployed com/onjava/safari/myApp @
????http://WINKJ185011-NZR:8080/myApp
這 個(gè)部署器可以很智能的指出所部署的組件的類(lèi)型。我們只需要給它我們的.war文件,然后這個(gè)部署器將會(huì)把這個(gè)文件當(dāng)作一個(gè)WEb程序來(lái)部署。 deploy.jar文件將基于提供給Geronimo服務(wù)器的部署plan(geronimo-web.xml)來(lái)部署這個(gè)應(yīng)用模塊。
作為另一種選擇,你還可以通過(guò)Geronimo的控制臺(tái)窗口來(lái)手動(dòng)的部署.war文件。從左邊的控制臺(tái)面板中選擇”Deploy New link“,找到你的WAR文件,然后點(diǎn)擊”install“按鈕。
Figure 2. Deploy new web app in Geronimo
一旦部署完畢,這個(gè)web程序?qū)⒊霈F(xiàn)在Geronimo的控制臺(tái)窗口的”Installed Web Applications“的列表中。如圖3所示。
Figure 3. Installed Web Applications
測(cè)試這個(gè)程序
現(xiàn)在可是成功的運(yùn)行它了。開(kāi)啟一個(gè)瀏覽器,然后嘗試這樣的URL”http://localhost:8080/myApp/hello.jsp.“ Tomcat Web容器將處理并執(zhí)行JSP,如下圖所示:
Figure 4. Test JSP running on Geronimo app server
結(jié)論
Geronimo天生就是模塊化的。這使得像Apache Derby這些Geronimo包含的模塊可以很容易的裝載。像Spring這樣的集成框架是沒(méi)有痕跡的。所以,是時(shí)候來(lái)嘗試一下Geronimo了。
資源
本文代碼: 下載
總結(jié)
以上是生活随笔為你收集整理的Geronimo入门与进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 一篇软文
- 下一篇: Linux同步系统时间
