解读Ejb中Local与Remote项目

来源:互联网 发布:mac能玩lol国服吗 编辑:程序博客网 时间:2024/05/02 22:26

在高校平台项目中使用到了Ejb。刚开始的时候,大家都不太懂得Local与Remote的含义、用法以及区别。这里我进行了总结,跟大家分享了一下。

中文翻译过来的意思就很明确了:Local是本地接口;Remote是远程接口。

但是由于Remote接口访问EJB需要经过远程方法调用环节,对性能影响很大,而Local接口访问EJB直接从JVM 中返回EJB的引用,效率很高。所以使用原则是:要尽量使用Local接口,其次使用Remote接口。这就好比你要打长途电话找5个人:你是准备给5个人分别通话(长途-remote);还是准备先和一人通话(长途-remote)然后在由这个人对另外4个(短途-local)分别通知?当然是第二种方式省钱省时省力,性价比更高一些。


所以,我们都会这样设计:

1、web项目调用service使用remote接口。实现就是在web中配置jboss.properties文件,该文件下配置所需的远程接口;

2、SessionBean和EntityBean使用Local接口。本地方式就不用配置文件配置了,只需要你将实体jar包扔到启动的jboss中。


Local与Remote的本质区别是客户端与服务器是否运行在同一个JVM(Java虚拟机)中。如果客户端与服务器运行在同一个JVM中,那么就建议使用Local;如果客户端与服务器不在同一个JVM中,那么只能使用Remote。(有兴趣可以了解下Java虚拟机)


为了让大家对此概念更加清晰,我们对比一下远程与本地访问的过程,来帮助理解。

远程使用工具类CommonEao:

在远程服务器中,我们需要将CommonEao的接口实现都部署在远程服务器的JBoss中(本文服务器都是JBoss),当然CommonEao接口的实现必须是发布称Remote方式的。在本地,我们只需要将CommonEao的接口部署在本地Jboss服务器中就能够正常使用。

这里之所以只有接口就能够使用工具类,就是因为将工具类的实现发布称远程的。CommonEao工具类和本地程序在两个JVM中,如果使用Local的方式部署接口的实现,那么无法完成对该实现的调用。


本地使用工具类CommonEao:

我们就需要将CommonEao接口和实现的jar包都部署到本地Jboss服务器中,然后进行调用,接口的实现发布称Local就OK。

remote是暴露给远程客户/EJB/其他东东的接口,local是内部EJB互相调用的首选(remote的机器性能开销很大),

归根到底:内部Ejb的调用首选Local,而Remote的Ejb项目,只需要通过接口,就能够调用到方法,并实现功能。你暴露一个remote入口给调用者,然后功能用一组local协同完成。这样设计,最划算,也很好理解。


注意:

1、Jboss启动时不能部署Ejb项目,所以只能加接口、实体包扔进lib下随jboss启动部署,Ejb项目必须在deploy里面部署。

10 0
原创粉丝点击