对话JFox 3.0核心开发人员杨泳

个人简介 杨泳,JFox首席架构师,从事企业应用平台研发工作已有5年,兴趣主要集中在JavaEE架构研究、应用框架和通用服务的研发等。可以通过[email protected]与他联系。

   

1. 请给大家做一下自我介绍

好,大家好,很高兴接受InfoQ的采访,我叫杨泳,自从毕业以来,一直从事Java的企业级应用的开发,那么呢,主要就是在Java企业级应用的一些架构方面的设计,同时我也对开源软件非常的爱好。自从2001年以来一直都是在做一个中国的一个开源的应用服务器,名叫JFox。到现在我们已经坚持了有六年,今天很高兴来跟大家一起来分享JFox。

   

2. 那么JFox究竟是一种什么样的东西呢?可不可以跟我们详细地介绍一下呢?

嗯,好的。那么在中国的话,自从2000年以后啊,J2EE在中国就开始普及,那么呢,在中国的一群Java爱好者里边,就非常的希望能够拥有大家自己开发的一个J2EE的应用服务器,那么当时还叫中间件。这个时候呢,我有幸和一些Java的爱好者一起创立了这么一个项目,那么我们就是致力于用我们自己的能力来开发一个J2EE的应用服务器。

   

3. 那么JFox具体有哪些特点呢?

现在JFox主要的特点,它可以包括三个部分,一个是轻量,另外一个就是实用,最后一个就是差异化。因为我们要想在开源的J2EE应用服务器里边选择的话,也有很多,Java的爱好者有很多的选择,所以JFox需要保持和这一些通用的应用服务器一定的差异,它才能获得Java开发人员的喜爱。

   

4. 刚才你也说到,JFox和其他的应用服务器是有区别的,那么和其他的应用服务器比如说开源的,像Tomcat究竟有哪些区别呢?

你刚才就你刚才提到的这个Tomcat,也可以认为它是一个J2EE应用服务器,但是,它之支持的规范毕竟有限,因为他主要致力于开发一个Servlet,也就是主要在Web这一块的一个Web Container。那么JFox的话和Tomcat它们的定位是不一样的,JFox是致力于成为一个EJB的,它致力于开发一个EJB容器,以及与EJB组件相关的一些服务,用来支持一些EJB这个组件。所以说呢,JFox我们可以认为它是一个全功能的一个J2EE的应用服务器,所以这是它与Tomcat的一个本质的一个区别。那么当然要说到区别的话,可能我们主要要和这个在开源的J2EE的应用服务器第一位的一些JBoss来比较。JFox开发之初啊,我们JBoss也是我们主要的一个参考对象,因为JBoss的微内核的设计,在当时也是被认为是非常优秀的,那么我们也想在开发JFox的过程中,对它微内核能够做一个更深入的一个了解。那么在JFox 1.0版的时候,我们的主要目标就是吸收JBoss的一些优秀的特性,然后再结合我们自己的对EJB容器的一些认识,然后再尽可能的用我们的思维去将整个实现的过程简化,然后来实现JFox。我想与JBOSS的一个区别的话,首先刚才我讲到JFox有三大特性,第一个是轻量,第二个是实用,第三个是这个差异化,我想在这三点之上都可以和JBoss做一个比较。首先呢,在这个轻量,我们都知道JBoss刚刚出来的时候,它被认为是一个轻量的这么一个J2EE的应用服务器,所以它非常受欢迎,但是经过几个版本的变迁之后,JBoss现在已经逐渐的显得臃肿。所以现在来看,JBoss开发也不是那么一个很轻松的事情,为了让它变得更加的轻量,所以我们采用了,比如说通过这种内嵌的这个EJB容器的这种方式,我们把整个JF偶像的容器包括它的内核,它的容器,它的各种服务,变成了一个WEB的War包进行部署。这样的话,我们让开发人员在开发它的EJB应用的时候,和传统的开发Servlet,开发JSP这种WEB应用,不会有太大的差别。这样的话,一方面让他的开发更加简单,更加轻松,同时也方便已有的应用可以移植到JFox上面来;第二点的话,是这个实用性,JFox在实用性的方面的努力的话,主要表现在JFox它集成了一个轻量的和我们的应用服务器集成的非常完美的一个MVC的一个框架。那么在这个MVC的框架里边,它可以直接使用JFox的内核的服务,它和JFox的各种容器、各种服务共享一个微内核。同时呢,JFox开发的JPA的容器,因为我们在开发JPA的容器的时候,并没有按照规范限定的这个内容来完完整整地开发,我们只是选取用户最需要的功能来进行开发。第三个呢,就是差异化,在差异化方面我想刚才也讲到了一部分,比如说,JFox实现了一个非常好用的MVC的一个框架,另外JFox,我想在这里讲的话,我主要想讲一下这个JPA的容器。JFox的JPA的容器不能同于一般的应用服务器的JPA容器,我们知道一般的应用服务器的JPA的容器的话,它是基于纯粹的ORMapping的方式来进行设计的,JFox的JPA的容器是基于这个iBatis,类似于SQL Template来进行设计的,那这样的话他在开发Entity的时候,可以享受到通过直接控制SQL语句来达到提升你的性能,控制你的这个整个的这个JDBC的交互这么一个能力。总之的话,通过它可以来提高,提供更好的这个数据库的持久化的能力。

   

5. JFox团队最近发布了JFox的3.0,那么请给我们介绍一下,关于JFox 3.0的一些新的特性?

嗯,好的。那么JFox 3.0是我们在今年的5月底发布的。它的3.0版本也和EJB的3.0版本一样,对于JFox来讲是一个非常重要的版本。那么JFox 3.0它的主要特性包括比如从3.0开始,我们支持了EJB 3.0,JPA这么一个规范。同时我们对它的内核,对EJB的容器以及相关的服务进行了一个全面的一个改造,我想的话,JFox 3.0我们可以自信地说,JFox 3.0能够满足中小型企业对J2EE中间件的这么一个要求。

   

6. 可以对JFox 3.0新的特性做一个列表吗?

好的,那么JFox 3.0首先我们采用了独立自主开发的一个IoC的一个微内核。这个微内核呢,是我们加入了很多新特性,比如说它能够很好地支持模块化,还有我们从OSGi还引入了其他的特性,比如说引用了这个可以使用Export来帮助这个模块内部的接口。另外呢,它也采用了类似于OSGi的动态的依赖关系,另外呢,我们对EJB3的容器也做了一个比较大的一个改造,当然首先要让它支持EJB3的规范,另外我们对一些EJB3的容器的话进行了一定的简化,比如说用JFox的EJB容器的话,它只能支持Local的方式来对EJB组件进行访问,当然这可以说是从一方面来讲,这可说是JFox对EJB规范支持不够的地方,但同时呢,也是我们让EJB组件更加简化的一个改进。因为绝大多数情况下,我们都是通过Local的方式来访问我们的EJB,同时JFox的EJB也可以通过Web Services来进行访问,我们都知道,Web Services是基于HTTP的,那么也就是说,JFox的EJB组件一旦发布成Web Services的时候,他可以通过远程来进行访问。

   

7. 现在微内核已经成为应用服务器开发的一个趋势,那么请问JFox 3.0是如何实现微内核的?它有什么特别之处?

好的,那么要讲JFox 3.0的这个微内核的话,这要需要接触到JFox 1.0。因为JFox从它开发开始,我们就把微内核的开发作为我们非常重要的一个基础的功能,因为我们知道JFox也是基于Internet协作来进行开发的,那么一个良好的微内核对于它上面的服务的集成是非常有好处的。JFox1.0我们采用的微内核是基于JMX的,因为刚才我说到是我们是按照JBoss的技术路线,那么在这个上面我们并没有多少的创新,我们完全按照JMX规范来进行实施。JFox 2.0我们是一个纯的IoC的一个内核,那么在这个内核上呢,我们主要考虑要实现它的模块化,这样的话,JFox因为服务器上面的各种服务,各种容器,可以以模块的方式部署到这个JFox的内核上边来。那么在JFox 3.0我们对JFox 2.0这个内核的又进行了一项改造,那么这个改造主要是有这么几个方面,第一个采用的Annotations来替代以前的XML文件,这样的话来简化我们的开发和这个模块的部署;第二个呢,就是我们引用了一些OSGi的一些概念,比如说,OSGi的模块的概念,那么JFox之前,在这个模块这一方面没有很好地提出一些,比如说模块的边界,模块的服务的发布,那么从3.0版开始,内核提供了一个比较完整的一个模块的一些语义的支持,同时还支持了一些OSGi其他的一些特性,比如说,动态的依赖关系,还有OSGi的export这么一个服务的发布机制。

   

8. 现在很多应用服务器厂商,计划把OSGi作为他们的下一代的核心基础架构,那么JFox有没有计划在它的下一个版本里面引入OSGi的思想?或者对OSGi进行支持呢?

自从这个Eclipse架构在OSGi上成功之后,很多的这种运用啊,包括一些用用服务器,都在尝试把它们的基础架构向这个OSGi方面转型,JFox在规划3.0版本的时候,实际上也曾经做过这样的尝试,但是后来我们发现呢,我们一方面,JFox并不能用到OSGi全部的内容,另一方面,我们发现,OSGi的Bundle这种模块化的方式对于JFox来讲,它并不是太适合。所以我们没有选择直接把JFox 3架构在OSGi上,而是选择对JFox 2的IoC微内核进行改造,然后引用了部分的OSGi的概念,这样来满足JFox开发的需要。至于未来的话,因为JFox,我们最关注的还是它的EJB的容器怎么发展,如果这个JFox 3.0的内核能满足我们JFox应用服务器需要的话,我想JFox转移到OSGi上面去的可能性会比较的小,当然我们也不排除有这种可能性。当然另外一种方式就是说,我们可能也会在现有的这个基于IoC的内核,然后通过融入更多的OSGi的概念,来JFox应用服务器的要求。

   

9. 刚才你也提到这个OSGi的这个概念,我们认为这个是一个很重要的概念,那么请问,你对OSGi是怎么理解的?

我觉得OSGi最重要的两部分内容的话,第一个是模块化,第二个是动态性。首先在模块化这一方面,因为从很长时间以来,各个开发厂商都在说,我们的应用都是基于模块化进行开发的,但是在Java领域里边,一直都没有权威的机构来对模块化来进行定义。那么OSGi给模块进行了一个非常好的定义,那么它包括,比如说模块化的一些隔离,它的版本,它的发布等等这方面的内容。当然,现在在JCP里边也有这样的规范,叫做Java Module System。我想的话,由于这个OSGi在模块化这一方面的贡献,Java的模块化道路一定会越走越好。第二个就是OSGi的动态性,动态性呢,又可以分为它模块的动态性以及组件的动态性。模块的动态性我们都知道OSGi的模块,它可以动态的Stop,也就是Ready Deploy,那么这样的话,可以在不重启整个应用的情况下,通过重新部署一个Bundle来达到更改这个Bundle的服务能力的一个目的;第二个呢,就是Component的动态性,集中体现在它的一种动态依赖关系的处理,这样的话,可以通过配置,来让一个引用通过不同的配置,来引用不同的Component,那么这个能力呢也是OSGi独有的。Spring的这个依赖关系我们成为静态的依赖关系,那么OSGi的依赖关系,我们称它为一种动态的依赖关系。很高兴告诉大家的就是JFox的依赖关系的处理也是动态依赖关系。

   

10. 今天我们也非常荣幸的请到了JFox团队的项目协调人程勇先生,请你给我们介绍一下JFox团队的一个发展历程。

大家好,我叫程勇,我是那个,在网上名叫Founder Cheng,是那个JFox的整个项目的这个,我们叫项目协调人,在开源社区里边,那么我简单来追述一下JFox发展的一个过程吧。那么JFox项目大概从2001年开始起步,从开始的两三个核心的这个开源项目的这个爱好者,逐渐成为呢,JFox项目的整个团队,那么JFox在2003年到04年期间呢,JFox团队发生、发展到了一个非常鼎盛的时期,当时在整个JFox在听不清上大家看到的这个开源项目呢,参与者达到了30多人。那么随着整个开源社区在中国的一个发展,可能有的人持续的爱好性特别强,有的人只是短暂的这个停留,那么可能从2003年之后呢,有一部分人可能由于各种原因他选择了去其他的一些项目,那么,所以到现在下来呢,JFox整个核心团队坚持了大概有五六年以上的时间,有那么四五个人一直在为JFox整个项目,做了更多的贡献。JFox在六年的发展过程当中呢,它不仅有来自于有中国大陆的一些核心成员参与的开发,同时也得到了来自全世界其他地方的开源爱好者或者开源的这个开发人员的支持。

   

11. 那么如果说我想去参与到JFox的开发,有什么样的步骤?

如何参与到一个开源项目的开发呢,有这么大概五个步骤。那么第一步呢,首先是学习,你做任何一件事情,或者参与到一个社区项目的时候,首先你要学习开源项目或者开源社区它本身的游戏规则,你要了解你想要参与到这个社区里边,你要应该知道哪些基本的规则,你应该做出哪些贡献;那么第二步呢,你就要去为这个开源的项目做出你应有的贡献,那么通常来讲呢,进入一个开源项目的整个规则是稍微比较高一点,因为说,开源社区凡是好的,我们大家看到就是在Sourceforge上你可能看到会有成千上万个项目,但是真正好的项目只有那么一些做的非常高质量的一些项目。那么高质量的项目它毕竟要求参与到这个里边的人是高质量的,所以它就需要要求你参与到这个里边的人是有真正的这个耐心和认真的这个态度,去做这个事情,这样你才能够成为他们真正的一个Commiter,所以说获得这个Commiter的权限,相对来说是比较难的,所以说你要去知道,怎么去获得成为Commiter这个权限的这样一个能力,和具备这样的能力,这是第二个;那么第三个呢,你就是可以去,实际的去为这些开源项目做一些工作,比方说,你去发现这个当中一些问题,做一些Bug的调整啊,打一些Patch,那么通过你不断的参与之后呢,开源社区就会对你有这么一个认同;那么第四步呢,你就可以开始考虑,提出申请,就像你去申请到国外去留学一样啊,你可以向社区里头的人发这么一个Application的申请函,那么这个时候呢,社区的人会根据你的申请的情况,根据你实际做的工作来对你进行投票,当你的投票的数目获得了半数以上的认可之后,这个你就获得了一个开源项目的一个Commiter这个权限,那么Commiter这个权限之后呢,你就拥有这个能力和访问的权限,去修改或者说去增加,你对这个开源项目的这个源代码这些相关的一些工作。

你可能感兴趣的:(对话JFox 3.0核心开发人员杨泳)