Geronimo入门与进阶
本文来自于本人在www.matrix.org.cn网站翻译的文章
原文为 这里
译文为 这里
原文作者Kunal Jaggi 是一个独立的Java咨询顾问,主要关注Java技术中的企业解决方案。
Geronimo是一个最新的Apache发起的开源的应用服务器.Geronimo使用Apache V2.0 许可证,它是一个通过Java EE 1.4 认证的应用服务器。
在这篇文章中,我们将主要涵盖如下内容 :
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.jarBooting 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/consoleGeronimo Application Server started
此 后,通过访问网址http://localhost:8080/console 来显示Geronimo 控制窗口 来检验Geronimo 的安装,如图一所示。使用默认的用户名(system)和密码(manager)。停止Geronimo 也是很容易的,按下Ctrl+C 将停止应用服务器。
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/j2eehttp://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-appxmlns="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:/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“按钮。
Figure 2. Deploy new web app in Geronimo
一旦部署完毕,这个web程序将出现在Geronimo的控制台窗口的”Installed Web Applications“的列表中。如图3所示。
Figure 3. Installed Web Applications
测试这个程序
现在可是成功的运行它了。开启一个浏览器,然后尝试这样的URL”http://localhost:8080/myApp/hello.jsp.“ Tomcat Web容器将处理并执行JSP,如下图所示:
Figure 4. Test JSP running on Geronimo app server
结论
Geronimo天生就是模块化的。这使得像Apache Derby这些Geronimo包含的模块可以很容易的装载。像Spring这样的集成框架是没有痕迹的。所以,是时候来尝试一下Geronimo了。
资源
本文代码: 下载
Geronimo入门与进阶相关推荐
- ab753变频器参数怎么拷贝到面板_【干货】一文让你从入门小白进阶为变频器高手...
点击蓝字 关注我们 为确保 SINAMICS G120 的操作及监控便捷高效,提供了三种不同的操作面板: 1.基本操作面板(BOP-2). 2.智能操作面板(IOP-2) 3.智能连接模块(G120 ...
- 程序员编程如何入门、进阶?
作者 | 码农唐磊 来源 | 程序猿石头(ID:tangleithu) 背景 在之前的这篇文章中,我谈了谈读本科的时候都学了哪些计算机专业课和推荐了一些经典的技术书籍,然后推文封面中的这张图引起了不少 ...
- 服务端工程师入门与进阶 Java 版
前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow ...
- android自定义美颜相机完整程序,Android OpenGL ES从入门到进阶(一)—— 五分钟开发一款美颜相机...
源码链接:https://github.com/smzhldr/AGLFramework 一.前言 商店里有数十款的美颜相机类产品,其实现原理基本上都是以OpenGL ES为核心的特效处理,大神可以忽 ...
- python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单
推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...
- 网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版)
网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版) [作 者]吴泽欣 [同作者作品] [作译者介绍] [丛 书 名] 图灵程序设计丛书 [出 版 社] 人民邮电出版社 [书 号 ...
- 新兴短距离无线通信技术ZigBee入门到进阶
2019独角兽企业重金招聘Python工程师标准>>> 新兴短距离无线通信技术ZigBee入门到进阶 ZigBee技术是一种近距离.低复杂度.低功耗.低速率.低成本的双向无线通讯技术 ...
- 【Python基础】Matplotlib 实操干货,38个案例带你从入门到进阶!
译文出品:Python数据之道 原文作者:Rizky Maulana Nurhidayat 翻译:Lemon Matplotlib 实操干货, 38个案例带你从入门到进阶! 「Python数据之道」注 ...
- dt测试软件的学习心得,无线网络优化dt测试心得_适合新手入门,高手进阶_5年项目经验实战经验.docx...
无线网络优化DT测试心得_适合新手入门,高手进阶_5年项目经验实战经验 无线网络优化DT测试心得_适合新手入门,高手进阶_5年项目经验实战经验 路测中不常见的问题和个人心得 1.深井子镇投诉测试报告 ...
- SpringCloud从入门到进阶(九)——单点部署Zuul的压力测试与调优(二)
内容 作为微服务架构系统的入口,毫无疑问,Zuul的并发性能直接决定了整个系统的并发性能.本文结合前几篇文章的内容,在云服务器中部署了包含Eureka Server,Zuul等组件的1.0版本的微服务 ...
最新文章
- python 3 递归调用与二分法
- mysql 索引计划_Mysql索引、查询计划、优化方向
- ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!
- 用线程实现动态改变图标
- java8 functionalinterface注解_@FunctionalInterface注解的使用
- Transitions Among the Processor’s Operating Modes
- Spring_Mybatis整合实现CRUD操作
- round()和trunc()函数的应用
- 20200528-换脸算法调研
- Altera内部结构(一):Cyclone IV内部资源特点
- 从SHAttered事件谈安全
- 这些神奇 Bug,碰到真是让人目瞪狗呆!
- 我妹妹成了我的女儿——难道我真的中年大叔了?
- Plonky msm的改进版Yao算法
- VMTK【1】Getting Started
- 外星飞船CSS3动画代码
- ACM 海贼王之伟大航路(深搜剪枝)
- Cocos适配带虚拟导航栏手机(HUAWEI 荣耀6 Plus)
- SQL数据库中日期函数
- Windows桌面图标被白块挡住大部分
热门文章
- POJ1251 Jungle Roads(kru)
- 用商汤的mmdetection 学习目标检测中的 Recalls, Precisions, AP, mAP 算法 Part1
- Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务问题解决
- InfluxDB中Line Protocol理解
- antd-vue表格内部换行
- 域名注册之后如何操作
- 计算机中丢失glut.dll,OpenGl的源程序,运行就提示,计算机丢失 glut32.dll文件
- C/C++/Linux工程师学习资料干货路线这都有,从入门到实战!【CSDN宝藏资料图鉴第二期】
- 禁用IE设置代理检测不通过怎么办!
- 用R语言理解圆周率、自然对数和欧拉常数