Geronimo入门与进阶

来源:互联网 发布:贝瑞滋面膜怎么样 知乎 编辑:程序博客网 时间:2024/05/16 09:36

本文来自于本人在www.matrix.org.cn网站翻译的文章

原文为 这里

译文为 这里

原文作者Kunal Jaggi 是一个独立的Java咨询顾问,主要关注Java技术中的企业解决方案。 


Geronimo是一个最新的Apache发起的开源的应用服务器.Geronimo使用Apache V2.0 许可证,它是一个通过Java EE 1.4 认证的应用服务器。


在这篇文章中,我们将主要涵盖如下内容 :
    1 . 为什么要Geronimo
    2 . A Look Under the Hood
    3 . 使用Geronimo
    4 . 应用程序范例
    5 . 部署的计划
    6 . 写你的第一个Geronimo程序
    7 . 构建这个程序
    8 . 部署这个程序
    9 . 测试这个程序


Geronimo是基于一些最好的开源的技术的集合,一个蓬勃发展的社区支持的一个开源服务器,它给整个企业市场带来了风暴。这篇文章将介绍Geronimo以及在Geronimo上开发和部署一个简单的Java EE 的web程序所需要的基本点。


为什么需要Geronimo?

Geronimo 不是市场上唯一的一个开源的应用服务器。还有一些诸如ObjectWeb的JOnAS等其他开源的Java EE 应用服务器。然而,Geronimo完成了一个其他应用服务器没有做到的需求。我们可以使用Geronimo来很容易的集成其他组件。它的主要目标就是从 支持传统的构建过程调整到对具体的应用程序的要求。Geronimo提供了一些选择。例如,如果你不需要事务管理,你可以使用一个web应用层的服务器, 比如所Tomcat或者Jetty。Geronimo可以很容易的支持传统组件的聚合。简而言之,你可是使得它成为你需要的那种样子。这就意味着 Geronimo 不仅仅只是一个应用服务器,它提供了一个框架来将不同的组件结合在一起。
Geronimo并没有做一些重复的工作,它也不是现有的开源框架或是工具的模仿。相反,Geronimo继承了许多开源的工程,下面列出其中的一些:

Tomcat Jetty OpenEJB ActiveMQ HOWL

Geronimo最优秀的一个特性就是它不需要重启。和其他web层和business层的容器在改变任何配置之后都需要重启不同,Geronimo从一开始就设计成为支持动态class装载,能够像一个不中断的服务那样一直运行。

A Look Under the Hood

Geronimo 是一个叫做Geronimo beans 或者就是GBeans的组件的松散的结合。GBeans 是Geronimo的构建块,在Ioc容器的概念上的可管理的beans,他们用于向Geronimo内核增加服务。Geronimo中几乎所有的东西都 是一个GBean.

通过部署新的GBeans,我们可以很容易的扩展Geronimo。GBeans定义了服务器的能力,当它被部署 的时候通时注册到内中中。Gbean组件遵循一个特性的生命周期,内核创建他们, injects dependencies, 事件通知, 然后调用他们的方法。每一个GBean都可以维持一个状态,依赖于其他的GBeans,包含了定义它的功能的逻辑。GBean架构时一个DI配置和管理系 统。一个GBean时通过一个plan插入到内核中的,这个plan就是基于XML的配置文件。此外,组件可以通过修改配置文件来很轻松的移除。想要了解 更多的关于 Geronimo 的GBean架构和Ioc容器,请参阅 资源 一节


开始使用Geronimo

Geronimo要求Java SE 1.4(或者更高的版本,但是必须早于SE 5)。最新的milestone 发布版本是M5。将Geronimo和Tomcat容器解压到某个地方,然后将环境变量中的GERONIMO_HOME设为这个地方。

通过启动Geronimo 的内核来启动Geronimo 。一旦Geronimo 开始运行了,它将装载所以预定义的模块以及上面提到的其他应用模块(为了简要起见,并没有列出所有的域)
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


此 后,通过访问网址http://localhost:8080/console 来显示Geronimo 控制窗口 来检验Geronimo 的安装,如图一所示。使用默认的用户名(system)和密码(manager)。停止Geronimo 也是很容易的,按下Ctrl+C 将停止应用服务器。

image
Figure 1. Apache Geronimo Console

范例
对于一篇这样的介绍性文章,我们将创建一个简单的web应用程序,并将它部署在Geronimo上。请确定如下的环境变量都正确的设置了。
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路径下创建如下的目录:
•        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

我们需要两个部署plan,叫做web.xml和geronimo-web.xml。在我们进入这些文件之前,我先来介绍一下他们的差别。下面的一张表将会帮助你区别这两个部署plan之间的不同以及他们所扮演的角色。

web.xml : 标准Java EE web 部署描述符号

geronimo-web.xml : Geronimo-specific 的部署描述.

编码第一个Geronimo程序
我们通过创建一个简单的JSP页面来欢迎用户并显示当前的日期和时间。创建如下的hello.jsp文件,并把它放在GERONIMO_DEV/web 目录中。

……
<jsp:useBean id="currentdate"
    class="java.util.Date" />


……
<h3>Hello world from Geronimo!! on
${currentdate}</h3>
……


随后,创建如下的两个部署plan,并将他们放在GERONIMO_DEV/etc目录中。第一个部署paln,web.xml 是一个标准的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。之后我们设置上下文(/myApp),这个目录就是我们的程序部署到Geronimo中存放的地方了。

构建这个程序
之后我们使用ant做一个增量编译。我们需要一个Ant的文件(build.xml),放置在GERONIMO_DEV路径下。build.xml是一个格式良好的XML文件,它描述了我们程序的构建过程。
<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>


下面是我们运行完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目录中创建好了一个.war的文件,这个文件可以部署在Geronimo应用服务器装载的Tomcat容器里。

部署这个程序


这 儿我们使用Geronimo的部署器来部署.war文件。Geronimo为这个功能提供了一个”deploy“的命令行。里必须在命令行使用管理员帐户 登陆(system/manager)。如果没有显式的说明,部署器将会向你提出这个要求。下面的命令部署了这个.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


这 个部署器可以很智能的指出所部署的组件的类型。我们只需要给它我们的.war文件,然后这个部署器将会把这个文件当作一个WEb程序来部署。 deploy.jar文件将基于提供给Geronimo服务器的部署plan(geronimo-web.xml)来部署这个应用模块。
作为另一种选择,你还可以通过Geronimo的控制台窗口来手动的部署.war文件。从左边的控制台面板中选择”Deploy New link“,找到你的WAR文件,然后点击”install“按钮。

image
Figure 2. Deploy new web app in Geronimo

一旦部署完毕,这个web程序将出现在Geronimo的控制台窗口的”Installed Web Applications“的列表中。如图3所示。

image
Figure 3. Installed Web Applications

测试这个程序


现在可是成功的运行它了。开启一个浏览器,然后尝试这样的URL”http://localhost:8080/myApp/hello.jsp.“ Tomcat Web容器将处理并执行JSP,如下图所示:

image
Figure 4. Test JSP running on Geronimo app server

结论
Geronimo天生就是模块化的。这使得像Apache Derby这些Geronimo包含的模块可以很容易的装载。像Spring这样的集成框架是没有痕迹的。所以,是时候来尝试一下Geronimo了。

资源
本文代码:下载