客户端调用session bean,session bean调用entity bean的好处?? 我想应该是和网络有关系,毕竟生成entiy实例要占一些系统资源,如果通过网络那边的用户判断何时释放资源,没有通过本地session bean判断来的好,具体我也说不清楚,呵呵,学习! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、分离客户,服务层,既解偶。2、减少客户网络调用次数,即减少网络流量。3、包装实体BEAN异常,而非显示给客户端。 1.session bean的本质就是用来处理会话,所以处理用户的会话它当然优于enty bean2.由于它的本质,它可以跟踪客户信息,这些是enty bean 很难做到的,也没有必要.3.从分层的关系来说,session bean主要工作于业务逻辑层,而enty bean则接近于数据层,设计者的意图就是把操作与数据通过session bean 和 enty bean 分离开来拉4.至于网络流量的问题,一时没有想到有多大关系呵呵 其实就是减少了网络的连接。任何的远程调用,不论rmi,ejb,webservice,cobra底层都必须走socket,socket是个比较费时的操作。假设你有一个EntityBean(名为User)来处理一个User表(包括字段userId,userName,userPassword):不使用SessionBean做Facade: User的远程接口中必须有getUserId();getUserName();getUserPassword();等远程方法。客户端调用这些方法来获取数据库 中某条数据的每个字段的值。现在假设客户端用ejbFindByPrimaryKey()方法定位到某条记录。为了得到这条记录的每个字段的 数据,客户端不得不调用getUserId();getUserName();getUserPassword();这三个方法。由于这三个方法都是远程方法,所以每 调用一个方法都会产生一个Socket连接。调用三个方法就要产生三次网络连接。如果表中的字段特别多的话,你为了取数据调用 的远程方法就越多,网络开销就越大。 此外,假设User有个关联的Bean叫做UserProperties。由于没有使用本地接口,所以关联属性也必须设置成远程接口的类型。 这会使情况变得更糟。因为他们的关联信息通常是在ejbLoad和ejbStore方法中设置,而且当你在客户端调用getUserId(),getUserName() 等方法的时候,容器为了同步bean和数据库底层数据,在调用bean实现类的相应方法之前会自动调用ejbLoad()和ejbStore()。由 于其中涉及了关联Bean的查询,又是通过远程接口查询,这里又增加了网络操作。 使用SessionBean做Facade: 首先你肯定要做一个Dto用来封装User表。客户端用Dto来和SessionBean交互。而SessionBean与EntityBean之间的操作完全 通过本地接口去做。本地接口不会产生网络连接。当客户端希望得到表中一条记录的所有字段的值时,是由SessionBean通过本地 接口调用getUserId();getUserName();getUserPassword();然后把值封装成一个Dto一次性返回给客户端。也就是说,客户端只要 调用SessionBean中的一个远程方法(例如getUser())即可得到所有字段的值封装成的Dto,只产生了一次网络连接。 并且采用这种模式后,关联属性可以使用本地接口类型,虽然关联信息可能还是在ejbLoad和ejbStore内部设置,但是完全使 用本地接口,不会产生网络操作。 首先明确一点,只要你得到的数据量一定那么网络流量是基本相同的,所以基本不会减少数据流量。之所以提供性能正如 luckycat(潘鑫) 所说的,将实体bean的数据先打包,然后再使用会话bean进行粗粒度的访问,这样减少了每次访问数据的请求连接次数,一次请求传输的数据量大,这样可以节省很多服务器建立连接的性能消耗,所以提高了程序性能 struts.xml中的编译错误 1-1000个数字随机下发数字给用户却出现重复的问题,真是奇怪 请问一下各位关于java编程声音文件处理 只解析xml文档的一部分 高手来解决 大侠请推荐下业界目前最流行开源又容易上手的工作流引擎,谢谢 如何比较两个XML文件一致? 关于websphere+eclipse的问题。急! 如何下载j2ee,我只下载j2eesdk1.3 struts.测试数据库出错.信息如下:Initializing application data ..... AXIS能不能说是一种J2EE下的Web Services实现 有XML的例子吗?
2、减少客户网络调用次数,即减少网络流量。
3、包装实体BEAN异常,而非显示给客户端。
2.由于它的本质,它可以跟踪客户信息,这些是enty bean 很难做到的,也没有必要.
3.从分层的关系来说,session bean主要工作于业务逻辑层,而enty bean则接近于数据层,设计者的意图就是把操作与数据通过session bean 和 enty bean 分离开来拉
4.至于网络流量的问题,一时没有想到有多大关系呵呵
假设你有一个EntityBean(名为User)来处理一个User表(包括字段userId,userName,userPassword):
不使用SessionBean做Facade:
User的远程接口中必须有getUserId();getUserName();getUserPassword();等远程方法。客户端调用这些方法来获取数据库
中某条数据的每个字段的值。现在假设客户端用ejbFindByPrimaryKey()方法定位到某条记录。为了得到这条记录的每个字段的
数据,客户端不得不调用getUserId();getUserName();getUserPassword();这三个方法。由于这三个方法都是远程方法,所以每
调用一个方法都会产生一个Socket连接。调用三个方法就要产生三次网络连接。如果表中的字段特别多的话,你为了取数据调用
的远程方法就越多,网络开销就越大。
此外,假设User有个关联的Bean叫做UserProperties。由于没有使用本地接口,所以关联属性也必须设置成远程接口的类型。
这会使情况变得更糟。因为他们的关联信息通常是在ejbLoad和ejbStore方法中设置,而且当你在客户端调用getUserId(),getUserName()
等方法的时候,容器为了同步bean和数据库底层数据,在调用bean实现类的相应方法之前会自动调用ejbLoad()和ejbStore()。由
于其中涉及了关联Bean的查询,又是通过远程接口查询,这里又增加了网络操作。
使用SessionBean做Facade:
首先你肯定要做一个Dto用来封装User表。客户端用Dto来和SessionBean交互。而SessionBean与EntityBean之间的操作完全
通过本地接口去做。本地接口不会产生网络连接。当客户端希望得到表中一条记录的所有字段的值时,是由SessionBean通过本地
接口调用getUserId();getUserName();getUserPassword();然后把值封装成一个Dto一次性返回给客户端。也就是说,客户端只要
调用SessionBean中的一个远程方法(例如getUser())即可得到所有字段的值封装成的Dto,只产生了一次网络连接。
并且采用这种模式后,关联属性可以使用本地接口类型,虽然关联信息可能还是在ejbLoad和ejbStore内部设置,但是完全使
用本地接口,不会产生网络操作。