Huihoo.org - Open Source Middleware Foundation

 Last Modified: 2003.03.17

JFox小组2003.03.17讨论--EJB容器,JFoxEJB的设计与实现


(by huihoo.org Allen整理)

注:orbat、tisom为JFox项目组的核心成员,他回答了朋友们所提的大部分问题。

讨论总结
zth_cn总结出今天讨论的三个要点:
1、jfox的功能划分。包括ejb 容器内组件划分
2、ejb 容器内关于事务的一些问题讨论
3、关于ejb容器实现方式(动态代理,和预编译方式)的讨论

新成员加入
。zth_cn将参与JFoxEJB的设计与开发
。Kelvin wu 现在在实现 DataSource 和JDO
...
orbat对zth_cn说: 今天的主题是 tisom 的 ejb 容器的实现(09:47)

allen_long对大家说: 议题:EJB容器,JFoxEJB的设计与实现,tisom将和大家一起讨论他所设计和实现的JFoxEJB 0.1.0(09:47)

tisom微笑着对orbat说: hi,好久不见(09:47)

tisom微笑着对orbat说: 我还等你的jmx kenel 呢(09:47)

orbat对tisom说: 是阿,知道你很忙阿(09:47)

tisom微笑着对orbat说: 和jms(09:47)

zth_cn微笑着对大家说: 好(09:47)

tisom微笑着对orbat说: 公司的事情真的很多。(09:48)

orbat对tisom说: kernel 这部分我现在在做 pool ,pool 做好了之后,就可以发布了(09:48)

tisom微笑着对大家说: pool ??(09:48)

blueting进入聊天室.(09:48)

zth_cn微笑着对大家说: jmx那部分要用pool?(09:48)

orbat对tisom说: 池,对象池,线程池,连接池(09:49)

allen_long对orbat说: 大下周我们讨论JFox kernel实现(09:49)

orbat对allen_long说: 可以的(09:50)

zongfeng进入聊天室.(09:51)

allen_long对zongfeng说: 好久没联系,最近好吧。(09:51)

zth_cn微笑着对大家说: pool的管理策略用的什么?(09:51)

orbat对zth_cn说: jmx 本身不要用到,但是 jfox 其他很多部分都是要用到的,jfox kernel 由 jmx 和其它一些公用的组件构成(09:52)

zongfeng对allen_long说: 最近心情不好,别的还可以吧(09:52)

orbat对zth_cn说: pool 的管理策略首先是智能的管理,比如根据配置文件自动调整池的大小;还有就是通过 jmx 接口进行手动控制(09:53)

zth_cn微笑着对大家说: 哦,知道了,jfox中怎么划分公用组件?(09:54)

tisom微笑着对大家说: 我个人认为组件应该是分级的。(09:55)

zth_cn微笑着对大家说: 智能的管理,是动态调整吗?怎么做到自适用的?(09:55)

orbat对zth_cn说: 主要就是按 j2ee 的逻辑来划分,比如:JNDI JMS JTA EJB 等,这些组件是相对分离的(09:55)

tisom微笑着对大家说: 具体的讲,第一级 EJB / JMS /共用组件(如:JNDI)(09:56)

orbat对zth_cn说: 当然是动态调整,根据配置文件,而且这个配置也可以通过 jmx 来调节(09:56)

zth_cn微笑着对大家说: 这些很好分的,但是细分...(09:56)

tisom微笑着对大家说: EJB本身也将分拆开来(09:56)

tisom微笑着对大家说: stateless container / stateful container / entity container ...(09:57)

orbat对zth_cn说: 对,ejb 这部分 tisom 就很了解了(09:57)

zth_cn微笑着对大家说: 我对这个很感兴趣,呵呵(09:57)

zth_cn微笑着对大家说: 对于ejb,tisom,你怎么划分?(09:57)

mepp进入聊天室.(09:58)

tisom微笑着对大家说: 简单的设想,jmx kenel 管第一级,各个模块如ejb管自己的(09:59)

tisom微笑着对大家说: example: stateless container / stateful container / entity container(09:59)

tisom微笑着对大家说: 象搭积木一样,一级一级的向上(10:00)

zth_cn微笑着对大家说: 这样的划分是从ejb的类型来得,但是如果要支持bean的运行,我觉得还需要其它的支持(10:01)

mepp对大家说: tisom,把你的想法再仔细的说一说?(10:01)

zth_cn微笑着对大家说: 我觉得还应该包括:容器内部署,运行环境,远程调用,实例池,持久性管理等等(10:02)

mepp对大家说: 是不是整个应用服务器都使用JMX来管理?(10:02)

tisom微笑着对大家说: zth_cn补充的很好,第一级别要包含共有的模块(10:02)

orbat对mepp说: 是的,jmx 就是整个 JAS 的管理框架(10:03)

tisom微笑着对大家说: 持久性管理 就是container实现的。(10:03)

orbat对zth_cn说: 对,这就是 jfox kernel 要做的东西(10:03)

orbat对tisom说: 持久性管理也会做成通用的组件,类似 castor(10:05)

zth_cn微笑着对大家说: 恩,从逻辑上划分清楚后,这个jfox的结构就更清晰了(10:05)

kelvinwu进入聊天室.(10:05)

mepp对orbat说: :)。我觉得应用服务器做大以后,模块化也是很重要的,模块最好不要交叉或分散,不然以后的改动和维护就会很困难了(10:05)

tisom微笑着对大家说: 不过,jfox-ejb目前还没有将我刚才所说的实现.还没有分开stateless/stateful/entity container.(10:06)

zth_cn对orbat说: 从jmx的角度来讲,那些东西需要作为mbean,成为一个服务,对于服务器的模块划分很重要(10:06)

orbat对mepp说: 是的,我们把模块都是单独开发,开发模块的时候,不理睬模块的应用环境,做到模块绝对的隔离性,现在这点暂时还做的不错(10:07)

tisom微笑着对大家说: mepp,这就是耦合的问题了。(10:07)

mepp对orbat说: 对,比如container的persistence和transaction管理就一定要清楚的分离开(10:07)

zhangkx进入聊天室.(10:07)

mepp对tisom说: 是啊:)(10:07)

orbat对zth_cn说: 对,这是个问题,一般来讲,对于一个组件,只把组件核心的类的愿意暴露的接口做成 MBean(10:08)

zth_cn对mepp说: 容器对于事务,命名,安全管理,只是使用(10:09)

tisom微笑着对大家说: zth_cn有兴趣的话,可以先一起设计jfox-ejb的模块划分。我觉得,如果不分开的话,我们的jfox-ejb很难再上一个台阶,代价会越来越高(10:10)

orbat对大家说: 我来介绍一下, Kelvin wu 现在在实现 DataSource 和JDO,他以后将成为 jfox 的核心成员,当然还得看他的具体表现(10:10)

tisom微笑着对大家说: 建议先不要去想代码的实现(10:10)

zth_cn对orbat说: 我觉得jboss3.x关于这个做的很好,它把每个服务作为一个xml文件,然后每个xml中包含自己服务的一些mbean,如何通过部署来加载服务(10:10)

orbat对tisom说: 对,tisom,你现在是改进的问题了,多考虑这个问题(10:11)

tisom微笑着对大家说: 这很容易实现的。(10:11)

zth_cn对tisom说: 好的,我们一起来讨论(10:12)

orbat对tisom说: 那就好阿, ejb 这部分,要想做好,学问那可是很多的哦(10:12)

zth_cn对tisom说: 你对ejb2.1的一些新服务怎么看?(10:13)

orbat对大家说: 好,现在把主题转到 tisom 的 ejb container 的实现上来(10:14)

kelvinwu微笑着对大家说: hi, everyone!(10:14)

tisom微笑着对大家说: 你举个例子把,我有点忘了(10:14)

kelvinwu微笑着对大家说: 大家好(10:14)

zth_cn对tisom说: webservice 和 timer service等(10:15)

orbat对kelvinwu说: hi, kelvin, welcome to join huihoo's jfox team(10:15)

zth_cn对tisom说: 还是你说说,ejb container的实现把(10:16)

tisom微笑着对大家说: webservice,讲起来很多。UDDI(10:16)

orbat对zth_cn说: jmx 提供了 timer service ,不知是否可以满足要求(10:16)

tisom微笑着对大家说: UDDI , universal , description , *,*(10:17)

tisom微笑着对大家说: 包含服务搜索,注册,使用等(10:17)

zth_cn对tisom说: 呵呵,还是先讨论ejb container把(10:17)

orbat对tisom说: 应该只是一个 web service 的 connector(10:17)

orbat对tisom说: 用来和 webservice 服务器通信(10:18)

cocia进入聊天室.(10:18)

tisom微笑着对大家说: 哦(10:18)

tisom微笑着对大家说: soap(10:18)

tisom微笑着对大家说: 这个的话,我门可以oem soap(10:19)

orbat对tisom说: 是的,也许就这这么简单 rmi <=> soap(10:19)

allen_long对大家说: 大家围绕EJB容器的设计与实现等话题展开。WebServices的东西放在OpenWeb中讨论(10:19)

mepp对tisom说: Entity Bean到数据库的表格是如何映射的呢?这是一些EJB developers抱怨的较多的问题了。(10:20)

allen_long对tisom说: 把你的更多EJB的设计细节告诉大家。(10:20)

mepp对tisom说: 一般EJB developers认为一一映射限制的太死(10:21)

tisom微笑着对大家说: ok(10:21)

tisom微笑着对大家说: jfox-ejb : container / jndi / jmx / jta / ha / transaction manager(10:21)

tisom微笑着对大家说: container : persistence / security(10:22)

cocia对大家说: sun说,j2ee 1.4标准将把一大批小的app server淘汰,被jfox已经实现了,是不是就是没有被拉下呢:)(10:22)

orbat对tisom说: ha 是什么?(10:23)

zth_cn对大家说: cluster(10:23)

tisom微笑着对大家说: cluster: 涉及的东西最多,目前实现的实际上是ha jndi.(10:23)

zth_cn对orbat说: ha= high available(10:24)

tisom微笑着对大家说: yes(10:24)

orbat对zth_cn说: oh(10:24)

cocia对tisom说: jta 和transaction manager有什么联系和区别?(10:24)

tisom微笑着对大家说: jta是用于分布式事务处理的。(10:25)

tisom微笑着对大家说: 加上jts,jts是ots在java中的映射,就可以和corba通信(10:26)

orbat对tisom说: 谈谈 jta 的具体实现,我想大家在这方面了解得都比较少(10:26)

cocia对mepp说: 最近可好?我刚换了工作。现在在适应新环境。公司还不准加班,所以orbas得工作拖后了一些(10:26)

tisom微笑着对大家说: 实现异购环境的transaction(10:26)

orbat对tisom说: local transaction 又是怎么回事?(10:27)

zth_cn对tisom说: jta,是自己实现的?(10:27)

tisom微笑着对大家说: ye(10:28)

mepp对cocia说: :)当然是自己的本职工作要紧(10:28)

tisom微笑着对大家说: 是的(10:28)

zth_cn对tisom说: 关于事务和线程关联,我一直不是很明白(10:28)

cocia对mepp说: 明天是orbas得讨论吧(10:28)

mepp对cocia说: 是的,有时间的话参加一下(10:29)

tisom微笑着对大家说: 我发mail给你吧(10:29)

dfdfswsw进入聊天室.(10:30)

mepp对cocia说: JTA是java Transaction API,transaction manager负责管理事务(10:30)

cocia对mepp说: 应该可以,如果明天这个时候不开会的话。(10:30)

zth_cn对tisom说: 好的,thanks(10:30)

dfdfswsw对大家说: hi all(10:31)

orbat对tisom说: local transaction 又是怎么回事呢?怎么实现? 你还没说阿(10:31)

tisom微笑着对大家说: 简单讲,事务和线程没有太大的关系(10:31)

tisom微笑着对大家说: 我们讲事务还是和数据库相关的。(10:32)

zongfeng离开了聊天室.(10:32)

dfdfswsw对allen_long说: 不好意思 今天主题是事务吗?。(10:32)

zth_cn对tisom说: 恩(10:33)

tisom微笑着对大家说: jta其实就是说,数据库厂商支持jta,其他应用开发商通过jta接口去实现事务(10:33)

tisom微笑着对大家说: 如果所有的db factory,都支持jta,不就可以实现dtp了(10:33)

zth_cn对tisom说: 现在的tm是用的什么?tyrex?(10:34)

tisom微笑着对大家说: yes(10:34)

tisom微笑着对大家说: 就是tyrex(10:34)

cocia对mepp说: jta实现标准接口,tm实现jta真正的服务?(10:35)

tisom微笑着对大家说: 我在oracle上测试过.(10:35)

mepp对cocia说: 对,再java中是JTS(java transaction service),每个局部事务是由JDBC来完成的(10:36)

mepp对cocia说: jts就负责管理JDBS的XAResource(10:37)

tisom微笑着对大家说: cocia,不是这样的。jta包含: appserver / 资源管理 /事务管理(10:37)

mepp对tisom说: JTA不过是一组接口而已,java Transaction API(10:38)

tisom微笑着对大家说: container 是 appserver 和 tm(10:38)

mepp对tisom说: 数据库对分布事务的支持需要JDBC支持XAResource(10:38)

dfdfswsw对大家说: tisom 好像应该是x/open分为这三个 资源管理/事务管理/应用 然后jta符合x/open(10:38)

tisom微笑着对大家说: 数据库实现资源器(10:38)

mepp对tisom说: 其实质还是DTP模型和XA接口(10:39)

dfdfswsw对大家说: jta不过是接口。。。(10:39)

dfdfswsw对大家说: 但是真正意思上的应该是基于x/open的dtp模型参照(10:39)

mepp对tisom说: jta与xa没有关系(也许是并列的关系:)),JDBC来支持XA接口(10:40)

tisom微笑着对大家说: mepp,是(10:40)

mepp对大家说: :)(10:41)

tisom微笑着对大家说: 但是xa是一个规范,jta定义了这个规范用java实现的接口的规范(10:41)

dfdfswsw对大家说: http://www.roguewave.com/support/docs/sourcepro/dbxaug/2-1.html(10:41)

dfdfswsw对大家说: An abstract model of the DTP environment(10:42)

mepp对大家说: 关于事务的部分我是这么理解的:JTA封装JTS(也许还要用到其他的transaction接口),JTS管理JDBC,JDBS驱动直接调用DB的XA接口,不知道对不对(10:43)

tisom微笑着对大家说: 看你们了(10:44)

orbat对mepp说: 我觉得有偏差, JTS 本身提供对 XA 的实现(10:45)

tisom微笑着对大家说: mepp,其实jdbc 3.0中是包含xa的(10:45)

tisom微笑着对大家说: jdbc 2.0确不包含(10:45)

dfdfswsw对大家说: 不应该是jta封装jts吧(10:46)

dfdfswsw对大家说: jts只是sun提出的java的ots实现吧。。(10:46)

mepp对大家说: 是的,不过具体的XA接口还是需要DB来实现的,JDBC只是使用了DB的XA接口(10:46)

orbat对大家说: jta 调用 jts(10:46)

dfdfswsw对大家说: jta有xa的接口(10:46)

mepp对dfdfswsw说: :),也许JTA和JTS是并列的(10:46)

mepp对大家说: 我刚才查了一下JTA规范,发现(10:47)

zth_cn对大家说: 我觉得很多大家说的是一个意思,但是表达引起了二义性(10:47)

mepp对大家说: JTA规范比我想象的要包含更多的东西:)(10:48)

orbat对大家说: JTS 用于分布式事务的管理,JTA 实现本地事务,以及对分布式事务的一个调用接口(10:48)

allen_long对tisom说: JFoxEJB容器是预编译的还是动态代理(支持热部署),要大量用到JAVA的反射机制(10:49)

mepp对大家说: 我刚才的说法有些地方不正确(10:49)

dfdfswsw对大家说: 也就是说jta不一定非要调用jts(10:49)

mepp对dfdfswsw说: 是的(10:50)

tisom微笑着对大家说: 预编译的还是动态代理 ??(10:50)

zth_cn对tisom说: 因该是动态代理的(10:50)

allen_long对tisom说: JFoxEJB一共实现了几种容器?(10:50)

tisom微笑着对大家说: 四(10:51)

zth_cn对tisom说: 客户对于ejb方法的调用,实际上通过由容器提供的Home接口和EJBObject接口,因此在容器端,必须有这两个接口的实现,然后由其转交给bean实例,完成请求调用。通常根据生成实现类的过程不同,把EJB容器的设计方法分为两种:(10:51)

orbat对大家说: JTA 只有通过JTS,才能获得和支持 OTS 的服务器的协同工作能力,也就是获得分布式事务处理能力(10:51)

allen_long对tisom说: 那基本上都齐啦。(10:51)

tisom微笑着对大家说: 是的(10:51)

zth_cn对tisom说: 预编译方式。例如jonas(10:52)

zth_cn对tisom说: 动态代理. 例如jboss(10:52)

tisom微笑着对大家说: 简单讲讲,ok?(10:52)

tisom微笑着对大家说: jonas(10:52)

zth_cn对tisom说: 预编译方式。通常在部署工具部署bean时,生成Home和EJBObject接口的实现类。在client方法调用时,装载和实例化这些类,从而提高EJB容器的性能。但是也有它的缺点:必须用特定的部署工具,并且也不支持热部署。例如JonAS EJB容器就采用的这种方式,它提供了一个工具GenIC,GenIC编译源码来生成实现类。(10:53)

zth_cn对tisom说: 我写的,仅共大家参考(10:54)

tisom微笑着对大家说: 哦,thanks(10:54)

zth_cn对tisom说: 动态代理方式。在容器内部署或者在调用时,用反射的方式动态生成Home和EJBObject接口的实现类,这种方式灵活,而且支持热部署。(10:55)

tisom微笑着对大家说: 我明白了,thanks(10:55)

orbat对zth_cn说: 说说采用动态代理,就可以支持热部属呢? 我一直有点困惑(10:57)

dfdfswsw对大家说: 也就是说同样数量的bean jonas加载 实例时间要小些。。(10:57)

dfdfswsw对大家说: ?(10:57)

orbat对dfdfswsw说: 主要是运行时,采用动态代理会有一些性能上的损失(10:58)

allen_long对大家说: zth_cn对EJB容器的机制和设计有深刻认识,他将参与JFoxEJB的设计、实现与完善中(10:58)

orbat对dfdfswsw说: 可以参考 java.lang.reflect.Proxy(10:58)

allen_long对tisom说: zth_cn将协助你完善EJB这部分。(10:58)

dfdfswsw对大家说: 感觉预编译和动态代理可以混合呀 使用专有工具的时候采用预编译,直接部署的时候采用动态代理。。。(10:59)

dfdfswsw对大家说: 对呀reflect 反射出class内部的信息(10:59)

orbat对dfdfswsw说: 这样当然不好,灵活性 和 性能都丧失了(10:59)

cocia对zth_cn说: 那weblogic应该是预编译方式吧?(11:00)

zth_cn对dfdfswsw说: 恩,好建议(11:00)

tisom微笑着对allen_long说: ok(11:00)

zth_cn对dfdfswsw说: 可以同时支持(11:00)

orbat对dfdfswsw说: not all(11:00)

dfdfswsw对大家说: 我对ejb容器 还不是太熟悉 (jms熟悉些) 说错了不要笑我。。(11:00)

orbat对zth_cn说: 和你深入讨论一下动态代理的问题(11:00)

orbat对dfdfswsw说: 我正在实现 JMS, 有机会好好聊, 呵呵(11:01)

dfdfswsw对大家说: 这样当然不好,灵活性 和 性能都丧失了 我觉得不会呀。(11:01)

zth_cn对大家说: 一些商业产品,都是预编译的。象websphere,它部署是会生成一些辅助类(11:01)

zth_cn对orbat说: 好的,下来email联系(11:02)

dfdfswsw对大家说: 不能像服务器上的热备份那样 同时跑一个ejb Managenr管理2个ejb容器。。(11:02)

orbat对zth_cn说: OK(11:02)

dfdfswsw对大家说: 1个代理 1个预编译(11:02)

dfdfswsw对大家说: 好了(11:02)

zth_cn对大家说: 而且没有它的部署工具是不能运行的(11:02)

dfdfswsw对大家说: 好的 orbat 我的email suwei@zdage.com(11:03)

orbat对dfdfswsw说: ok(11:04)

dfdfswsw对大家说: 那个为什么不把部署工具做到服务器这面 使用B/S部署 同样可以实现预编译呀(11:04)

zth_cn对大家说: my email: zth_cn@sina.com(11:04)

orbat对大家说: thanks you both, nice to meet you two(11:07)

orbat对dfdfswsw说: 可以的阿, weblogic 不就是使用 browser 来部署的吗?(11:08)

zth_cn对大家说: 主要是实现方式的不同,不仅仅在部署上面(11:08)

allen_long对tisom说: 关于JFoxEJB的更多细节你也可以告诉大家。(11:10)

dfdfswsw进入聊天室.(11:10)

zth_cn对tisom说: 关于这个,就说到这吧。其它还讨论什么?(11:11)

dfdfswsw进入聊天室.(11:11)

zth_cn对tisom说: 我觉得今天共提出了3个问题:(11:11)

tisom微笑着对大家说: 嗯(11:12)

orbat对大家说: OK, 请 zth_cn 帮大家回顾一下(11:12)

zth_cn对tisom说: 1。jfox的功能划分。包括ejb 容器内组件划分(11:12)

mepp离开了聊天室.(11:13)

zth_cn对tisom说: 2.ejb 容器内关于事务的一些问题讨论(11:13)

zth_cn对tisom说: 3. 关于ejb容器实现方式(动态代理,和预编译方式)的讨论(11:13)

tisom微笑着对大家说: 我想第一个问题是最迫切的。(11:14)

zth_cn对tisom说: 不知道还有什么要补充的?(11:14)

tisom微笑着对大家说: 全面(11:14)

zth_cn对tisom说: 如果大家还不是很明白,希望下来用email互相讨论,呵呵(11:15)

orbat对大家说: tisom, 我觉得今天讨论的问题很详尽,很成功,你觉得暂时没有补充的话,那就让我们把余下的精彩话题留给下一期,如何?(11:15)

tisom微笑着对大家说: Email : tai_1219@sina.com(11:16)

tisom微笑着对大家说: OK(11:16)

fat1进入聊天室.(11:16)

orbat对大家说: OK,谢谢大家的参与,让我们一起努力,让 jfox 茁壮成长,谢谢大家!(11:17)

orbat对fat1说: 你来晚了,真遗憾,呵呵(11:17)

tisom微笑着对大家说: Bye(11:18)

tisom离开了聊天室.(11:18)

fat1对orbat说: :-((11:18)

orbat对fat1说: 好的,再会,本期讨论的资料 Allen 将会发布的 huihoo 网站上,没有到会的朋友可以浏览(11:19)

zth_cn对大家说: 我也要走了,bye,大家多联系!(11:22)

zth_cn离开了聊天室.(11:22)

allen_long对大家说: 好的,大家今天就聊到这,第三周一我们再见面。讨论有关JFox核心设计和实现的问题,orbat将为大家带来精彩讲解。(11:22)

allen_long对大家说: 谢谢大家的参与,讨论记录我随后发布到网上。保持联系。明天CORBA/SNMP,CORBA/CMIP的讨论,欢迎有兴趣的朋友参加(11:23)