It计算机课件 JBoss使用指南_第1页
It计算机课件 JBoss使用指南_第2页
It计算机课件 JBoss使用指南_第3页
It计算机课件 JBoss使用指南_第4页
It计算机课件 JBoss使用指南_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

神州数码融信质量管理体系

JBOSS使用指南

Releasevl.O

[jimmy(yang,kun),于2008-05-12编写]

JAVA编码规范与指南

神州数码

D^iUlCNna

—.JBOSS入门2

1.下载和安装JBoss2

2.JBoss的目录结构2

3.启动服务器3

4.JMX控制台4

5.停止服务器5

6.JBoss中的部署5

—.JBOSS的配置6

1.JBoss日志设置6

2.web服务的端口号的修改6

3.JBoss的安全设置7

3.1jmx-console登录的用户名和密码设置7

3.2web-console登录的用户名和密码设置9

4.JBoss数据源的配置12

5.JMS使用和设置14

5.1JMS消息的传递模型14

5.2JMS的配置16

三.川X原理和应用20

1.什么是JMX20

2.JMX规范21

3.基于JBoss来写MBean21

3.1HelioWorld实例21

3.2程序代码21

3.3配置文件jboss-service.xml22

3.4将实例部署到JBOSS22

3.5MBean的效果23

s四.EJB3.0使用说明25

1.EnterpriceJavaBeans(EJB)的概念25

1.1会话Bean:25

1.2实体Bean:26

1.3消息驱动Bean(MDB):26

2.会话Bean(SessionBean)26

2.1因为客户端需要通过JNDI查找EJB,那么JNDI是什么26

2.2StatelessSessionBeans(无状态bean)开发28

2.3StatelessSessionBean与StatefulSessionBean的区三别32

2.4SessionBean的生命周期32

3.消息马区动Bean(MessageDrivenBean)33

3.1Queue消息的发送与接收(PTP消息传递模型)33

3.2Topic消息的发送与接收(Pub/sub消息传递模型)39

4.实体Bean(EntityBean)44

4.1持久化persistence,xml配置文件44

4.2实体Bean发布前的准备工作45

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUtCMna

4.3单表映射的实体Bean45

.JBOSS入门

1.下载和安装JBoss

在下载和安装JBoss之前,请开发者确认一下自己的机器是否安装了最新版

的JVM。为运行JBoss4.2.2GA,开发者必须提供Java5虚拟机。在我们动身之

前,请再次检查一下您是否安装了合适的JDK,而月.JAVAJ0ME环境变量是否已

经设置好。

用户可以从JBoss网站(http://www.jboss.org/jbossas/downloads/)免

费下载到JBoss应用服务器。其中,可用的二进制版本格式分别有.zip、.tar.gz

以及.bz2。JBoss二进制发布版的具体内容与版本格式无关,用户需要根据各自

的平台选择相应的二进制版本。在您下载完成JBoss后,将它解压到合适的机器

位置上。有一点请注意,包含解压目录的完整路径(比如,Windows操作系统中

的ProgramFiles目录)上不能够含有空格,因为这将导致错误的出现。

2.JBOSS的目录结构

安装JBoss会创建下列目录结构:

目录描述

bin启动和关闭JBoss的脚本

client客户端与JBoss通信所需的Java库(JARs)

docs配置的样本文件(数据库配置等)

docs/dtd在JBoss中使用的各种XML文件的DTD。

lib一些JAR,JBoss启动时加载,且被所有用oss配置共

享。

server各种JBoss配置。每个配置必须放在不同的子目录。

子目录的名字表示配置的名字。

JBoss包含3个默认的配置:minimial,default和

all,在你安装时可以进行选择。

server/allJBoss的完全配置,启动所有服务,包括集群和HOP。

server/defaultJBoss的默认配置,它含有大部分J2EE应用所需的标

准服务。但是,它不含有JAXR服务、IIOP服务、或者

其他任何群集服务。

server/minimal这是启动JBoss服务器所要求的最低配置。minimal配置

将启动日志服务、JNDI服务器以及URL部署扫描器,

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

以找到待部署的(新)应用。对于那些不需要使用任

何其他J2EE技术,而只是使用自定义服务的场合而言,

则这种JMX/JBoss配置最适合。它仅仅是服务器,而

不包含Web容器、不提供EJB和川S支持。

server/default/conf含有指定JBoss核心服务的jboss-service.xml文件。同时,还包

括核心服务的其他配置文件。

server/default/data这一目录存储持久化数据,即使服务器发生重启其中的数据也

不会丢失。许多JBoss服务将数据存储在这里,比如Hypersonic

数据库实例。

server/default/deploy用户将应用代码(JAR\WAR\EAR文件)部署在此处。同时,

deploy目录也用于热部署服务(即,那些能够从运行服务器动

态添加或删除的服务)。因此,用户能够在deploy目录看到大

量的配置文件。尤其是,用户能够看到JMX控制台应用(未打

包的WAR文件),本书前面讨论过。JBoss服务器将定期扫描

该目录,从而查找是否有组件更新或修改,从而自动完成组件

的重新部署。

server/default/lib服务器配置所需的JAR文件.用户可以添加自身的库文件,比

如JDBC驱动,等等。

server/default/log日志信息将存储到该目录。JBoss使用JakartaLog4j包作为其日

志功能。同时,用户可以在应用中直接使用Log4j日志记录功

能。

server/default/tmp供部署器临时存储未打包应用使用,也可以作为其他用途。

server/default/work供编译JSP使用。

其中,data、log、tmp、work目录是JBoss创建的。如果用户没有启动过

川oss服务器,则这些目录不会被创建。

既然提到了JBoss中的热部署服务主题,接下来在探讨服务器配置问题前先

来看看实际例子。如果还没有启动JBoss,则请运行它。然后,请再次查看deploy

目录(用户必须保证运行了default配置),然后删除mail-service.xml文件,

通过运行JBoss服务器的控制台能够浏览到如下信息:

13:10:05,235INFO[MailService]Mailservice'java:/Mail'removed

fromJNDI

然后,再次将mail-service,xml文件放回原处,用户将通过控制台再次发

现JBoss重新部署了该服务。所以,这就是JBoss的热部署。

3.启动服务器

首先,来看看如何运行JBoss服务器。用户可以在JBoss主安装目录的bin

目录中找到若干个脚本文件。请执行run脚本(对于Windows,则运行run.bat;

对于Linux、OSX、UNIX系统,则运行run.sh)。默认jboss运行default配

置,如果要运行all配置请执行命令run-callo其中,部署和启动JBoss组

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

件的具体日志信息能够在运行JBoss的控制台浏览到。如下消息表明,JBoss服

务器成功运行:

11:18:46,828INFO[Server]JBoss(MXMicroKernel)[4.2.2.GA(build:

SVNTag=JBoss_4_2_2_GAdate=200710221139)]Startedin27s:94ms

用户可以通过Web浏览器验证JBoss应用服务器是否在运行,其HTTP监听

端口为8080(其中,必须保证在启动JBoss时,8080端口并没有被其他应用或

服务占用)。通过Web浏览器能够找到相关有用的JBoss资源(译者注:

http://localhost:8080)。

4.JMX控制台

通过http:〃localhost:8080/jmx-console,即JMX控制台应用,用户能够

浏览到服务器活动视图。图1.1给出了示例界面。上述界面给出了JBoss管理

控制台,它提供了构成JBoss服务器的川XMBean原始视图。我们暂时可以不用

理会控制台的任何内容,但是需要知道控制台能够提供运行中的JBoss应用服务

器的大量信息。另外,通过它,用户能够修改、启动、停止JBoss组件。比如,

请找到service=JNDIView链接,然后单击。该特定MBean提供了如下服务内容,

即能够浏览服务器中JNDI命名空间的结构信息。接下来,请在该MBean显示页

面底端找到list操作,然后单击invoke按钮。invoke操作将返回绑定到JNDI

树中的当前名字列表,这对于获得EJB名字很有帮助,比如当EJB应用客户端不

能够解析EJB名字时。

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUtCMna

JMXAgentViewplayphon-jimmy

ObjectNameAlter(e.g."jboss:*-,M*:service=lnvokeG*"):;IApplyFilter]

Catalina

•tyDKSneer

•tvpe=StrinqCache

JMImplementation

•name=Default.service=LoaderReposRory

•type=MBeanReqistrv

•tyDe=MBeanServe「Delegate

perties

•module=a「iuna

•module=ita

•module=txoi

jboss

•database=localDB,servics=Hvpersonic

•nanw=PropertyEditorManaqer.tyPe=Service

•name=SyntemPropertles.type=Service

•readonly=tnje.service=irwoker.ta>get=Naming.tyDe=htW

•service=AttcbutePersistenceService

•service=CliemUse「Transrction

图1-1JMX管理控制台Web应用视图

5.停止服务器

为了能够停止JBoss服务器,用户可以敲入Ctrl-C,或者从bin目录运行

shutdown脚本。甚至,用户还可以使用管理控制台(请在jboss.system部分找

到type=Server,然后调用shutdown操作。)。

6.JBoss中的部署

JBoss中的部署过程非常的简单、直接。在每一个配置中,JBoss不断的扫

描一个特殊目录的变化:

[jboss安装目录]/server/config-name/deploy

此目录一般被称为“部署目录”。

你可以把下列文件拷贝到此目录下:

*任何jar库(其中的类将被自动添加到JBoss的classpath中)

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

*EJBJAR

*WAR(WebApplictionaRrchive)

*EAR(EnterpriseApplicationaRchive)

*包含JBossMBean定义的XML文件

*一个包含EJBJAR、WAR或者EAR的解压缩内容,并以.jar、,war或者.ear

结尾的目录。

要重新部署任何上述文件(JAR、WAR、EAR、XML等),用新版本的文件覆

盖以前的就可以了。JBoss会根据比较文件的时间发现改变,然后部署新的文件,

要重新部署一个目录,更新他的修改时间即可。

.JBOSS的配置

1.JBoss日志设置

Log4j是JBoss使用的日志功能包。通过conf/jboss-log4j.xml文件能够控

制JBoss的日志功能。该文件定义了一套Appender、指定了日志文件、具体消

息Category类型的存储、消息格式以及消息的过滤级别。默认时,JBoss会同

时在控制台和日志文件(位于log/server,log文件中)中生成输出信息。一共

存在5个基本的日志级别:DEBUG、INFO、WARN、ERROR以及FATAL。其中,控制

台的日志入口(threshold)为INFO,即用户通过控制台能够浏览到提示信息、

警告信息、错误信息,但是调试信息查看不到。相比之下,JBoss并没有为

server.log文件设置任何入口,因此所有生成的消息将记录到server.log文件

中。如果JBoss运行过程中出现了错误,则通过控制台可能找不到用户有用的信

息、,因此建议通过server,log文件查看是否有调试信息可供解决问题所用。然

而,请注意,通过调整日志入口能够在控制台查看到调试信息,但是这并没有保

证所有的JBoss消息都将记录到server.log文件中。因此,用户还需要为单个

的Category设置不同的日志级别。比如,jbossTog4j.xml给出了如下Category.,

<!—Limittheorg.apachecategorytoINFOasitsDEBUGisverbose—>

<categoryname="org.apache">

<priorityvalue="INFO"/>

</category>

2.web服务的端口号的修改

这点在前文中有所提及,即修改用OSS安装目录

server/default/deploy/jboss-web.deployer下的server,xml文件,内容如下:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

<Connectorport=n8080naddress="${jboss.bind.address}H

maxThreads=n250nmaxHttpHeaderSize=n8192u

emptySessionPath=,,true!,protocol=nHTTP/l.1n

enableLookups=nfalsenredirectPort=n8443nacceptCount="100n

connectionTimeout=n20000ndisab!eUploadTimeout=ntruen/>

将上面的8080端口修改为你想要的端口即可。重新启动JBoss后访问:

http:〃localhost/:新设置的端口,可看到JBoss的欢迎界面。

3.JBoss的安全设置

3.1jmx-console登录的用户名和密码设置

默认情况访问http:〃localhost:8080/jmx-console就可以浏览jboss的

部署管理的一些信息,不需要输入用户名和密码,使用起来有点安全隐患。下面

我们针对此问题对jboss进行配置,使得访问jmx-console也必须要知道用户名

和密码才可进去访问。步骤如下:

3.1.1修改jboss-web.xml文件

打开/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml

文件,去掉〈security-domain>java:/jaas/jmx-console</security-domain>fi\J

注释。修改后的该文件内容为:

<jboss-web>

<!—Uncommentthesecurity-domaintoenablesecurity.Youwill

needtoeditthehtmladaptorloginconfigurationtosetupthe

loginmodulesusedtoauthenticationusers.—>

<security-domain>java:/jaas/jmx-console</security-domain>

</jboss-web>

3.1.2修改web.xml文件

与3.1.1中的jboss-web.xml同级目录下的web.xml文件,查找到

〈security-constraint/》节点,去掉它的注释,修改后该部分内容为:

<!-AsecurityconstraintthatrestrictsaccesstotheHTMLJMXconsole

touserswiththeroleJBossAdmin.Edittherolestowhatyouwantand

uncommenttheWEB-INF/jboss-web.xml/security-domainelementtoenable

securedaccesstotheHTMLJMXconsole.—>

<security-constraint>

<web-resource-collection>

<web-resource-name>HtmlAdaptor</web-resource-name>

<description>Anexamplesecurityconfigthatonlyallowsuserswiththe

神州数码融信质量管理体系

-eJAVA编码规范与指南

神州数国

/ZcD^iUtCMna

roleJBossAdmintoaccesstheHTMLJMXconsolewebapplication

</description>

<url-pattern>/*</url-pattem>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>JBossAdmin</role-name>

</auth-constraint>

</security-constraint>

在此处可以看出,为登录配置了角色JBossAdmin。

3.1.3修改login-config.xml文件

在第一步中的jmx-console安全域和第二步中的运行角色JBossAdmin都

是在login-config.xml中配置,我们在JBoss安装目录

/server/default/config下找至U它。查找名字为:jmx-console的

application-policy:

<application-policyname=njmx-consolen>

<authentication>

<login-module

code=norg.jboss.security.auth.spi.UsersRolesLoginModulen

flag="required”>

<module-option

name=nusersPropertiesM>props/perties</module-option>

<module-option

name=nrolesPropertiesH>props/perties</module-option>

</login-module>

</authentication>

</application-policy>

在此处可以看出,登录的角色、用户等的信息分别在props目录下的

jmx-console-roles.properties和jmx-console-users.properties文件中设

置,分别打开这两个文件。

其中jmx-console-users.properties文件的内容如下:

神州数码融信质量管理体系

-eJAVA编码规范与指南

神州数国

/ZcD^iUtCMna

#AsamplepertiesfileforusewiththeUsersRolesLoginModule

admin=admin

该文件定义的格式为:用户名二密码,在该文件中,默认定义了一个用户名

为admin,密码也为admin的用户,读者可将其改成所需的用户名和密码。

jmx-console-roles.properties的内容如下:

#AsamplepertiesfileforusewiththeUsersRolesLoginModule

admin=JBossAdmin,Httpinvoker

该文件定义的格式为:用户名二角色,多个角色以隔开,该文件默认为

admin用户定义了JBossAdmin和Httpinvoker这两个角色。

配置完成后读者可以通过访问:http:〃loc成后st:8可以jmx-console/,

输入jmx-console-roles.properties文件中定义的用户名和密码,访问

jmx-console的页面。如图:

JBossOnlineResources

•JBossDocuEuntation

•JBossWM

•JBomsJIRA

•J巳owsFOHJEU

JBossManagement

•ToEcatmtatum汗ulli(XMLi

•JMX•二。Mole

•JBsmWebCGCSOIS

3.2web-console登录的用户名和密码设置

默认情况下,用户访问JBoss的web-console时,不需要输入用户名和密码,

为了安全起见,我们通过修改配置来为其加上用户名和密码。步骤如下:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

3.2.1修改jboss-web.xml文件

打开server/default/deploy/management/console-mgr.sar

/web-console.war/WEB-INF/jboss-web.xml文件,去掉

<security-domain>java:/jaas/web-console</security-domain>fl\lYi#,修改

后的文件内容为:

<?xmlversion=,1.0,encoding-UTF-81?>

<!DOCTYPEjboss-web

PUBLICn-//JBoss//DTDWebApplication2.3V2//ENn

"42ee/dtd/jboss-web_3_2.dtd">

<jboss-web>

<!—Uncommentthesecurity-domaintoenablesecurity.Youwill

needtoeditthehtmladaptorloginconfigurationtosetupthe

loginmodulesusedtoauthenticationusers.—>

<security-domain>java:^aas/web-console</security-domain>

<!-Thewardependsonthe—>

<depends>jboss.admin:service=PluginManager</depends>

</jboss-web>

3.2.2修改web.xml文件

打开3.2.1中jboss-web.xml同目录下的web.xml文件,去掉

〈security-constraint>部分的注释,修改后的该部分内容为:

<!—AsecurityconstraintthatrestrictsaccesstotheHTMLJMXconsole

touserswiththeroleJBossAdmin.Edittherolestowhatyouwantand

uncommenttheWEB-INF/jboss-web.xml/security-domainelementtoenable

securedaccesstotheHTMLJMXconsole.—>

<security-constraint>

<web-resource-collection>

<web-resource-name>HtmlAdaptor</web-resource-name>

<description>Anexamplesecurityconfigthatonlyallowsuserswiththe

roleJBossAdmintoaccesstheHTMLJMXconsolewebapplication

</description>

<url-pattern>/*</url-pattem>

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUtCMna

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>JBossAdmin</role-name>

</auth-constraint>

</security-constraint>

3.2.3修改login-config.xml文件

打开JBoss安装目录server/default/conf下的login-config.xml文件,

搜索web-console,可找到如下内容:

<application-policyname=nweb-consolen>

<authentication>

<login-module

code=norg.jboss.security.auth.spi.UsersRolesLoginModulen

flag="required”>

<module-option

name=,,usersPropertiesn>perties</module-option>

<module-option

name=nrolesPropertiesn>perties</module-option>

</login-module>

</authentication>

</application-policy>

在文件中可以看到,设置登录web-console的用户名和角色等信息分别在

login-config,xml文件所在目录下的web-console-users,properties和

web-console-roles,properties文件中,但因为该目录下无这两个文件,我们

在JBoss安装目录server/default/conf/props三目录下建立这两个文件,文件

内容可参考在"jmx-console登录的用户名和密码设置”中的两个相应的配置文

件的内容,web-console-users,properties文件的内容如下:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

#AsamplepertiesfileforusewiththeUsersRolesLoginModule

admin=admin

web-console-roles,properties文件的内容如下:

#AsamplepertiesfilefbrusewiththeUsersRolesLoginModule

admin=JBossAdmin,Httpinvoker

因为此时这两个文件不与login-config.xml同目录,所以

login-config,xml文件需进行少许修改,修改后的〈application-policyname=

〃web-console〃>元素的内容为:

<application-policyname=nweb-consolen>

<authentication>

<login-module

code=norg.jboss.security.auth.spi.UsersRolesLoginModulen

flag="required">

<module-option

name=nusersPropertiesn>props/perties</module-option>

<module-option

name=nrolesPropertiesn>props/perties</module-option>

</login-module>

</authentication>

</application-policy>

4.JBoss数据源的配置

在jboss路径\docs\examples\jca目录下有各种数据库配置文件的样本。选择一个你合

适的,copy到server\all\deploy或server\default\deploy卜,我们以msserver数据库为

列,然后修改其中的如下内容:

<?xmlversion-11.0°encoding=,,UTF-8H?>

<datasources>

神州数码融信质量管理体系

-eJAVA编码规范与指南

神州数图

D^iUtCMna

<Iocal-tx-datasource>

<jndi-name>DEV_MSSQLDS</jndi-name>

j」二____

<connection-url>jdbc:sqlserver://01:1455;DatabaseName=Beta_Core_Ps

msg_Beta6</connection-url>

<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>

<user-name>ppcn_beta6</user-name>

<password>ppcn_beta6</password>

v!-最小连接池数目一>

<min-pool-size>5</min-pool-size>

v!—最大连接池数目一〉

<max-pool-size>800</max-pool-size>

<!-数据库连接空闲时间,单位为分钟,如果负载较大,可以设为5,如果

•般,可以设为3—>

<idle-timeout-minutes>5</idle-timeout-minutes>

<!—correspondingtype-mappinginthestandardjbosscmp-jdbc.xml—>

<metadata>

<type-mapping>MSSQLSERVER2000</type-mapping>

</metadata>

</local-tx-datasource>

</datasources>

如果后台没有报异常,通过http:〃localhost:8080/imx・console进入imx控制台,

在jdbc栏目可以看到以下内容:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUtCMna

jboss.jdbc

•datasource=DEVMSSQLDS.service=metadata

•datasource=DefaultDS,service=metadata

•service=SQLExceDtionProcessor

•service=metadata

代码示例:

javax.naming.lnitialContextctx=newlnitialContext();

javax.sql.DataSourceds=(DataSource)ctx.lookup(/,java:/DEV_MSSQLDS,z);

另外请注意:该配置文件可"随意〃命名为XXXX-ds.xml,该命名的后辍请〃

确保"为"-ds.xml”。

5.JMS使用和设置

Java消息服务(JavaMessageService,简称JMS)是企业级消息传递系统,

紧密集成于JbossServer平台之中。企业消息传递系统使得应用程序能够通过

消息的交换与其他系统之间进行通信。

下图说明jbossJMS消息传递。

JbossJMS

应用程序A>应用程序B

消息生成器消息使用者

5.1JMS消息的传递模型

JMS支持两种消息传递模型:点对点(point-to-point,简称PTP)和发布/

订阅(publish/subscribe,简称pub/sub)这两种消息传递模型非常相似,只

有以下区别:PTP消息传递模型规定了一条消息只能传递给一个接收方。Pub/sub

消息传递模型允许一条消息传递给多个接收方。每种模型都通过扩展公用基类来

实现。例如,PTP类javax.jms.Queue和pub/sub类javax.jms.Topic都扩展

javax.jms.Destination类。

5.1.1点对点消息传递

通过点对点(PTP)的消息传递模型,一个应用程序可以向另一个应用程序发送消息。

PTP消息传递应用程序使用命名队列发送接收消息。队列发送方(生成者)向特定队列发

送消息。队列接收方(使用者)从特定队列接收消息。

下图说明PTP消息传递。

神州数码融信质量管理体系

(队列发送方)(队列接收方)

一个队列可以关联多个队列发送方和接收方,但一条消息仅传递给一个队列接收方。如

果多个队列接收方正在监听队列上的消息,jbossJMS将根据“先来者优先”的原则确定由

哪个队列接收方接收下一条消息。如果没有队列接收方在监听队列,消息将保留在队列中,

直至队列接收方连接队列为止。

5.1.2发布/订阅消息传递

仅仅允通过发布/订阅(pub/sub)消息传递模型,应用程序能够将一条消息发送到多个

应用程序。Pub/sub消息传递应用程序可通过订阅主题来发送和接收消息。主题发布者(生

成器)可向特定主题发送消息。主题订阅者(使用者)从特定主题获取消息。

下图说明pub/sub消息传递。

监听

(蠹器翥建需蠹,

与PTP消息传递模型不同,pub/sub消息传递模型允许多个主题订阅者接收同一条消

息。JMS一直保留消息,直至所有主题订阅者都收到消息为止。

上面两种消息传递模型里,我们都需要定义消息发送者和接收者,消息发送者把消息发

送到JbossJMS某个Destination,而消息接收者从JbossJMS的某个Destination里获取消息。

消息接收者可以同步或异步接收消息,一般而言,异步消息接收者的执行和伸缩性都优于同

步消息接收者,体现在:

1.异步消息接收者创建的网络流量比较小。单向推动消息,并使之通过管道进入消息

监听器。管道操作支持将多条消息聚合为••个网络调用。

2.异步消息接收者使用的线程比较少。异步消息接收者在不活动期间不使用线程。同

步消息接收者在接收调用期间内使用线程。结果,线程可能会长时间保持空闲,尤其是如果

该调用中指定了阻塞超时。

3-对于服务器上运行的应用程序代码,使用异步消息接收者几乎总是最佳选择,尤其

是通过消息驱动Bean。使用异步消息接收者可以防止应用程序代码在服务器上执行阻塞操

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

作。而阻塞操作会使服务器端线程空闲,甚至会导致死锁。阻塞操作使用所有线程时则发生

死锁。如果没有空余的线程可以处理阻塞操作自身解锁所需的操作,则该操作永远无法停止

阻塞。

Message-DrivenBean由EJB容器进行管理,具有--般的JMS接收者所不

具有的优点,如对于一个Message-drivenBean,容器可创建多个实例来处理大

量的并发消息,而一般的川S使用者(consumer)开发时则必须对此进行处理才

能获得类似的功能。同时Message-DrivenBean可取得EJB所能获得的标准服

务,如容器管理事务等服务。

5.2JMS的配置

当使用一个JMSProvider时,有三个Provider-specific因素:

A得到一个JNDI初始化上下文

B用到的连接工厂的名字。

C对目的地的管理和命名协定。

JBoss同它的JNDI一起执行。为了简单的川Sclient,配置和查找初始化

上下文,同实现其他J2EE客户端一样。JMS-specific来约束1TBoss的JMS

provider(JBossMQ)0JbossMQ是通过xml文件jbossmq-service.xml进行配置

的,该文件放在在server/default/deploy/jms下。

5.2.1增加新的消息队列

修改文件jbossmq-destinations-service.xml,文件在jboss目录

(server/default/deploy/jms/)q在文件中已经存在几个缺省的目的地,所以

你比较容易明白怎样增加到文件中。例如你需要增加一个TestQName的Queue,

所以增加下面的语句到jbossmq-destinations-service.xml中。这种方式是长

久存在的,不随着JBoss服务器关闭而消失。

<mbeancode="org.jboss.mq.server.jmx.Queue"

name="jboss.mq.destination:service=Queue,name="TestQName">

<depends

optional-attribute-name="DestinationManager">jboss.mq:service=DestinationMa

nager</depends>

</mbean>

另外一种方法是可以通过JMXHTML管理界面。通过

http://localhost:8080/jmx-console来访问。在jboss.mq下查找

service=DestinationManager的连接。然后在createTopic()或createQueue()

来建立。如图:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUtCNna

voidcreateQueue()

MBeanOperation.

|ParamParamTypeParamValueParamDescription[

pljava.lang.StringTestQName(nodescription)

]Invoke]

在ParamValue里输入Queue的名字,用鼠标点击Invoke在

jboss.mq.destination下可以看至name=TestQName,service=Queue,如图:

jboss.mq.destination

•name=A,service=Queur

•name=B.servicn=Queue

•name=C.servicn=Queur

•name=D$ervice=Queur

•name=DEVTEST.service=Queur

•name=DLQ.service=Queur

•name=TestQ.service=Queur

•name=TestQName,service=Queur

•name=ex.5ervice=Queur

•name=foshanshop.servics=Queur

•name=securedTomc,service=Topic

•name=5tudent.nervice=T0Dic

•name=testDurableToDiaservice=ToDic

•name=testQueue.service=Queur

•name=testTopiaservice=Topic

这种方法建立的目的地是临时性的,随着服务器开始存在,当川OSS服务器

重新启动时,动态建立的目的地将会不存在。在JbossMQ中所有目的地都有一个

目的地类型的前缀。对于topic前缀是topic,对于queue前缀是queue。例如

查找一个TestQName的名字,需要查找名字为"queue/TestQName”。

在此种方法中有createTopicO或createQueue()分别有两种方法:一是有两个

参数,二是有一个参数的。两个参数分别是:建立的目的地名称和JNDI名称。

一个参数的只是目的地名称,对于JNDI名称默认是:[目的地类型

(topic/queue)"目的地名称。在这里我们使用的是第一种方法。直接修改

jbossmq-destinations-service.xml文件。

5.2.2连接工厂

JBossMQ包括为topic和queue几个不同的连接工厂,每个连接工厂有自己

特性。当通过JNDI来查找一个连接工厂时,需要知道此连接工厂的名称。所有

可用连接工厂和它们的属性,名称都会在文件jbossmq-service.xml中。

有三种类型连接工厂,依赖的通讯协议如下:

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

OIL

快速双向scoket通讯协议。它是缺省的。

UIL

超过一个socket协议,可以使用在通过防火墙访问,或者当客户端不能正确的

查找到服务器的IP地址。

RMI

最早的协议,是稳定的,但是比较慢。

JVM

在JBoss2.4之后增加的一个新的连接工厂类型。不需要用socket,当客户端

和JbossMQ使用同样虚拟机时,可以使用。在JBoss2.4.1以后版本中,对于

topic-和queue-目的地,连接工厂使用同样的名字。下表列出了在JBoss中

JMS连接工厂:

目的地类型JNDI名字连接工厂类型

Topic/Queuejava:/ConnectionFactoryJVM

Topic/Queuejava:/XAConnectionFactoryJVM支持XA事务

Topic/QueueRMIConnectionFactoryRMI

Topic/QueueRMIXAConnectionFactoryRMI支持XA事务

Topic/QueueConnectionFactoryOIL

Topic/QueueXAConnectionFactoryOIL支持XA事务

Topic/QueueUlLConnectionFactoryUIL

Topic/QueueUlLXAConnectionFactoryUIL支持XA事务

5.2.1消息存储模式配置

在jboss路径\docs\examples\jms目录下有各种jms数据源配置文件的样本。选择一

个你合适的,copy到server\all\deploy\jms或server\default\deploy\jms下,我们以

msserver数据库为列,然后修改其中的如下内容:

<?xmlversion="1.0"encoding="UTF-8"?>

<!--$Id:mssql-jdbc2-service.xml633692007-06-0522:22:14Zdbhole$—>

<server>

<!-

|ThedestinationmanageristhecoreservicewithinJBossMQ

->

<mbeancode="org.jboss.mq.server.jmx.DestinationManager"

name="jboss.mq:service=DestinationManager">

<depends

optional-attribute-name="MessageCache">jboss.mq:service=MessageCache</depend

<depends

optional-attribute-name="PersistenceManager">jboss.mq:service=PersistenceManage

r</depends>

<depends

神州数码融信质量管理体系

JAVA编码规范与指南

神州数码

D^iUlCNna

optional-attribute-name=,,StateManagern>jboss.mq:service=StateManager</depends>

</mbean>

<mbeancode=norg.jboss.mq.server.MessageCachen

name=,,jboss.mq:service=MessageCachen>

<attributename=,,HighMemoryMarkn>50</attribute>

<attributename=HMaxMemoryMarkn>60</attribute>

<attribute

name=,,CacheStoren>jboss.mq:service=PersistenceManager</attribute>

</mbean>

<mbeancode="org.jboss.mq.pm.jdbc2.MSSQLPersistenceManager”

name=ujboss.mq:service=PersistenceManagern>

<depends

optional-attribute-name=nConnectionManagern>jboss.jca:service=DataSourceBinding,

name=DEV_MSSQLDS</depends>

<attributename=nSqlPropertiesn>

BLOB_TYPE=BINARYSTREAM_BLOB

INSERTTX=INSERTINTOJMSTRANSACTIONS(TXID)values(?)

INSERTMESSAGE=INSERTINTOJMSMESSAGES(MESSAGEID,

DESTINATION,MESSAGEBLOB,TXID,TXOP)VALUES(?,?,?,?,?)

SELECT_ALL_UNCOMMITED_TXSSELECTTXIDFROM

JMS_TRANSACTIONS

SELECTMAXTX=SELECTMAX(TXID)FROMJMSMESSAGES

DELETE_ALL_TX=DELETEFROMJMS_TRANSACTIONS

SELECT_MESSAGES_IN_DESTSELECTMESSAGEID,

MESSAGEBLOBFROMJMSMESSAGESWHEREDESTINATION=?

SELECTMESSAGEKEYSJNDEST=SELECTMESSAGEIDFROM

JMSMESSAGESWHEREDESTINATION=?

SELECTMESSAGE=SELECTMESSAGEID,MESSAGEBLOBFROM

JMSMESSAGESWHEREMESSAGEID=?ANDDESTINATION=?

MARKMESSAGE=UPDATEJMS_MESSAGESSETTXID=?,TXOP=?

WHEREMESSAGEID=?ANDDESTINATION=?

UPDATE_MESSAGEUPDATEJMS_MESSAGESSET

MESSAGEBLOB=?WHEREMESSAGEID=?ANDDESTINATION=?________

UPDATE_MARKED_MESSAGES=UPDATEJMS_MESSAGESSET

TXID=?,TXOP=?WHERETXOP=?

UPDATEMARKEDMESSAGESWITHTXUPDATE

JMS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论