请教:关于O/RMAP技术与Observer模式

02-12-11 foxprince
假设有这样的需求:对数据库表中的某些行的数据修改要能立即检测到,并且通知“关注”此数据的应用。数据修改的过程不可控,有可能是人工修改,也有可能是由其他应用系统修改。
我拟采用如下方案:
1、采用ORMAP技术把数据映射为对象。
2、使用Observer模式,把映射的数据对象作为被观察者,把需要根据数据修改做响应处理的对象作为观察者。

不知此方案是否可行。
主要的疑问是:当数据库中的数据发生更改时,与这些数据映射的对象能否立即同时更新?更新过程是否需要手工干预?

另外:Castor JDO与Sun JDO哪一个更优些?

如能赐教,不胜感谢!

banq
2002-12-11 15:51
应该可以,我觉得也是比较好的办法,关键是同步。

不知道你采用什么同步机制?

Castor JDO没有sun JDO正宗,但是我觉得好用,我用过它的XML部分。

foxprince
2002-12-11 16:40
banq果然是高手,一语中的。

“同步”的问题,正是我这几天头疼的问题。我初次接触JDO,本以为 JDO 可以提供同步机制,保证和数据库的原始数据的一致性,但看来希望要落空了。

我目前的“同步”方案是这样的:
1、构建一个“池”来保存需要和数据库同步的对象。
2、“池”根据条件管理这些对象,定义add(...),update(...),delete(...)方法。
3、所有这些数据对象继承或实现一个抽象类--此抽象类中定义与数据库同步的方法。
4、数据对象必须实现实现Runnable接口,在其run()方法中调用同步方法。


具体的细节尚在考虑中,banq可否给些建议。

另:有没有关于数据同步的开源项目?

banq
2002-12-12 13:23
目前我不知道。

这可能要自己做,建立一个线程监视数据库的这条记录就可以了,不一定要用O/R Map

foxprince
2002-12-12 13:44
如果需要监视的记录有很多,会长时间占用数据库资源,而且性能影响也很大。

嗯,真让人头疼!

banq
2002-12-12 16:33
这就取决于你的同步要求,其实就是毫秒级别的访问数据库,也不会浪费太多资源,只有一个线程,我觉得不会影响性能。

banq
2002-12-23 11:36
EJB 2.1提供的Timer功能非常适合你这个应用:

http://www2.theserverside.com/resources/article.jsp?l=MonsonHaefel-Column4

leitm
2003-02-19 11:11
问个简单的问题:
Observer模式能适用于b/s模式吗?
比如jsp能适用observer模式。当数据变化时。所有访问的jsp都自动变化吗?

浆糊
2003-02-25 22:36
在我做的项目中使用了JDO ,没有发现同步的问题,在一些服务器中EJB是存在这个问题的。
关于你说的同步问题和用不用JDO我认为没有直接的关系。

LuoTing
2003-03-10 16:57
哦,哪位能否讲讲JDO或介绍一些文章?非常感兴趣

foxprince
2003-03-17 17:22
斑竹真热心,还记得这篇帖子!

同步问题和JDO确实没有太多关系。

Java虚拟机与外部数据库的双向同步需要在对象层有一个非常强大的引擎,我觉得目前的技术不足以实现这样的机制。

我最终选择了用单线程扫描的方案,性能影响不是很大。

多谢banq

greencode
2003-07-04 17:37
jdo是个单向的东东,为用户访问数据库提供了简便的对象封装(比entity bean好用),但数据库的其它变动并不会主动反映到你的object上。
好像动态dataset可以跟踪数据库的改变,不知道通过jdbc查出来的dataset有否此功能?