jboss学习总结.docx
- 文档编号:6337237
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:20
- 大小:239.88KB
jboss学习总结.docx
《jboss学习总结.docx》由会员分享,可在线阅读,更多相关《jboss学习总结.docx(20页珍藏版)》请在冰豆网上搜索。
jboss学习总结
Jboss学习总结
一.概述
1.jboss是什么
资料:
JBoss是一个基于J2EE的开放源代码的应用服务器。
JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3.0的规范。
但JBoss核心服务不包括支持serverl/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
*note:
JBOSS其实是一个服务框架,它本身不支持web服务,但是它可以绑定tomcat等服务器,这使得它可以作为web服务器。
2.jboss的组成
资料:
JBoss架构由jxm,XBeam服务器,微内核,一套可插入的组建服务以及MBEAN构成的。
*note:
jboss为ejb提供服务,它为EJB的开发提供了一套接口,可以方便的在Jboss平台上开发EJB;Jboss还为EJB的管理提供了jxm控制台,它可以使用户能够浏览到服务器的活动,可以很方便地查找和管理到各个BEAN。
3.Jboss的安装与启动
(1).jboss的安装
资料:
JBOSS在安装的时候可以选择3个版本:
all、default以及minimal。
minimal:
这是启动JBoss服务器所要求的最低配置。
minimal配置将启动日志服务、JNDI服务器以及URL部署扫描器,以找到待部署的(新)应用。
对于那些不需要使用任何其他J2EE技术,而只是使用自定义服务的场合而言,则这种JMX/JBoss配置最适合。
它仅仅是服务器,而不包含Web容器、不提供EJB和JMS支持。
default:
默认配置,它含有大部分J2EE应用所需的标准服务。
但是,它不含有JAXR服务、IIOP服务、或者其他任何群集服务。
all:
提供了所有可用的服务。
它包含RMI/IIOP和群集服务,default配置中没有提供群集服务。
*note:
有一点需要注意,包含解压目录的完整路径(比如,Windows操作系统中的ProgramFiles目录)上不能够含有空格,因为这将导致错误的出现。
(2).jboss的启动与关闭
资料:
在jboss的安装目录下面有一个bin文件夹,其中有两个主要的批处理文件:
run.bat和shutdown.bat。
要启动JBoss只要执行run.bat文件即可;要停止JBoss必须执行shutdown.bat。
*note:
每次启动jboss的时候都要双击run.bat比较麻烦,将它放在桌面上做个快捷方式,设置一个快捷键将方便许多;关闭jboss除了运行shutdowm.bat还可以在jboss运行的cmd窗口上按ctrl+c即可关闭。
(3)在MyEclipse中配置Jboss
在Myeclipse中打开window->preferences选项设置卡。
然后选择MyeclipseEnterpriceWorkbench->servers->Jboss->Jboss4.0中配置,如图
在Jbosshomedirectory中选到Jboss的根目录,然后选择上面的Enable就OK了,这时Myeclipse就有Jboss服务了。
Jboss在Myeclise中的使用和Tomcat类似,首先将工程发布:
点击这个
按钮,就可以想tomcat一样发布了,然后运行Jboss服务器
选择Start,Jboss服务器便启动了。
4.Jboss文件结构
bin:
含有启动、停止以及其他系统相关脚本。
在前面,本书已经讨论过启动JBoss应用服务器的run脚本。
client:
存储供Java客户应用或者外部Web容器使用的配置文件和JAR文件。
用户可以使用所需要的具体存档,或者仅仅使用jbossall-client.jar。
docs:
含有JBoss引用的XMLDTD文件(当然,还包括JBoss具体配置文件)。
同时,还存在JCA(JavaConnetorArchitecture,Java连接器架构)实例配置文件,供设置不同数据库的数据源使用(比如MySQL、Oracle、Postgres)。
lib:
包含运行JBoss微内核所需的JAR文件。
请注意,不要往该目录添加用户自身的任何JAR文件。
server:
包含的各个子目录都是不同的服务器配置。
通过往run脚本后添加-c
*Note:
其中最常用到的是sever->defalt->deploy这个文件夹,我们开发的服务都需要放在这个文件夹中,Jboss会自动地加载这里面包含的所有服务。
二.在Jboss平台上开发EJB
1.EJB概述
EJB(EnterpriseJavaBeans)像JavaBean一样,是一种组件,但是EJB运行在服务器端,在J2EE体系中,它完成BusinessLogic的功能。
EJB有3种类型:
1.SessionBean(会话Bean)
SessionBean是完成一些具体事务的类。
2.MessageDriverBean(消息驱动Bean)
MessageDriverBean是侦听某个消息队列的消息接收者,消费者。
3.EntityBean(实体Bean)
EntityBean是与数据库中的表发生O/R映射的类,相当于hibarnate框架中的POJO。
一般用SessionBean来操作EntityBean,SessionBean相当于DAO。
2.SessionBean(会话Bean)
1.SessionBean的开发
SessionBean就是一些特殊的JAVA类,当它发布到Jboss服务器中时,别的客户端可以通过Jndi得到它的实例,从而调用它的方法。
示例代码:
MySession接口:
importjavax.ejb.Remote;
importjavax.ejb.Local;
@Remote
@Local
publicinterfaceMySession{
doubleaddition(doublefirst,doublesecond);
}
说明:
@Remote//这个标注说明MySession可以是远程接口,实现该接口的SessionBean可以被远程访问。
@Local//这个标注说明MySession可以是本地接口,实现该接口的SessionBean可以被本地访问(客户机程序和SessionBean在同一进程中运行)。
//@Remote与@Local至少需要其中一个。
MySessionBean类:
public@StatelessclassMySessionBeanimplementsMySession{
publicdoubleaddition(doublefirst,doublesecond){
doubleresult=first+second;
System.out.println("addition");
returnresult;
}
}
//SessionBean有两种类型Stateless(无状态)和Statefull(有状态),Stateless的SessionBean是单例模式的(只能存在一个实例),Statefull是非单例模式的。
一般情况下都用Stateless,因为Stateless的效率比Statefull高。
2.SessionBean的部署
将SessionBean的工程打包发布到Jboss中的deploy目录下即可(.jar文件)
4.SessionBean的调用
调用SessionBean的程序可以是任何形式java的应用。
示例代码:
publicclassMySessionBeanClient{
publicstaticvoidmain(String[]args)throwsException{
InitialContextctx=newInitialContext();
MySessionmySessionBean=(MySession)ctx.lookup("MySessionBean/remote");
doublefirst=3;
doublesecond=5;
System.out.println("first1:
"+first+"second:
"+second
+"result:
"+ejb.addition(first,second));
}
客户机可以是普通的JAVA工程,也可以是WEB工程等,在客户机的工程中需要有三件宝,才能调用到服务器上的SessionBean。
(1).SessionBean的接口:
在客户机中是通过
InitialContextctx=newInitialContext();
MySessionmySessionBean=(MySession)ctx.lookup("MySessionBean/remote");
这种注入的模式得到mySessionBean的,所以在客户机中必须认识MySession是什么!
(2).jndi.properties文件
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:
org.jnp.interfaces
java.naming.provider.url=localhost:
1099
可以看出该文件指明了服务器的所在位置以及InitialContext。
(3).还需要jboss安装目录下client文件夹中的类库。
示意图:
3.消息驱动Bean
消息驱动Bean是能够接收jms消息的特殊的EJB组件。
消息驱动Bean使用来自对列或主题的消息,这些消息可以是任意有效的JMS客户发送的。
消息驱动Bean从任意的发送消息给它的客户中分离。
客户不能够通过组件接口来访问消息Bean。
调用消息驱动Bean的客户
JMS介绍
消息驱动bean依赖jms,jms是java的消息服务,jms的客户端之间可以通过jms服务进行异步的消息传输(消息是先发给服务器,再转发给其它的客户端,不一定是马上转发,发送和接收不是同步的,则jms可以提高性能).jms支持两种消息模型
point-to-point(p2p如qq)和publish/subscribe(pub/sub如:
聊天室),即点对点和发布订阅模型(他们都有生产者,消费者,目的地)jms的消费者有两种方法来消费消息(同步(用receive方法来接收消息)消息没到就阻塞)和异步(系统调用onmessage方法来监听消息))
point-to-point与publish/subscribe之间的差别如图
.mdb(message-driverbean)就是异步消息的消费者.当消息到达后,由容器负责调用mdb.客户端发送消息到destination,mdb作为一个messagelistener接收消息。
示例代码:
@MessageDriven(activationConfig=
{@ActivationConfigProperty(propertyName="destinationType",
propertyValue="javax.jms.Queue"),//指定监听目的地的类型,可以取Queue/Topic
@ActivationConfigProperty(propertyName="destination",
propertyValue="queue/testQueue")//指定目的地的jndi名称,通过jndi找到对应的destination(目的地)
})
publicclassEJB3MDBimplementsMessageListener{
publicvoidonMessage(Messagemsg){//当监听的目的地中有消息时,触发该方法
//TODOAuto-generatedmethodstub
if(msginstanceofTextMessage)
{
TextMessagetextMsg=(TextMessage)msg;
try{
System.out.println("readingmessage:
"+textMsg.getText());
}catch(JMSExceptione){
//TODOAuto-generatedcatchblock
System.out.print("ExceptioninonMessage():
");
e.printStackTrace();
}
}
else{
System.out.println("EndofMessages");
}
}
}
消息驱动Bean(MDB)的部署
在MDB中需要指定一个destination(目的地),这说明该Mbean是监听哪一个destination的消息:
@MessageDriven(activationConfig=
{@ActivationConfigProperty(propertyName="destinationType",
propertyValue="javax.jms.Queue"),//指定监听目的地的类型,可以取Queue/Topic
@ActivationConfigProperty(propertyName="destination",
propertyValue="queue/testQueue")//指定目的地的jndi名称,通过jndi找到对应的destination(目的地)
})
MDB在JMS模式中是接收端,它将接收Jboss中某个目的地上的消息,将MDB的工程发布后。
客户端将是JMS模式的发送端,它将消息发送到Jboss上的指定的JNDI上,MDB接收到消息时,便可以对消息进行处理。
消息驱动Bean的调用
当有发送者发送消息到目的地时,MDB就会被触发接收消息
客户端示例代码:
publicclassQueueSend{
publicfinalstaticStringQUEUE="queue/testQueue";
publicstaticvoidmain(String[]args)throwsException
{
Contextctx=newInitialContext();
QueueConnectionFactoryconFactory=(QueueConnectionFactory)ctx.lookup("ConnectionFactory");
Queuequeue=(Queue)ctx.lookup(QUEUE);
QueueConnectioncon=conFactory.createQueueConnection();
QueueSessionsession=con.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);//这句代码说明,当接收端接收到消息后自动确认。
QueueSendersender=session.createSender(queue);
TextMessagemsg=session.createTextMessage();
for(inti=1;i<=3;i++)
{
msg.setText("Message"+i);
System.out.println("send:
"+msg.getText());
sender.send(msg);
}
sender.send(session.createMessage());//发送一个空消息
sender.send(msg);//这里发送的是message3
sender.close();
session.close();
con.close();
}
}
示意图:
4.Entity(实体Bean)
Entity也叫EntityBean,它在用于操作数据库的EJB,它实现了关系/对象(O/R)映射这让操作数据库变成了操作对象节省了开发时间,在EJB3.0中EntityBean其实是用hibernate实现的。
(1).数据源配置
开发EntityBean之前都要先配置好数据源,配置数据源其实是在Jboss平台中配置一个jndi服务,这个服务可以提供和数据库的连接,不同的数据库需要配置不同的服务,配置方法如下:
第一步:
拷贝用于数据连接的驱动包到“Jboss_Home/server/lib”目录下,比如用于连接sqlserver2000的jtds1.2.jar。
第二步:
在“JBOSS_HOME\docs\examples\jca”目录下可以找到用于各种数据库连接的配置文件模板,如连接sqlserver的mssql-ds.xml。
将它拷贝到“Jboss_Home/server/defalt/deploy”下,然后做些修改:
-
-
jtds:
sqlserver:
//localhost:
1433;DatabaseName=jbossDbTest
-
在
这样,数据源便配置完成。
(2)开发EntityBean
步骤如下:
第一步:
新建一个类,然后在类的声明之前加上@Entity标注,这说明了此类是一个EntityBean;
第二步:
添加实体的属性(也叫域),然后编写set/get方法(这可以用MyEclipse生成);
第三步:
指名主键。
有两种方式,一种是在主键属性(域)的前面加上@Id标注,另一种是在set/get方法之前加。
在属性之前加,那么将把所有的属性都映射到数据库表中,如果在set/get方法之前加那么将把所有的set/get方法映射。
第四步:
主键生成器。
默认情况下主键是需要在插入数据时候自定义,而使用主键生成器则可以将属性声明为标识,可以自增长。
在@Id标识的下面加上@GeneratedValue标注即可声明主键生成器,可以在此标注之后加入straregy属性,它可以取GeneratedType.AUTO\GeneratedType.TABLE\GeneratedType.SEQUENCE\GeneratedType.INDENTITY,如果不加straregy属性,默认情况下是GeneratedType.AUTO,格式如:
@GeneratedValue(strategy=GeneratedType.INDENTITY)。
这样便完成了最基本的一个EntityBean。
例:
@Entity
publicclassPersonimplementsjava.io.Serializable{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
@Id
@GeneratedValue
privateintid;
privateStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetId(){
returnthis.id;
}
publicvoidsetId(intid){
this.id=id;
}
}
将工程发布到Jboss后,启动Jboss数据库中将自动添加EntityBean对应的表(表明与Entity类名相同),类中的属性将成为表中的字段,这里需要注意的是:
若在类中有不需要映射到表中的属性时需要用@Transient标注,这样在EntityBean中有这个属性并有get/set方法这个属性都不会在数据库表中生成。
(3)数据关联映射
在数据模型中存在这各种关联关系(一对多,多对一,一对一,多对多),因为EntityBean底层是hibernate实现的,所以在EntityBean中也能实现数据关联映射,但是它不是用配置文件而是用标注进行配置的。
下面以多对一的双向关联为例描述关联映射的方法:
@Entity
PublicclassPerson{
…
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="company_id")
privateCompanycompany;
…
}
@Entity
PublicclassCompany{
…
@OneToMany(mappedBy="company")
privateSet
…
}
*note:
在多的那边(也就是有外键的一边)使用@ManyToOne标注,这说明这是多的一边,然后需要用@JoinColumn(name=”外键名”)指名外键。
在@ManyToOne后面口号中的是描述该关联的一些参数。
cascade=CascadeType.ALL是指定级联模式为所有方法,它还可以取CascadeType.PERSISTENT\CascadeType.REMOVE\CascadeType.MERGE\CascadeType.REFRESH的其中一个或若干个组合。
fetch=FetchType.EAGER表示在Company被调用后,立即调用Person,它还有一个参数是FetchType.LAZY表示只在需要时才调用Person。
在一的一边使用@OneToMany(mappedBy="company")表示persons是一个与company列的一对多关联。
另外,cascade,fetch等对关联的描述属性,可以随便放在哪边,因为使用了mappdeBy后他
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jboss 学习 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)