关于EJB和普通java对象

03-12-23 汪汪
近期阅读了MasterEjb一书,对于他后来所做的示例有个疑问。简单描述就是:

对于那种只用来存储临时数据并提供一些接口用以操作(set,get)这些数据的对象,我觉得定义成普通的java类不就行了,为什么也要做成EJB呢?

如果说是为了利用容器对EJB对象的复用功能以节约内存的话,那么EJB对象查找管理等的开销是否代价更大呢?

         

汪汪
2003-12-24 09:56
顶顶顶,等待高手。。。

wxlin2k
2003-12-24 16:57
高手不回你啦,他们都在那边搞意识形态的斗争。就让我这个小菜鸟来回你一下。

EJB里对象的管理是由EJB容器管理的,其中关系到线程,多态,复用等对象在运行应用时所要面对的问题。

如果我们用普通的JavaBean处理数据或相关应用时,我们就要自己写处理这些对象的相关类。而使用了EJB就可以把开发者的精力集中放在他们应该注意的地方上,如数十个表的关联及运算。

J2EE这一个概念本来就是希望一些企业级的用户(开发者)可以不用考虑这些相对低级的编程(指对于企业级的数据库开发而言,过多的把时间放在这些东西上面会使开发效率下降,以及开发成本上升)

至于你提到EJB内存管理的话,可以跟你说一个本人使用JBoss的例子。

这是在使用JBoss管理一个(注:只有一个)应用时观察到的。

这个应用用到了10个表,复杂程度算是低了。

JBoss启动后,在没用启动应用时,内存比原来已经用多了60MB。

启动应用后,在启动的瞬间大概跳动了100MB的跳跃,然后回到了20MB左右,之后就再没有波动了。

也就是说系统+应用一共用了80MB左右的内存。

汪汪
2003-12-25 11:21
论述得不错。不过似乎没有针对到我的问题,我的意思是:

一个数据结构,比如在C或者C++中就定义成一个struct或者是class。

但是在J2EE下却也被定义成一个EJB(并没有其他一些应用级的需求,如线程,事务等等)。我就是对这种做法感到不太合适!

wxlin2k
2003-12-25 13:52
> 论述得不错。不过似乎没有针对到我的问题,我的意思是:

> 一个数据结构,比如在C或者C++中就定义成一个struct或者是

> lass。

> 但是在J2EE下却也被定义成一个EJB(并没有其他一些应用级?

> 需求,如线程,事务等等)。我就是对这种做法感到不太合适

> ?

其实不然,任何数据类型都有一些应用级的需求,问题是在什么时候而已。

一个数据类型的对象,本身,不能,也不应该包含任何线程或事务的编码,这些东西应该由调用这些对象的应用去思考处理。

数据结构举个例子个人资料

public class Person implemnets Serializable{

private final String name;

private final String gender;

public String getName(){}

public void setName(String newName){}

public String getGender(){}

public void setGender(String newGender){}

public Person(){

}

//其它具体实现略

}

好了,这个Class我们在应用中使用时一般会做为一个数据对象进行操作甚至传送

操作例:

Person me = new Person();

me.setName('XXXX');

String yourname = me.getName();

me = null;

传送

ObjectInputStream in = new ObjectInputStream(request.getInputStream);

Person me = (Person)in.readObject();

ObjectOutputStream out = new ObjectOnputStream(request.getOnputStream);

out.writeObject(me);

注:这些例子都过分地简化了,可能看不出些什么问题。

此外,还有写入数据库等等。在这个例子里,这个抽象的数据类型除了定义以外,还必须由开发者考虑好所有的处理步骤并使用其它类对加以实现。还有一些例子比如,同一个数据结构,如果同时有20人以上去更新完全不同的数据实体,那么你就必须编写相应的处理对象,以便保持这20个实体的数据完整性。而不能写好了这个数据结构就算完事。JAVA、C、C++都是这个道理。

如果EJB的话,EB还是SB,无论是BMP还是CMP,对于开发者,关心的只是这个数据结构本身,是否定义正确,是否逻辑正确等等,关于数据完整性、并行处理这些东西。则交由容器编写者去思考。

如果,您的问题是为什么要按EJB那种格式去编写数据结构?是的,您会觉得这样很别扭,明明很简单的一个数据结构却要写3-5个类(这要看你是写SB、EB、CMP、BMP还有remote还是local而定了)。可是,您一旦写完这些类以后,很多数据交换、提交的处理就不用您去搞了。

那么,我的问题就是,您的应用中,您已经写(处理)好,您的简单数据类型的处理操作了吗?您已经把远程数据传输,调用,数据并发处理,类型内存增减、数据检验、单项多项数据提交回滚的东西都写好了?最重要的是,这些东西可以在多个应用中复用吗?如果以上答案皆是的话,那么,当然是使用简单数据类型去定义数据结构好啦。

希望,这些能回答您的疑问。

猜你喜欢
3Go 1 2 3 下一页