EJB 的学习
上一篇 / 下一篇 2007-06-19 00:00:00 / 个人分类:java
EJB是什么呢?
l#wuz{Nb t1RqUK0EJB是一个J2EE体系中的组件.再简单的说它是一个能够远程调用的javaBean.
:Vr'i]T~?s0它同普通的javaBean有两点不同.ITPUB个人空间0[D7})~8H:b
第一点,就是远程调用.
EyK(CT8T1zMZ\B0第二点,就是事务的功能,我们在EJB中声明的事务会通过容器帮助我们来处理.
nV*b u IT`0支持EJB的SERVER有以下几个:ITPUB个人空间*n
Vo*]q_tGCf9y
Weblogic
3f?&K$v}Z d0Webspere
ICzy[%s0Appserver
pk}Bk4g'}0Jboss
我选用的是weblogic+JBuilder9开发.
回过来我们继续说这个EJB的原理.
:N"kv&r
Y#af0它是分布式的.这个的意思其实很简单不需要想太复杂.ITPUB个人空间6~)tE-c)B*K
就是我们把事情不是交给一个人去处理.而是把事情划分一下交给多个人处理,
[o4?:K7n(V {0而多个人处理之后我们让这个分配的人来把最后得到的结合处理.
EJB我们首先要明确它是放在服务器端的组件.ITPUB个人空间L+~!oeQ'M
Zx
一共有三种EJB
n3j8Wf#c0D2l01,SessionBean 复杂处理业务逻辑的.
&]'PM/QFjd02,EntityBean 处理数据ITPUB个人空间
XQ[WS$V
3,MessageBean 消息Bean异步,耦合的处理.
那么谁能调用EJB呢?
+`J(k"I;Q-a0也或者说EJB被谁调用呢?
)` M
O]u;m,|)G&O0我们说它就是放在server的一个能够远程调用的javaBean.
,N&YU}R@.F5d0B-G0所以它可以被Java的语言调用servlet,jsp等都ok的说.ITPUB个人空间itB-?[5A@d,J|.[
而且它还可以被C++语言调用.很强大吧.ITPUB个人空间!Z
`5b7n"e$s\BbU
EJB的最基本的出发点就是推动Java在服务器端的编程能力.ITPUB个人空间#g0O/@.heyh
所以呢它的功能就我个人来看太强悍了..= =
这个远程调用是通过什么呢.
3_[-X
bFI#C(u+E0Java是通过RMI-JRMP(java远程方法调用)协议来调用.EJB就是通过这个来实现的.ITPUB个人空间d\/d|)N~F1n
C++是通过Corba-iiop协议来调用的.这个协议支持两端不同语言的调用.
EidVm0Corba是公共对象请求代理服务
P,P S x)R9Av?#Q0iiop是网络内部对象协议.
下面我们来简单说一下这个分布式的调用。ITPUB个人空间-FA0M9CY{
m
客户端发送一个请求给服务器ITPUB个人空间/@/B/m0AL
首先是传给stub代理类它发送参数给skeleton委托类然后这个类调用我们的实现类取得结果再远路返回。ITPUB个人空间qqO1Y^
AQe
这样一个分布处理就结束了。ITPUB个人空间h^5y(rv/Sv9W3o
后面会具体的结合代码分析。
j(B!gB,AC8i1ch0先记住这个大致的结构就好。
我们写一个EJB需要做那些工作呢?ITPUB个人空间O.u.H)dg]?$Y%@
1,写一个接口继承EJBObject 这个类作为远程接口ITPUB个人空间sY5S.F JPt\'d
2,写一个接口继承EJBHome 这个类里有一个方法是create()它返回接口类型。ITPUB个人空间:{ p3k4uRTF4vc
3,写一个Bean继承SessionBean, 这个类里包含一个create()方法和一个业务方法。
r~g
?*T#r(B04,写一个ejb-jar.xml 这个xml是把上面的三个文件组合起来ITPUB个人空间"Y4cl)`/h So0~/ew
5,写一个weblogic-ejb-jar.xml 这个xml是连接查找source的作用
d;Ht0s+xC"_2A0 (不同的server会是不同的。这里选用的是weblogic)
上面的两个xml文件需要放在META-INF目录下。
$W c8h4s zUw0而以上这些类都需要打包在一个jar文件中然后在server部署。ITPUB个人空间_iUK.g"ke
这样就完成了EJB的部署
7XH`Dj"xF1s/y\J0例如:
^4P:QUE:C,L:d0我们写个简单的计算吧。ITPUB个人空间"k;WD.C(~$[FV
(先声明下吧本教程的说明都是我自己的理解,ITPUB个人空间|+J&g
o'd5E5t1M
也许并不是一些文档上的描述那么正规但是很方便理解的。ITPUB个人空间*p2oAWL
如果有实在无法苟同的地方大家多多包含。这是为了便于理解的讲解)
9Ym5k3Dq0AddCount.java这个就是我们继承EJBObject的类.
import javax.ejb.*;
usR?
NO4wsI0import java.rmi.*;
public interface AddCount extends EJBObjectITPUB个人空间&t/Du+ma-FmT.aF
{
VMm(F#C}L-[0 public int addCount(int a,int b) throws RemoteException;ITPUB个人空间CF SQBS#d'JoJ w
@
}
6DV ~+kts]W0接口的作用.在这里强调一下吧.所有实现这个接口的类都会是这个接口的类型.
)wKy/N2N!ry0同时都包含接口的方法的实现.ITPUB个人空间5|#Bb%BL ]
这个接口中的方法也就是在以后会实现的方法.我们这里要做的是一个加法的运算.
3c%eI7i3Ciuu0AddCountHome.java这个是继承EJBHome的类.它里面包含的这个create()返回的是AddCount类型对象.
s$s]Fl-w*x5E0import javax.ejb.*;ITPUB个人空间Gl6Ix-C2NM
import java.rmi.*;
public interface AddCountHome extends EJBHomeITPUB个人空间v'_Y(B0{:k.E5|r
{ITPUB个人空间Y MC k
e g.YbhR:P
public AddCount create() throws RemoteException,CreateException;ITPUB个人空间Ajih5gX[6e
}
下面这个是我们的Bean.这个类继承了SessionBeanITPUB个人空间B D%[r;s/jB!g i
import javax.ejb.*;
public class AddCountBean implements SessionBean
,@*MA-cT Z1}H0{ITPUB个人空间8I'ud^ V?2kD
public void ejbCreate()
%q;F7Dp4t&FU0 {ITPUB个人空间.Zc0\"H
Yz_)do
}ITPUB个人空间
QQ3|3Fx!]T*NU!m*r
public void setSessionContext(SessionContext ctx)
x/_l!r
s V0 throws EJBException,ITPUB个人空间*zX3]i!k5M
java.rmi.RemoteExceptionITPUB个人空间G%y.I2TA
{ITPUB个人空间8Dl,r}i0Lp%b
}
Kl$K@8z"EV3E5{0 public void ejbRemove()
3?0w6ru'wI'`0 throws EJBException,ITPUB个人空间`
b*b3ip2u'{%z
java.rmi.RemoteExceptionITPUB个人空间E"]o8dn4Sn)H|!C
{
M8F4RkZW0 }
public void ejbActivate()
(uR_(s8H?{0 throws EJBException,ITPUB个人空间wB SBr{Rd
java.rmi.RemoteException
B%?8z3}
t8Jz0 {
3X Qy,yO)gn0 }ITPUB个人空间!t
g$}&} EW
public void ejbPassivate()
Jr8z/C(mG0 throws EJBException,ITPUB个人空间3^H6DM@7~G#{
java.rmi.RemoteException
'w(L&g