JFox(J2EE Application Server Implementation Project)

JFox3 2007开发计划

1.Why JFox3?

从2002到现在,JFox走过了整整5个春秋,感慨良多! JFox的初衷是为了让所有参与其中的贡献者更好的了解J2EE的细节,从而在工作中提供更优秀的J2EE的应用架构。然而,在深入了解EJB之后,相信 很多人和我一样,因为EJB的复杂性使得将其应用在项目中失去了信心,转而倾向于采用without EJB的轻量级架构,至少在我接触的产品中,我更多的是充当EJB架构反对者,这实在是令人惭愧!

如何简化基于J2EE/EJB体系架构的应用的开发、测试、部署已经成为摆在J2EE的规范制定者以及开发者面前迫切需要解决的问题!

随 着EJB3的出现,这种尴尬的局面正在逐渐有了改善,EJB3更简单,更POJO,加入IoC/AOP等思想,独立的JPA(Java Persistence API),让EJB的开发人员第一次看到,原来EJB也可以这么简单。然后一个传统的应用服务器已经积重难返,一个全新设计的J2EE应用服务器仍然必不可少。

2007,JFox将踏上它的EJB3之旅,JFox将不再以通过Java EE认证作为终极目标,而将以“KISS”作为它的最高原则,提供一个快速的、适用的、完善的J2EE应用开发平台。具体的说,JFox3的就是: Lightweight, Simplicity, Practicability。

2.JFox3 is a Embeddable Java EE Application Server!

Embeddable是JFox3为了实现LightWeight?目标而做出的重大的决策,将使得测试和开发EJB组件就像开发Servlet组件一样简单。JFox3 将作为一个 Web application嵌入到Tomcat/Jetty/Resin等Web Server中,并为该 Web application提供EJB Container、Transaction Manager、JNDI、DataSource?等服务。

同时,为了满足Simple原则,JFox在尽可能满足Java EE规范的前途,按照8/2原则,做了取舍,具体如下:

* 放弃支持EJB2 EJB1(有了EJB3,还会有多少应用考虑部署在EJB2上呢)
* 前期只考虑支持 Local类型的EJB(80%情况下,EJB和Servlet均部署在一个JVM中)
* 前期只支持给予 SQL Template的Native JPA(Native SQL可以满足100%的需要,但是纯的O/R不行)
同时JFox3将做以下增强:
* 增强TransactionManager?和DataSource?的可靠性,采用开源事务处理器JOTM和数据源XAPool
* 内置对Web Service的支持,可以将EJB以Web Service方式发布出来,以提供远程访问能力

总之,JFox3将致力用20%的时间完成常用的80%的功能,并且让它尽可能好用。

3.JFox3 is Application Framework Ready!

JFox3 将定位为提供完善的应用开发框架,以满足快速化开发的目标。当前,人们需要的不仅仅是Java EE Application Server,还有Java Application Framework,JFox通过实现这个目标,来让更多的产品来使用,从而让更多人从JFox中受益的同时,也推进JFox不断完善。JFox将从以下 几个方面来支持Web应用开发。

3.1 IoC/AOP支持

JFox Application Server一直采用自己研发的IoC内核,并且以Dynamic Proxy 实现AOP功能,基于JFox3进行应用开发时,将可以直接使用JFox3 Application Server的IoC容器,所以,一旦一个应用组件被部署在JFox3中,将有能力注入JFox3 IoC容器中任何组件,包括EJBContainer,Transaction Manager等,虽然你可能很少会这样做,但是至少不会再出现以前Application Server有IoC容器的内核,而在应用开发仍然需要再部署一个类似Spring这样的IoC容器的麻烦。

在IoC容器方面, JFox3将继续增强CMD(Container Managed Dependency)能力,而在Dependency的描述方面,适应当前趋势,采用 Annotation 来进行依赖注入的描述,而仅需要使用外置的properties文件来动态配置占位符参数,这样不仅将大大减少配置文件,而且也不失去配置文件的灵活性,终于可以不再为一大堆的XML配置文件而战战兢兢了 :),同时加强组件之间的Event/Listener功能,对于IoC容器发生的重要事件,通过Event通过给感兴趣的Listener组件,以增强 组件的之间以及组件和内核之间通信能力。

3.2 MVC框架支持

使用JFox MVC将大大简化Web应用的开发(注:可以参考jfox petstore)。 JFox MVC实现了以下功能:

* 请求的接入和分派
JFox MVC使用了两个Servlet来实现请求的接入和分派,它们都将配置在web.xml中,一个Servlet用来实现接入以及Action的分派,一个Servlet实现view的分派。

* 实现自动参数组装和校验
自动实现文件上传,就像使用一般的 input 一样 参数验证失败的情况,提供了补偿的API。

* Action API
Action将作为一个标准的组件注入到JFox3的IoC内核中,这使得可以在Action中直接使用 @EJB 注入 EJB,减少了无聊的 jndi lookup 和 Service Locator(已经不再适用于EJB3)

* Page flow 跳转
使用 Annotation来指定 success view 和 error view,并且支持动态view,特殊情况,还可以通过在程序中来改变 view 的名称。

JFox3 MVC 在 view层默认采用 velocity template engine,当然你也仍然可以使用jsp(强烈建议仅将JSP作为模板来用),但是template 可更纯洁、更高效支持View层的开发,我实在想不出什么情况下一定得使用jsp。

JFox MVC也采用了Annotation来进行各项描述(Action Method, Validator),开发的时候,完全和开发一个非Web一样,EJB都POJO了,Web当然也要POJO!

3.3 DAO(Data Access Layer)

JFox3 Application Framework将提供基于iBatis技术的DAO框架,实际上这是作为JPA的以部分提供的。如果你已经熟悉了iBatis,那么使用JFox的 DAO就非常简单了,只不过JFox DAO采用了Annotation来描述Query,也就是JPA的NamedQuery?, 同时JFox DAO采用了Dynamic Persistence Object Generation技术,这让你在编写 Entity/Data Object/Persistence Object时,只需要提供接口,就可以了,不再需要那些无聊的 getter/setter,还有通过接口来申明Entity/DO/PO的还有其它的好处,比如多继承。

而在JPA部分,JFox只支持@NamedNativeQuery?(实 际上就是SQL Template),这是JPA规范的一部分,也许HSQL/EJBQL更OO,但我始终认为只有Native SQL才能满足100%的需求,这也是iBatis能够生存下来的原因,同时学习曲线也大大降低,框架的可扩展性和可控性也更好,那么为什么不这么做呢?

3.4 模块化的支持

支持模块化开发和部署是一个大型项目的开发平台必备的功能之一,但是Java界却一直没有指导思想,这种状况直到OSGi的被接受才有所改善。

JFox3 对模块化的支持主要体现在模块最重要的两个方面,隔离和依赖,对于版本的支持不打算实现,这留给专业化的模块化框架去做吧。隔离保证每个模块的封闭性,使得每个模块自成一体,这样才能实现独立的开发。 而依赖,一方面模块可以发布一些对外服务的接口,使得其它模块可以通过该接口依赖本模块内的组件;另一方面可以引用其它模块发布的接口,而依赖于对方的服务组件。"依赖"使得模块部署之后能和其它模块协作,来完成整个系统,一般来说,运行时,模块不可能是完全的独立的。纯接口的依赖也使得模块的热部署成为可能(当然接口本身不能改!)

实现了模块的隔离和依赖,将可以满足按模块开发,部署和升级的需要!

4.JFox3 will rewrite JPetstore to provide Best Practice!

JFox3将完全重写JPetstore,为基于JFox3的Web应用开发提供指导; 同时,将尽力提供详尽的设计文档和应用开发指南,帮助感兴趣的爱好更深入的了解Java EE Application Server的工作原理。

5.Release Roadmap

2007年3月发布第一个里程碑版,然后迭代两个版本,5月底发布正式版。

6.Goal of JFox3

JFox3率先在Application Server中集成Application Framework,目标就是提供一个基于Java EE的简单、快速、实用的开发平台!