因为工作原因,需要用到JBOSS做WEB应用服务器,以前只是有Apache,Tomcat,Resin等得应用经验,从入门到开发应用,整理了一些知识,贴在这里,希望后来者看到我得应用经历,能更快速上手。
1.JBoss应用服务器的现状及展望
作者:JBoss公司 ,Ben Wang(王文彬) 近年来,在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。另外,JBoss应用服务器还具有许多优秀的特质。其一,它将具有革命性的JMX微内核服务作为其总线结构;其二,它本身就是面向服务的架构(Service-Oriented Architecture,SOA);其三,它还具有统一的类装载器,从而能够实现应用的热部署和热卸载能力。因此,它是高度模块化的和松耦合的。JBoss用户的积极反馈告诉我们,JBoss应用服务器是健壮的、高质量的,而且还具有良好的性能。 为满足企业级市场日益增长的需求,JBoss公司从2003年开始就推出了24*7、专业级产品支持服务。同时,为拓展JBoss的企业级市场,JBoss公司还签订了许多渠道合作伙伴。比如,JBoss公司同HP、Novell、Computer Associates、Unisys等都是合作伙伴。 在2004年6月,JBoss公司宣布,JBoss应用服务器通过了Sun公司的J2EE认证。这是JBoss应用服务器发展史上至今为止最重要的里程碑。与此同时,JBoss一直在紧跟最新的J2EE规范,而且在某些技术领域引领J2EE规范的开发。因此,无论在商业领域,还是在开源社区,JBoss成为了第一个通过J2EE 1.4认证的主流应用服务器。现在,JBoss应用服务器已经真正发展成具有企业强度(即,支持关键级任务的应用)的应用服务器。 JBoss 4.0作为J2EE认证的重要成果之一,已经于2004年9月顺利发布了。同时,JBoss 4.0还提供了JBoss AOP(Aspect-Oriented Programming,面向方面编程)组件。近来,AOP吸引了大量开发者的关注。它提供的新的编程模式使得用户能够将方面(比如,事务)从底层业务逻辑中分离出来,从而能够缩短软件开发周期。用户能够单独使用JBoss AOP,即能够在JBoss应用服务器外部使用它。或者,用户也可以在应用服务器环境中使用它。JBoss AOP 1.0已经在2004年10月发布了。 展望下一代JBoss应用服务器,其重点关注的是EJB 3.0。当前,J2EE 1.4规范使用了EJB 2.1。其中,EJB 3.0的主要目标是简化EJB模型,即用户能够更容易开发EJB组件,并且能够在EJB容器外部测试EJB组件。EJB 3.0规范草案已经于2004年6月推出。JBoss公司一直在积极参与EJB 3.0规范的制定,并且在为EJB规范的发展贡献自己的力量。其中,Gavin King(Hibernate的创立者)和Bill Burke(JBoss公司的首席架构师)已经为EJB 3.0规范草案贡献了很多内容。 JBoss公司于2004年10月初发布了基于JBoss应用服务器实现的EJB 3.0预览版。尽管EJB 3.0规范草案还处于初期发展和评审阶段,但这为J2EE社区测试EJB 3.0、并提供反馈信息提供了很好的机会。这也证实了JBoss是一家创新型公司。JBoss一直在引领技术规范的发展。 近年来,Hibernate已经成为了事实上的持久化引擎。JBoss公司致力于将自身发展成为开源项目的社区,比如招募Gavin King和许多Hibernate开发者。其中,最新版的JBoss应用服务器已经将Hibernate集成为JMX MBean服务。这使得用户能够在应用服务器环境中直接使用Hibernate,而不管它是否处于J2EE上下文中。 从2003年开始,JBoss启动了JBossCache项目。JBossCache是基于内存的、可复制的、事务性的缓存系统,并且具有持久化状态存储管理能力。最近,它受到极大的关注。用户能够在JBoss应用服务器或其他应用服务器中,或单独使用JBossCache。同时,它提供的基于JBoss AOP的AOP模块能够在可复制环境中实现细粒度、域级别复制,而且能够透明地管理复杂对象。在最新版的JBoss应用服务器中,用户能够直接通过JMX MBean服务访问到JBossCache提供的服务。 下一代的JBoss应用服务器(暂定名为,JBoss 5.0)将提供大量的新功能。除了支持最新的EJB 3.0规范外,新版的JBoss AOP将同它正式发布。同时,JBoss开发团队还计划开发新的微内核层,即独立于JMX,使得它能够独立使用。另外,有关JBoss应用服务器的架构和开发,开发者可以参考由Scott Stark博士著的《JBoss Administration and Development 3.2.x Third Edition》一书(此书已由电子工业出版社引进并翻译出版,中文版书名为《JBoss管理和开发核心技术(第三版)》)。Scott Stark博士是JBoss公司的创始人之一,他一直在领导JBoss产品的研发。该书内容涵盖了JBoss应用服务器的方方面面,比如JMX微内核、客户端和服务器端拦截器以及J2EE平台服务的实现等内容。如果开发者对JBoss内核和开发基于JBoss/J2EE的应用感兴趣,则最好能够阅读这本权威著作。 |
2.JBOSS的取得
JBOSS的官方网站是www.jboss.com,在http://www.jboss.com/downloads/index可以下载到JBoss的各种版本,还有和ECLIPSE,JBUILDER等IDE集成的插件。我所下载的是ZIP版本的jboss-3.2.7.tar.gz。
当然,JBOSS的运行需要JDK的支持,而且版本不通,相应对JDK的要求也不同,JDK的下载地址是http://java.sun.com/
3.JBoss的启动以及管理
jboss-3.2.7.tar.gz 解开压缩之后,在(Windows XP)系统-属性-高级-环境变量里,添加JBOSS_HOME,指向所解压开来的目录。并把JBOSS_HOME下bin目录添加到系统Path环境变量里,这样方便在开始菜单运行里,敲入run.bat就可以启动JBOSS了。
也可以在JBOSS目录下bin目录里,双击run.bat文件,就可以启动JBOSS了。如果没有看到什么异常,启动信息如下:
===============================================================================
.
JBoss Bootstrap Environment
.
JBOSS_HOME: D:/javatool/jboss-3.2.7/bin//..
.
JAVA: D:/javatool/jdk1.5.0_06/bin/java
.
JAVA_OPTS: -Dprogram.name=run.bat
.
CLASSPATH: D:/javatool/jdk1.5.0_06/lib/tools.jar;D:/javatool/jboss-3.2.7/bin//
run.jar
.
===============================================================================
.
16:47:58,953 INFO [Server] Starting JBoss (MX MicroKernel)...
16:47:58,953 INFO [Server] Release ID: JBoss [WonderLand] 3.2.7 (build: CVSTag=
JBoss_3_2_7 date=200501280217)
16:47:58,968 INFO [Server] Home Dir: D:/javatool/jboss-3.2.7
16:47:58,968 INFO [Server] Home URL: file:/D:/javatool/jboss-3.2.7/
16:47:58,968 INFO [Server] Library URL: file:/D:/javatool/jboss-3.2.7/lib/
16:47:58,968 INFO [Server] Patch URL: null
16:47:58,968 INFO [Server] Server Name: default
16:47:58,968 INFO [Server] Server Home Dir: D:/javatool/jboss-3.2.7/server/defa
ult
16:47:58,968 INFO [Server] Server Home URL: file:/D:/javatool/jboss-3.2.7/serve
r/default/
16:47:58,968 INFO [Server] Server Data Dir: D:/javatool/jboss-3.2.7/server/defa
ult/data
16:47:58,968 INFO [Server] Server Temp Dir: D:/javatool/jboss-3.2.7/server/defa
ult/tmp
16:47:58,968 INFO [Server] Server Config URL: file:/D:/javatool/jboss-3.2.7/ser
ver/default/conf/
16:47:58,968 INFO [Server] Server Library URL: file:/D:/javatool/jboss-3.2.7/se
rver/default/lib/
16:47:58,968 INFO [Server] Root Deployment Filename: jboss-service.xml
16:47:58,968 INFO [Server] Starting General Purpose Architecture (GPA)...
16:47:59,312 INFO [ServerInfo] Java version: 1.5.0_06,Sun Microsystems Inc.
16:47:59,312 INFO [ServerInfo] Java VM: Java HotSpot(TM) Client VM 1.5.0_06-b05
,Sun Microsystems Inc.
16:47:59,312 INFO [ServerInfo] OS-System: Windows XP 5.1,x86
16:47:59,625 INFO [Server] Core system initialized
16:48:04,281 INFO [Log4jService$URLWatchTimerTask] Configuring from URL: resour
ce:log4j.xml
16:48:04,890 INFO [WebService] Using RMI server codebase: http://YXB:8083/
16:48:06,203 INFO [NamingService] Started jndi bootstrap jnpPort=1099, rmiPort=
1098, backlog=50, bindAddress=/0.0.0.0, Client SocketFactory=null, Server Socket
Factory=org.jboss.net.sockets.DefaultSocketFactory@ad093076
16:48:10,828 INFO [Embedded] Catalina naming disabled
16:48:11,890 INFO [Http11Protocol] Initializing Coyote HTTP/1.1 on http-0.0.0.0
-8080
16:48:11,937 INFO [Catalina] Initialization processed in 1016 ms
16:48:11,937 INFO [StandardService] Starting service jboss.web
16:48:11,937 INFO [StandardEngine] Starting Servlet Engine: Apache Tomcat/5.0.3
0
16:48:11,968 INFO [StandardHost] XML validation disabled
16:48:12,000 INFO [Catalina] Server startup in 63 ms
16:48:12,187 INFO [TomcatDeployer] deploy, ctxPath=/invoker, warUrl=file:/D:/ja
vatool/jboss-3.2.7/server/default/deploy/http-invoker.sar/invoker.war/
16:48:14,562 INFO [TomcatDeployer] deploy, ctxPath=/, warUrl=file:/D:/javatool/
jboss-3.2.7/server/default/deploy/jbossweb-tomcat50.sar/ROOT.war/
16:48:14,968 INFO [TomcatDeployer] deploy, ctxPath=/jbossmq-httpil, warUrl=file
:/D:/javatool/jboss-3.2.7/server/default/deploy/jms/jbossmq-httpil.sar/jbossmq-h
ttpil.war/
16:48:16,921 INFO [RARMetaData] Loading JBoss Resource Adapter for JDBC 2 XA dr
ivers
16:48:16,937 INFO [RARMetaData] Required license terms present. See deployment
descriptor.
16:48:23,031 INFO [MailService] Mail Service bound to java:/Mail
16:48:23,796 INFO [DefaultDS] Bound connection factory for resource adapter for
ConnectionManager 'jboss.jca:service=LocalTxCM,name=DefaultDS to JNDI name 'jav
a:/DefaultDS'
16:48:24,781 INFO [A] Bound to JNDI name: queue/A
16:48:24,781 INFO [B] Bound to JNDI name: queue/B
16:48:24,781 INFO [C] Bound to JNDI name: queue/C
16:48:24,796 INFO [D] Bound to JNDI name: queue/D
16:48:24,796 INFO [ex] Bound to JNDI name: queue/ex
16:48:24,828 INFO [testTopic] Bound to JNDI name: topic/testTopic
16:48:24,828 INFO [securedTopic] Bound to JNDI name: topic/securedTopic
16:48:24,828 INFO [testDurableTopic] Bound to JNDI name: topic/testDurableTopic
16:48:24,843 INFO [testQueue] Bound to JNDI name: queue/testQueue
16:48:24,937 INFO [UILServerILService] JBossMQ UIL service available at : /0.0.
0.0:8093
16:48:25,312 INFO [DLQ] Bound to JNDI name: queue/DLQ
16:48:25,500 INFO [JmsXA] Bound connection factory for resource adapter for Con
nectionManager 'jboss.jca:service=TxCM,name=JmsXA to JNDI name 'java:/JmsXA'
16:48:25,500 INFO [socialDs] Bound connection factory for resource adapter for
ConnectionManager 'jboss.jca:service=LocalTxCM,name=socialDs to JNDI name 'java:
/socialDs'
16:48:27,625 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=file:/D
:/javatool/jboss-3.2.7/server/default/deploy/jmx-console.war/
16:48:27,906 INFO [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=file:/D
:/javatool/jboss-3.2.7/server/default/deploy/management/web-console.war/
16:48:28,968 INFO [TomcatDeployer] deploy, ctxPath=/oracle-test, warUrl=file:/D
:/javatool/jboss-3.2.7/server/default/deploy/oracle-test.war/
16:48:32,203 INFO [TomcatDeployer] deploy, ctxPath=/wapweb, warUrl=file:/D:/jav
atool/jboss-3.2.7/server/default/tmp/deploy/tmp38022wapweb.war/
16:48:33,031 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-808
0
16:48:33,359 INFO [ChannelSocket] JK2: ajp13 listening on /0.0.0.0:8009
16:48:33,531 INFO [JkMain] Jk running ID=0 time=0/375 config=null
16:48:33,578 INFO [Server] JBoss (MX MicroKernel) [3.2.7 (build: CVSTag=JBoss_3
_2_7 date=200501280217)] Started in 34s:16ms
这就表示JBOSS已经启动成功了,默认的端口是8080。你就可以在IE浏览栏里输入http://localhost:8080/,如果能看到JBOSS的欢迎画面,这样JBOSS就成功安装了。
欢迎画面如上,你可以选择链接进入,并对JBOSS相关配置进行管理。值得说明的是,JBOSS集成了TOMCAT。
4.JBoss的简单应用
在此列一个在JBOSS里面连接Oracle的例子。
首先进入JBOSS安装目录下,D:/javatool/jboss-3.2.7/server/default/deploy;文件hsqldb-ds.xml是配置数据库链接的属性文件,你可以复制hsqldb-ds.xml然后更名为oracle-ds.xml,文件内容修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: oracle-ds.xml,v 1.1.2.4 2003/09/17 03:46:01 ejort Exp $ -->
<!-- ==================================================================== -->
<!-- Datasource config for Oracle originally from Steven Coy -->
<!-- ==================================================================== -->
<datasources>
<local-tx-datasource>
<jndi-name>socialDs</jndi-name>
<!--<connection-url>jdbc:oracle:thin:@192.168.1.230:1521:ora9</connection-url>-->
<connection-url>jdbc:oracle:thin:@202.103.67.175:5012:newwapdb</connection-url>
<!--
Here are a couple of the possible OCI configurations.
For more information, see http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm
<connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>
or
<connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url>
Clearly, its better to have TNS set up properly.
-->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>wapwork</user-name>
<password>wapmanager</password>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
</local-tx-datasource>
</datasources>
当然,你得修改一些适应你数据库得一些配置,比如用户名啊,数据库地址啊。
然后在这个目录下建立一个oracle-test.war目录,注意目录的名称是以.war结尾的,这样发布的时候会自动加载。
作为一个站点目录,这个目录里需要WEB-INF目录。里面的内容为空也行,也可以拷贝例子里的东西。在这个目录下建立一个index.jsp文件,内容如下:
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="GBK" %>
<%@ page import="java.sql.*, javax.sql.DataSource, javax.naming.InitialContext" %>
<h3>Test Oracle DB</h3>
<%
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/socialDs"); //注意这里哦和前面oracle-ds.xml对应
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT count(*) FROM BOOK");
while ( rs.next() ) {
out.println( rs.getInt(1) + "<br>");
out.println( "My name is Ahpo<br>");
}
conn.close();
%>
然后启动Jboss 在浏览器里输入http://localhost:8080/oracle-test就可以显示数据库连接的结果。