📄 master-ejb-2.htm
字号:
<html><!-- #BeginTemplate "/Templates/more.dwt" -->
<head>
<!-- #BeginEditable "doctitle" -->
<title>csdn_精通ejb【二】</title>
<!-- #EndEditable -->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<STYLE type=text/css>
A:link {
COLOR: #000000; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:visited {
COLOR: #333399; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:active {
COLOR: #ff0000; FONT-FAMILY:verdana,宋体,新宋体; TEXT-DECORATION: none
}
A:hover {
COLOR: black; TEXT-DECORATION: underline
}
BODY {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TH {
FONT-SIZE: 9pt
}
TD {
FONT-SIZE: 9pt
}
TD.page {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TD.title {
COLOR: #000000; FONT-FAMILY:verdana,宋体,新宋体
}
TD.detail {
COLOR: #9966ff; FONT-FAMILY:verdana,宋体,新宋体
}
</STYLE>
</head>
<body bgcolor="#FFFFFF" text="#000000" >
<div align="center"></div>
<table width="700" border="0" align="center">
<tr>
<table width="700" border="1" cellpadding="1" cellspacing="0" bordercolorlight="#9898ba" bordercolordark="#000000">
</table>
<table width="700" cellspacing="0" cellpadding="0" bgcolor="9898ba" border="0">
<tr valign="middle"></tr>
</table>
<div align="center"><b></div>
<br>
<table width="700" border="0">
<tr>
<td width="20"> </td>
<td colspan="2">
<div align="center">
<h3><b><!-- #BeginEditable "5" -->
<h3><font face="Verdana, Arial, Helvetica, sans-serif" ><b>精通ejb【二】</b></font></h3>
<!-- #EndEditable --></b></h3>
</div>
</td>
<td width="20"> </td>
</tr>
<tr>
<td width="20"> </td>
<td colspan="2"><!-- #BeginEditable "6" --><br>
开发Beans <br>
一、会话Beans介绍 <br>
按功能可把EJB分为两类:Session Beans 与 Entity Beans。
<p>企业级Bean类 <br>
为了使bean可以在任一容器中工作,bean必须被附在接口中。在EJB中,在enterprise bean class中提供了企业级bean组件的实现。这是个简单的遵循接口的java类。
<br>
一个enterprise bean class 包含对组件的实现细节。会话bean的实现不同于实体bean的实现, <br>
一个Session Beans针对单一的客户完成一次连接或会话,其生存直到客户完成连接与会话,或系统意外中止。当一个新的客户从EJB
Server访到一个Session Beans时,那么EJB Container创建一个新的Session Beans实例,其运行直到会话结束,Session
Beans必须实现接口javax.ejb.SessionBean。 <br>
Entity Beans实现接口javax.ejb.EntityBean,其描述了特定数据源中的数据,能长时间存在于EJB Container中,不会随系统的意外中止而消失,并且可以让多个客户同时访问。
<br>
EJB规范定义了许多bean类能够实现的标准接口。定义了所有的bean类必须有的方法。容器调用这些方法用来管理bean。 <br>
所有bean类(无论是会话bean还是实体bean)必须实现的最基本的接口是javax.ejb.EnterpriseBean接口。
<br>
public interface javax.ejb.EnterpriseBean extends java.io.Serializable
<br>
{ <br>
} <br>
值得注意的是:它继承了java.io.Serializable。 <br>
所有的会话bean必须实现javax.ejb.SessionBean, <br>
所有的实体bean必须实现javax.ejb.EntityBean. <br>
EJB对象 <br>
当客户想使用enterprise bean class的一个实例时,客户不必直接在实际的实例上调用方法,调用过程被EJB容器截取,bean实例被容器中对象所代表。
<br>
1、Enterprise bean class不能通过网络直接被调用,我们知道EJB容器可以操纵网络,因此它通过容器将bean包装成可在网络上使用的对象。
<br>
2、通过截取请求,容器可以自动执行许多必要的管理工作。 <br>
3、EJB容器可以跟踪哪个方法被调用,在系统管理者的用户接口上显示其用法等等。 <br>
因此,EJB容器可以看作间接的存在于客户代码和bean之间的层。这个间接的层使用单独的网络对象来表示自己,这个对象称为EJB对象。
<br>
EJB对象作为容器物理的部分;所有的EJB对象都有针对容器特殊要求的代码。因此,容器提供商提供专门工具,用来自动为EJB对象产生类文件。
<br>
远程接口 <br>
我们前面了解到,bean客户调用EJB对象上的方法来代替调用bean,为了执行它,EJB对象必须复制bean类中的每个业务方法。但是,怎样才能使自动产生的EJB对象知道复制了哪个方法呢?这就用到了bean提供者写的一个特殊的接口,这个接口复制所有的与bean类相关联的业务逻辑方法。这个接口被称为远程接口。
<br>
这个接口必须遵循EJB规范的定义,所有的远程接口必须从sun公司提供的通用接口继承而来,即javax.ejb.EJBObject。
</p>
<p>EJB对象 <br>
public interface javax.ejb.EJBObject <br>
extends java.rmi.Remote <br>
{ <br>
public abstract javax.ejb.EJBHome getEJBHome() <br>
throws java.rmi.RemoteException; </p>
<p>public abstract java.lang.Object getPrimaryKey() <br>
throws java.rmi.RemoteException; </p>
<p>public abstract void remove() <br>
throws java.rmi.RemoteException, <br>
javax.ejb.RemoveException; </p>
<p>public abstract javax.ejb.Handle getHandle() <br>
throws java.rmi.RemoteException; </p>
<p>public abstract boolean isIdentical(javax.ejb.EJBObject) <br>
throws java.rmi.RemoteException; <br>
} <br>
以上是对于所有EJB对象必须拥有的方法,你不需实现这些方法,这些方法的实现,生成EJB对象时由容器自动生成。 </p>
<p>客户端代码通过调用javax.ejb.EJBObject的方法来和bean协同工作。 </p>
<p>Java RMI和EJB对象 <br>
你应当注意到:java.ejb.EJBObject继承了Java.rmi.Remote。Java.rmi.Remote接口是java远程方法调用(RMI)的一部分,任一个实现java.rmi.Remote的对象都是rmote对象,它可以被另外的java虚拟机所调用。
<br>
被容器提供的EJB对象实现了远程接口,同时也间接实现了java.rmi.Remote,这样也就意味着你的EJB对象是完全符合网络需要的,可以被网络上的其他java虚拟机调用。当然,EJB接口也必须遵守EJB规范。
<br>
EJB远程接口必须遵守java的RMI远程接口规范。例如:错误处理,二者相同。 <br>
远程接口同样也必须遵守java RMI参数传递规范。不是什么都可以通过VM方法调用来在网络上传递,传递的参数必须符合RMI类型。
<br>
EJB也继承了RMI的优点,对于RMI,你正在调用的远程对象的物理地址是不可见的。这个特点同样也适用于EJB。客户代码不必关心正使用的EJB对象是在邻近的计算机上还是从internat传递来的。这样,EJB对象可以和客户端处在同一个java
VM中。 <br>
EJB保证了本地分布式组件的透明度。这种透明对于多层配置来说是非常必要的。客户端代码是非常容易移植的,不受限于特殊的多层配置。EJB容器可以以最佳化方式在本地执行。
</p>
<p>Home对象 <br>
我们看到,客户端代码处理EJB对象,而从不直接操作beans。那么,客户端如何得到EJB对象的参考呢? <br>
客户端不直接将EJB对象实例化。因为EJB对象可以存在于不同的机器中。同样的,EJB使本地透明化,因此客户端不知道它的确切所在。
<br>
客户端代码通过EJB对象工厂得到EJB对象的参考。EJB规范里称这种工厂为home对象。它主要起一下作用: <br>
建立EJB对象。 <br>
找到已经存在的EJB对象。 <br>
删除EJB对象。 <br>
在一些细节方面,EJB对象工厂同EJB对象的特征相同。 </p>
<p>Home接口 <br>
Home接口简单的定义了建立、删除和寻找EJB对象的方法。容器的home对象实现了home接口。 <br>
通常,EJB定义了所有home接口必须支持的许多方法,这些必须的方法被定义在javax.ejb.EJBHome接口上,home接口必须继承Java.ejb.EJBHome接口。
<br>
public interface javax.ejb.EJBHome <br>
extends java.rmi.Remote <br>
{ <br>
public abstract EJBMetaData getEJBMetaData() <br>
throws java.rmi.RemoteException; <br>
public abstract void remove(Handle handle) <br>
throws java.rmi.RemoteException <br>
javax.ejb.RemoveException; <br>
public abstract void remove(Object primaryKey) <br>
throws java.rmi.RemoteException, <br>
javax.ejb.RemoveException; <br>
} <br>
javax.ejb.EJBHome接口 <br>
注意javax.ejb.EJBHome继承了java.rmi.Remote,这意味着home接口同样也支持RMI远程对象,传递的参数和RMI也相同。
</p>
<p><br>
Home对象 </p>
<p>所有home对象所需的方法 <br>
配置描述符 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -