1、1. JBoss是什么? JBoss是免费的,开放源代码J2EE的实现,它通过LGPL许可证进行发布。(LGPL许可证:GNU通用公共许可证(General Public License简称为GPL),是由自由软件基金会发行的用于计算机软件的许可证。目标就是创造出一种四海之内皆可使用的许可证,这样就能为许多源代码共享计划带来福音。GPL原理简单:在版权法下,你不遵守GPL的条款和条件你就没有相应权利。而作品在没有GPL的情况下,版权法作为默认条款发生效力,而不是作品进入公有领域。目前大多数的GNU程序和超过半数的自由软件使用此许可证。此许可证最新版本为“版本2”,1991年发布。GNU
2、宽通用公共许可证(Library General Public License,简称LGPL)是由GPL衍生出的许可证,被用于一些GNU程序库。GPL授予程序接受人以下权利,或称“自由:①以任何目的运行此程序的自由;②以学习程序工作机理为目的,对程序进行修改的自由(能得到源代码是前提);③再发行复制件的自由;④改进此程序,并公开发布改进的自由(能得到源代码是前提)。)它提供了基本的EJB容器以及J2EE服务。在J2EE应用服务器领域,Jboss是发展最为迅速的应用服务器。 (应用服务器又称为“应用服务器软件平台”,是当代软件的基础设施,是最为重要的一类中间件。应用服务器可以把不同的应用软件作
3、为构件整合到一个协同 工作的环境里,并为应用提供了名字、事务、安全、消息、数据访问等服务,此外它还提供应用构件的开发、部署、运行及管理功能。近年来,应用服务器产业的发展呈现百家争鸣的大好形势。不仅国外著名厂商IBM(WebSphere)、BEA(WebLogic Server)、Oracle(IAS)等纷纷推出了自己的应用服务器,而且随着国内市场需求的扩大,中国中间件厂商也已经开始涉足应用服务器领域并形成了有竞争力的产品。目前,国内的J2EE应用服务器产品主要有中创软件的InforWeb应 用服务器、金蝶软件的Apusic应用服务器、东方通科技的TongWeb应用服务器。虽然略晚几年,但从技术
4、上讲,中国的J2EE应用服务器实际上已经可以与国外主流产品一争高下。) 2.JBoss为何诞生? JBoss Group创办人兼总裁Marc Fleuryy原是个SUN 的Java软件工程师,闲暇之余,他突发奇想何不利用J2EE规格来写一套开放源代码应用服务器?(J2EE:Java 2 Platform,Enterprise Edition。是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。 J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构
5、的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。) (Spring是一个J2EE FrameWork,Jboss是一个J2EE应用服务器) JBoss是开放源代码组织,但是负责开发JBoss产品的JBoss组织是一个商业组织,通过提供JBoss服务来获得利润。JBoss组织的服务项目包括技术培训、技术支持、咨询顾问、市场合作等。2006年4月7日JBoss Group被RedHat以3.5亿美元收购。 3.JBoss 服务器架构概述 JBoss的构架和其他J2EE应用服务器的构架有着巨大的不同。JBo
6、ss的模块架构是建立在JMX底层上的,下图展现了JBoss主要组件和JMX的联系。 3.1 JMX是什么 JMX 是Java Management Extension 的缩写,是java下的资源管理规范。泛指的资源可以代表任何对象和事务,如网络,设备,应用程序。通过jmx,可以在程序运行期改变资源的配置和状态,启动或者停止服务。对应着javabean,就是调用setter设置新的属性值,调用bean上的 方法完成某些功能。比如关闭原来的数据库连接,设置一个新的数据库url,然后启动新的数据库连接,这些都是运行期的作,不需要停止服务器。当然,完全可以自己编码,实现对bean
7、配置的管理。 3.2 JBoss主要模块 1. JBoss EJB容器是JBoss服务器的核心实现。它有两个特性,第一是在运行期产生EJB 对象的Stub和Skeleton类,第二是支持热部署。(EJB容器:提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理等)(“热”部署的意思就是在部署BEAN只是简单拷贝BEAN的JAR文件到部署路径下,如果BEAN已经被LOAD,JBOSS卸载它,然后LOAD一个新版本BEAN。) 2. JBossTX 是由JTA/
8、JTS支持的事务管理控制。(JTA Java Transaction API,JTA 是事务服务的 J2EE 解决方案。本质上,它描述了一些有关事务的接口,开发人员直接使用该接口或者通过 J2EE 容器使用该接口来确保业务逻辑能够可靠地运行。开发人员能够全神贯注于他们的应用程序的业务逻辑,同时由 J2EE 容器来负责事务逻辑。JTA 运行在 Java Transaction Service(JTS) 之上,JTS 处理输入和输出事务发送的请求。JTS 是一种由 CORBA 定义的对象事务服务(OTS)的 Java 实现。CORBA (Common Object Request Broker A
9、rchitecture):公共对象请求代理结构)是一系列定义分布式操作系统的标准,是OMG定义的一套与语言无关的分布式对象交换标准框架。) 3. 部署服务支持EJB(jar)、Web应用文档(war)和企业级应用文档(ears)的部署。它会时刻关心J2EE应用的URL情况,一旦它们被改变或出现的时候将自动部署。 4. JBossNS是JBoss命名服务用来定位对象和资源。它实现了JNDI J2EE规范。(JNDI:Java Naming and Directory Interface。由于J2EE应用程序组件一般分布在不同的机器上,所以需要一种机制以便于组件客户使用者查找和引用组件及资源。
10、在J2EE体系中,使用JNDI (Java Naming and Directory Interface)定位各种对象,这些对象包括EJB、数据库驱动、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作,如通过对象属性来查找和定位该对象。)(参见另外的文档说明) 5. Web服务器支持Web容器和Servlet引擎。JBoss 2.4.x版本支持Tomcat 4.0.1,Tomcat 3.23和Jetty 3.x服务。(JBOSS不包括serverlers/JSP page 的WEB容器,当然可以和Tomcat或Jetty绑定使用) 6. JBo
11、ssCX实现了部分JCA的功能。JCA制订了J2EE应用组件如何访问基于连接的资源。(JCA(J2EE Connector Architecture)是J2EE体系架构的一部分,为开发人员提供了一套连接各种企业信息系统(EIS,包括ERP、SCM、CRM等)的体系架构,对于EIS开发商而言,它们只需要开发一套基于JCA的EIS连接适配器,开发人员就能够在任何的J2EE应用服务器中连接并使用它。基于JCA的连 接适配器的实现,需要涉及J2EE中的事务管理、安全管理及连接管理等服务组件。) 7. JBossSX支持基于JAAS的或不支持JAAS机制的安全实现。(JAAS(Java Authent
12、ication and Authorization Service)实现了一个Java版本的标准Pluggable Authentication Module(PAM)的框架。JAAS可用来进行用户身份的鉴定,从而能够可靠并安全地确定谁在执行Java代码。同时JAAS还能通过对用户进行授权,实现基于用户的访问控制) 8. JBossMQ使Java 消息规范(JMS)的实现。(JMS:Java Message Service。在不同系统之间交换信息的一大障碍是如何在精确交换和格式化数据方面取得一致。JMS通过提供一种与J2EE应用程序或传统系统交互的方法部分的解决了这个问题。) 3.3 JB
13、oss主要模块间时怎么工作的 4 Jboss的获得 Jboss可以到官方网站上直接下载。目前最高版本是5.0Beta1。 5 Jboss的目录结构 首先下载到Jboss的程序包。(本文档是在Windows中进行开发,则相应下载ZIP文件即可)由于Jboss5.0版本还处在测试阶段,所以我们下载了比较稳定的前一个版本4.2。 解压到指定的目录中。 解压后,就可以看到,在Jboss的目录下有如下的子目录 为了完成程序编译,更新配置或者部署应用等,开发者应该了解Jboss中各个文件的存放位置。 目录 描述 bin Jboss附带的启动脚本,以wi
14、ndows为例,是run.bat和shutdonw.bat脚本。 client 客户端所需要的jar文件都放在该目录中。通常情况下,客户端一般需要如下几个jar文件: ①jbossall-client.jar ②concurrent.jar ③log4j.jar server Jboss服务配置集合位于server服务下。默认的服务器配置为server/default。默认提供了三个服务器实例,分别是all、default和minimal,其中all提供了JBOSS的所有扩展组件(包括嵌入一个TOMCAT Web容器),default提供了JBOSS大部分的组件组件,而minim
15、al则不提供任何扩展组件。 lib 包含了Jboss启动、或开发时的jar文件,开发者不要再该目录中存放任何文件。 docs 放置 jboss 的例子、测试脚本和各种脚本配置文件的 DTD (Documnet Type Definition, DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。) Server目录下默认启动的服务器实例default的文件结构说明。 目录 描述 conf 存放了bootstrap的配置描述符(默认是jboss-service.xml),服务器配置等。 lib
16、是bootstrap部署描述符指定的默认位置。 deploy 用于寻找动态部属的位置。 当JBoss服务器没有启动的时候,仅存在以上三条目录。但在实际服务器在运行时,还会创建和用到一些目录。 目录 描述 data 为需要在文件系统中存放数据的应用提供服务 log 日志服务默认将该服务作为存放日志文件的路径 tmp 存放诸如为打包的分布文件等临时文件。 work 存放的是JSP编译后的.java及.class文件,如果调试JSP时出错了,可以到该目录下去找对应的文件,调试问题。有时我们明明把一个JSP更新到对应的目录里了,可是去刷新页面时,内容还是旧的,为了解决该问题,
17、我们可以到work目录下,将对应的.java及.class文件删了,再刷新即可。 6. Jboss的简单部署 6.1 JAR,WAR,EAR文件说明 首先说明EAR(Enterprise ARchive),WAR(Web Appliction aRrchive),JAR(Java ARchive)文件及其作用。 JAR:用户可将多个 Java applet 及其所需组件(.class 文件、图像和声音)绑定到 JAR 文件中,而后作为单个的简单 HTTP事务下载到浏览器中,从而大大提高下载速度。JAR 格式也支持压缩,从而减小了文件的大小,进一步缩短下载时间。
18、或者中间件开发者,可以将产品打包成一个JAR文件来发布。 WAR:一个WAR文件包含一个Web应用。 EAR:一个J2EE应用以及它的所有模块被提交到一个EAR文件中。 一个EAR文件就是一个具有.ear扩展名的标准的Java Archive (JAR)文件。EAR文件可以包含多个Web应用,EAR文件中的每个Web应用必须有一个唯一的部署上下文。EAR文件的部署机制允许指定这类不同的上下文。SUN的网站上有关于EAR文件的说明: 这三种文件之间的关系如下图所示: EAR Other files …… WAR WAR
19、 JARs …… JSPs Source files servlets static pages 6.2 Jboss对这些文件的应用 将EAR或WAR拷贝到deploy目录下,即可。如果EAR或WAR配置正确,则在Jboss启动时,就可以自动发布了。对于一个WEB程序到底应该打包成EAR,还是WAR,则根据具体的需求和应用程序的规模来决定。 但是开发过程中,往往不需要频繁地打包发布,可以采取另外一种方式:将要在deploy目录下发布的WEB应用程序,则可创建文件目录,并将目录的命名为xxx.ear或$xxx.war。(如果创建了xxx.ear目录
20、则在该目录下,根据需要,还可创建若干不同的 >_&+gn$xxx.war目录名,用于封装 Web 模块。)Jboss在启动时,可以找到并且发布它们,这样对于开发过程中的热部署也提供了很大的便利。 这次以Exp项目,就采用了在ear目录下创建war目录的方法,对我们开发者来说,热部署给我们带来了很大的便利。 Exp1.ear Exp1.war 7.从一个现成的Jboss应用开始 7.1 Jboss的基本配置 直接解压从官方网站上下载到的Jboss压缩包,在其bin目录下,直接执行run.bat即可启动Jboss。这之前,应该保证安装了
21、JDK,并且Jboss的版本与JDK的版本相匹配。(因为,高版本的Jboss须相应高版本的JDK来支持) 若此时要关闭,则Ctrl + C即可。 Jboss启动成功后,可以在本地浏览器中输入http://localhost:8080,出现Jboss的界面,则说明启动成功。 7.2 启动ThaiExportor应用(我们大家的劳动成果) ①将exp1.ear拷贝至默认发布目录(server\default\deploy)下; ②配置应用的数据库连接。 数据源配置文件的路径,$JBOSS-HOME/server/default/deplo
22、y,文件格式必须是*-ds.xml的样式。不同的数据库配置参数可参考$JBOSS-HOME/docs/examples/jca/下的示例文档。JBoss使用的默认数据库是纯Java数据库Hypersonic。这个数据库的配置信息位于hsqldb-ds.xml文件中。这个XML配置文件描述了如何连接到Hypersonic数据库。 Exp1-ds.xml的位置和内容如下: 7.3 启动Jboss,即可启动ThaiExportor应用。 8. Jboss 和 Eclipse的配置 Jboss在Eclipse的配置,一般方法有:运用Lomboz插件、直接采用Jboss Ec
23、lipse IDE、或者在Eclipse中安装Jboss插件。 8.1 Lomboz 插件 Lomboz是Eclipse的一个主要的开源插件(open-source plug-in),Lomboz插件能够使Java开发者更好的使用Eclipse去创建,调试和部署一个100%基于J2EE的Java应用服务器。 Lomboz的功能比较多,比较显眼的功能是Wizard功能,和支持JSP调试。 目前,NSF没有采用这个插件。 8.2 Jboss Eclipse IDE JBoss Eclipse IDE还是Eclipse IDE。JBoss Eclipse IDE的出现是为了
24、方便开发和发布 基于Jboss Server的J2EE应用。 在Jboss网站 将下载到压缩文件进行解压,即得到了Jboss Eclipse IDE。 8.2.1 Jboss Eclipse IDE 中Jboss的配置 显示Server Navigator窗口。 在Server Navigator窗口中单击鼠标右键,配置一个新的Server。 选择Jboss的存放目录 配置完成后,即可在Eclipse中启动Jboss。 8.3 安装Jboss的Eclipse插件 从Jboss网站上
25、下载JBossIDE-x.x.x.GA-ALL.zip(x代表的是版本号),解压,得到features和plugins文件夹,将其内的文件拷贝到Eclipse对应的文件夹中,即安装成功。 然后,重新启动Eclipse。此时配置Jboss的过程与9.2所述一致。 9 利用Jboss来进行开发 建立工程的目录结构比较灵活,一般根据工程的实际情况来建立工程的目录结构,不同的工程可以有不同的目录结构。 有一些比较通用的组织形式可供参考,比如所有的jakarta项目都使用类似的目录结构。 目录 文件 bin 公共的二进制文件,以及运行脚本 build
26、临时创建的文件,如类文件等 dist 目标输出文件,如生成Jar文件等。 doc/javadocs 文档。 lib 需要导出的Java包 src 源文件 当然在这样的目录结构上,也可以做一些调整,例如,可以建立一个extra目录来放置需要发布的Jar文件、Inf文件及图像文件等。同样,如果开发Web应用可以建立一个Web目录放置JSP、HTML等文件。此时,发布时要采用Ant工具,将相应的资源打包成ear文件,或者war文件。 但是,如果我们要利用热部署在deploy目录下创建XXX.ear文件夹,则要按照ear的目录结构来来存放工程中的资源。
27、 以下我们就创建一个例子。 Step 1: 创建工程 在deploy目录下创建JbossStudy.ear文件夹 打开Eclipse,在JbossStudy.ear目录中创建工程。 改变工程路径至JbossStudy.ear目录 Step 2: 在工程中创建如下图所示的ear目录结构 为什么要创建META-INF目录? 包含ear文件的meta信息(data翻译成中文是“元数据”,主要是指基本的关键数据。),这样的目录在Jar,War,Ear文件中都要建立。 META-INF目录中的application.xml是做什么的? Ear文
28、件发布时的必需的描述文件之一。其中主要包含icons,description,web application module,ecurity role names等的描述。以下是一个例子: <
33、DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "
34、t>
35、onse) throws IOException,ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("
36、>"); out.println(""); } } Step 3: 在工程中创建如下图所示的war目录结构 在war文件中,JSP文件,HTML文件,保存在顶级目录(在我们做过的两个项目中,其实并没有将JSP放在顶级目录,而是放在了以业务分类的各个自目录中。其实,随着业务复杂程度的提高,JSP的路径可能更加繁杂。如何让这些JSP之间有条不紊地相互调用?在提交.do的请求时(还记得那个MENU表吗?),加入JSP的路径即可。.do是一个servlet的映射,即.do的请求都交给servlet来处理。Web.xml中有这样的配置语句:
37、
38、tion. );Servlet和相关的文件保存在WEB-INF/classes目录中;运行所需的JAR文件保存在WEB-INF/lib中;发布的配置文件Web.xml存放在WEB-INF目录中。(注意:目录名一定要注意大小写)当然,根据业务的繁简程度,不是每个文件夹都是需要的。 Step 4: 编译程序,将生成的class文拷贝到war的WEB-INF/classes目录中。启动Jboss,打开浏览器,即可看到结果。 Step 5:编写简单的HTML文件在war中。
Hello, World! Hello, my friends! 打开,浏览器,也可以访问到。 Step 5:编写简单的JSP文件在war中。 在浏览器中输入 http://localhost:8080/HelloWorld/FirstJSP.jsp





