EntityBean的设计基本原则是什么?请帮我看看这种需求如何设计啊?

数据库中有一份XML文件,有几个客户要频繁的对这份文件进行修改操作。因为需要把xml文件解析成DOM对象的。我不想频繁的解析文件。请问是把这个Dom对象作为实体Bean的一个field,修改PostLoad函数每次Load实体Bean时解析好。还是把Dom对象放在内存(Static字段)中,实体bean中只是String的字段和数据库对应。每次实体bean从内存中取好。或者还有什么更好的方法?

首先,我感觉原来设计上有一些缺陷,XML其实是一个String字段,数据库提供强大事务并发支持只能细化到字段,现在你的客户是修改数据库一个String字段中的一部分,这基本用不到数据库的事务机制了。

如果你将XML放在内存使用static,那么你自己需要严格的多线程并发控制,可以实现,技术有难度。

所以,目前可采取的办法就是使用实体bean,建议不要BMP,用CMP,再研究一下相关CMP事务配置,防止脏读。

谢谢banq,是打算使用CMP。也就是说通过配置可以实现一个实体bean每次只能在一个事务中被改变,是吧?但是如果DOM树放在实体Bean中的话,只好用@postload函数,如果这个实体bean频繁的被容器load的话,不是要频繁的解析文件?这种解析会带来的开销这么优化啊?

>如果这个实体bean频繁的被容器load的话
有缓存,如果不修改,load的是缓存,如果频繁发生修改,可以在EntityManager这层做些缓存或者使用merge,不过,效果不能寄希望,频繁修改是缓存的杀手。另外因为EJB3.0是隐含flush,挺难。

还有更手工的办法,使用DAO,自己的缓存来实现,这是险棋,但是很有效。