通过无状态Bean的ejbCreate构造EJB类变量来Cache这些数据。
其实,使用EJB最大的瓶颈是:编制程序时,需要以多台分布式思维来想像程序,但是也不能每个EJB都remote,建议程序员编制时全部local,然后,由cluster设计师来调整remote和cluster。
能不能具体说一下呢?
按个人理解,remote和local调用的方式在编码上有比较大的不同,我还想不出有效的办法来用最小的编码量来进行方便的remote和local之间的切换。我原来做的是同一个模块之间是local,不同模块之间是remote,不同层(web,ejb)之间也是remote。发布的时候如果想实现local的方式,就打包在一起,然后利用服务器的optismistic 特性(比如weblogic提供call-by-reference)来避免remote的开销。
不知道bang有没有更好的办法?谢谢
> 通过无状态Bean的ejbCreate构造EJB类变量来Cache这些数据?
>
>
> 其实,使用EJB最大的瓶颈是:编制程序时,需要以多台分布?
> 思维来想像程序,但是也不能每个EJB都remote,建议程序员?
> 制时全部local,然后,由cluster设计师来调整remote和clus
> er。
这方面还想请banq多指点一二:在cluster设计师着手调整之前,也就是说,在程序员编写业务逻辑之时,应该采取何种设计方略?在我看来,系统设计有两种显而易见的不同策略,其一,面向对象的设计,各组件之间(通过接口)密切合作,通过大量的委派(delegate)使逻辑和数据各归其所,因此代码中常常会见到“otherObject.doSomething(this)”这样的委派代码;其二,面向服务的设计,各组件之间通过RPC构成松散的协作,每个组件实际上是一个facade,其内部采用Transaction Script模式实现,并且传递的是纯数据的DTO。如果说编制session bean时,程序员无须顾虑这个session bean将作为remote使用还是local使用,请问他应该采取哪种设计思路呢?
1. JNDI调用方式,这个可以使用Service Locator来封装,通过配置文件来指定是否remote。
2. ejb-jar.xml。这个配置文件改变也很容易,另外,cluster时,不同J2EE容器有不同的配置文件,配置调整策略是根据具体系统的集群策略来制定的,一般是将访问量大的那几个session做集群就能取得好的效果。
>
> 1. JNDI调用方式,这个可以使用Service
> Locator来封装,通过配置文件来指定是否remote。
>
> 2.
> ejb-jar.xml。这个配置文件改变也很容易,另外,cluster时
> 煌J2EE容器有不同的配置文件,配置调整策略是根据具体?
> 统的集群策略来制定的,一般是将访问量大的那几个session?
> 集群就能取得好的效果。
也许我没有表达清楚。譬如说《重构》第一章的例子。现在我们有三个对象:Customer(顾客)、Rental(租借行为)、Movie(影片),Customer要租几部片子来看,算帐的时候就从Rental那里知道价钱:
Rental rental;
// rental包含了几部片子、租几天
double charge = rental.getCharge();
每张片子有不同的计费策略,比如新片收得贵点、连续剧便宜点,Rental又怎么知道如何算帐?于是它也不算,直接请求每部片子自己算,然后做个汇总:
public class Rental {
private int _days; //要租几天?
private List _movies; //要租哪些片子?
private int _level; //几星会员来租?
public double getCharge() {
累加 _movies.get(i).getCharge(this);
请注意最后一句:Movie.getCharge(Rental rental)方法。在计算一张影片的租金时,不仅要考虑影片本身的信息,还要考虑整个租借行为的所有信息。现在我请问了,像这样的一个设计,那位可敬的“cluster设计人员”打算怎么轻松地把Rental、Movie变成远程接口的对象?