小雨开源

我也加入到了开源队伍中了

常用链接

统计

最新评论

第三只眼看huihoo-一个值得尊敬的团队

如果你有三年以上的J2EE开发经验,但不知道huihoo,那么你一定不是一个合格的J2EE程序员。在《中国java开源界最可爱的人们》一文中,我把huihoo列在第一位。本文从第三方的角度对huihoo作一个简单的介绍,包括“三个人”、“一个项目”、“三次升级”、“一些不足”、“两点遗憾”及“更多期待”几部分,你可以有选择阅读相关部分内容。

Huihoo是从2001年开始的,那时候国内对j2ee真正熟悉的没有多少人,更别说是j2ee的规范了。然而Huihoo却在深入研究j2ee规范的基础上,研发出符合j2ee规范的、开源的j2ee应用服务器。研发一个j2ee应用服务器所涉及到的知识是非常多,不但要熟悉了解这些规范,而且还需要深厚的java功底,socket、线程及并发、缓存、甚至xml等。因此,你可以想象做这事的人是多么的了不起。

Huihoo的出发点是致力于中间件、基础件的研究与应用。并通过开源这种形式让国内很多在2001年很想知道中间件幕后真相的开发人员能参与进来,对于普及j2ee有着非常大作用。


三个人

Huihoo创立于2001年,这么多年来,其成员来来往往有几十上百人,很多人都犹如过客一样,来也匆匆去也匆匆;另外也有一些成员长期游离在团队边缘,想出力,却发现有力却使不出或者找不到地方使。Huihoo能坚持走到现在,离不开三个发起人,他们可以说是huihoo的灵魂人物。

龙辉(Allen)huihoo的发起人,负责团队的项目组织、协调,负责官方网站的维护、策划,2002年底开始把huihoo当成自己的一个事业,并一直付出到现在。

杨泳(Orbat)JFox的主创人员,也是huihoo的发起人。在Huihoo的众多成员中,为团队贡献过代码的30多人,其中核心的开发人员不到10名,最成功的项目JFox3.0基本上全是一人之手,那就是杨泳。

程勇(Peter Cheng):也是huihoo的发起人之一,在团队内部也称为项目协调人员。凭着他对开源的热情,辗转于北京各高校去宣传开源,推广Huihoo,在多很知名厂商的各种会议上代表Huihoo作主题演讲,并且一直参与JFox等团队项目的协助及管理工作,他对huihoo甚至对中国开源界的贡献是大家有目共睹的。

三个人都是想做事情,也能做事情的人。他们的分工是比较合理,一个负责生产、一个负责管理及后勤、另外一个负责宣传及推广。三人都在各自的岗位坚持了这么多年,并且不断进步,越做越好。


一个项目

作为一个开源团队及组织,huihoo产生过很多点子,下属有很多项目。但是一直坚持并取得一定成果的只有一个,那就是JFox,官方站http://www.huihoo.org/jfox/svn: http://jfox.googlecode.com/svn/trunk

JFox是一个J2EE应用服务器,是一个支持J2EE相关标准(比如EJBJNDIJMSJTA)的应用服务器。在JFox3的文档中,我们看到:JFox被设计为轻量的、稳定的、高性能的Java EE应用服务器, JFox提供了支持模块化的MVC框架,以简化EJB以及Web应用的开发,以满足企业对快速化统一开发平台的迫切要求。JFox 3支持标准如下:EJB3.0JPA1.0JMS 1.1JNDI1.2JDBC3.0Servlet2.5JSP2.1

JFox可以说是从模仿国外同类产品开始的,在1.02.0中,你都会看到JFox中有很多JBoss一些核心部件(如微内核)设计及代码影子。直到JFox3.0,通过整合其它的框架,JFox也提出了一些独创的思想及改进,不断走向轻量。

JFox应该算是比较成功的,得到国内外开源同行的认可,比如mortbayjetty上对jfox就有推荐,也成为了很多做JavaEE应用服务器产品开发的程序员必备的参考对象。


 

(JFox体系结构)

JFox的安装

下载jfox.war ,拷贝到 %TOMCAT_HOME%/webapps 下,以便在Tomcat启动时加载。JFox 3应用服务器是设计成嵌入式的,作为一个标准的Web Application部署在Tomcat中。启动Tomcat,默认配置下,使用浏览器访问 http://localhost:8080/jfox,如果看到JFox欢迎页面,那么恭喜你,JFox安装成功了。

运行EJBJPA

1、容器内运行

将你的javaee应用打成jar包,可以发布至WEB-INF/lib下,JFox提供了更好的以模块的形式来发布你的应用,Web服务器Tomcat启动时,会自动启动JFoxEJB容器,并发布你的应用;可以通过查看日志或者使用管理控制台来检查你的EJB/JPA组件是否发布成功。

2、容器外运行

容器外运行EJB,使用如下代码启动Framework:

Framework framework = new Framework();

framework.start();

Framework启动时,会自动加载所有的EJBJPA Entity,启动之后,即可以通过JNDI lookup 得到EJB并发起调用。

容器外运行JPA,则可以通过如下方式创建EntityManager

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("default");

final EntityManager em = emFactory.createEntityManager();

创建EntityManagerFactory的时候,会自动加载JPAEntity

然后便可以通过EntityManager发起各种持久化调用。

 

3、使用JNDI

jndi.properties配置如下:

java.naming.factory.initial=org.jfox.ejb3.naming.InitialContextFactoryImpl

java.naming.factory.object=org.jfox.ejb3.naming.InitialContextFactoryImpl

java.naming.provider.url=java://localhost

程序中可以使用JNDIContextHelper.getInitalContext()得获得JNDI环境。

 

4JPA支持多数据库


@NamedNativeQuery(

         name 
= AccountDAOImpl.GET_USERNAME_LIST,

       query 
= "查询 username as userid from signon",

         resultClass 
= String.class,

          hints 
= {

                 @QueryHint(name 
= "cache.partition", value = "account"),

                 @QueryHint(name 
= "jdbc.compatible", value = "newDB")

                  }

)

 

5、常量注入

@Constant注解来来注入常量。

比如:

而在 ExampleComponent 有以下Field

@Constant(value=”$APPLICATION_NAME 3.0”)

private String appName;

gobal.propertiesAPPLICATION_NAME的定义:

APPLICATION_NAME = JFOX Example Application

 

6JFoxMVC

MVC,这里例举一个简单的应用示例:

@ActionMethod(name="signon", successView = "index.vhtml", errorView = "signon.vhtml", invocationClass = SignonInvocation.class, httpMethod = ActionMethod.HttpMethod.POST)

     
public void doPostSignon(InvocationContext invocationContext) throws Exception {

          SignonInvocation invocation 
= (SignonInvocation)invocationContext.getInvocation();

 

Account account 
= (Account)loginService.login(invocationContext.getSessionContext(), this, invocation.getUsername(),invocation.getPassword());

         
if (account == null) {

              String msg 
= "Invalid username or password. Signon failed";

             PageContext pageContext 
= invocationContext.getPageContext();

             pageContext.setAttribute(
"errorMessage", msg);

             
throw new Exception(msg);

         }

        
else {

             SessionContext sessionContext 
= invocationContext.getSessionContext();

             sessionContext.setAttribute(ACCOUNT_SESSION_KEY, account);

         }

     }


三次升级

升级是全方位的,从1.02.03.0,每一次升级你都会看到JFoxHuihoo的进步,并给我们带来一些新的东西。如果JFox1.0开始是摸索、模仿别人,准备制造轮子的话,那么2.0可以说是制造出了一个还算漂亮的轮子。对于3.0来说,已经不是简简单单的造轮子了,终于达到了能够驾驭JavaEE,并用自己的代码表达自己的想法的境界。因此,JFox的第三次升级可以说是有了很多创新,虽然这些创新还没有得到业内的广泛接受,但有了创新,总算是好事,没准下一次升级我们看到不是创新,而是超越呢。

JFox1.02.0这些已经历史性的东西这里就不说太多,这里例举一些JFox3.0中的特性及用法,让大家也看看JFox的独特之处。

杨泳在接受InfoQ采访时说的:“JFox主要的特点,它可以包括三个部分,一个是轻量,另外一个就是实用,最后一个就是差异化。”

按照杨泳的介绍:所谓比JBoss还轻的轻量是指JFox的内嵌容器。相对于JBoss来说,JFox通过这种内嵌EJB容器的方式,把整个JFox的容器包括它的内核,它的容器,它的各种服务,变成了一个WEBWar包进行部署。使得开发人员在开发EJB应用的时候,和传统的开发Servlet,开发JSP这种WEB应用,不会有太大的差别。所谓实用主要是指JFox集成了一些轻量的应用框架(如Velocity)提供了一些实用的功能,如JFox内置MVC框架,这些功能能与JFox内核服务、容器的集成。所谓差异化是指提供了一些其它JavaEE应用服务器所没有的东西,比如提供了一个MVC框架供开发Web应用,JPA的容器是在iBatis的基础上,通过SQL Template来进行设计的。

除了技术上的升级及创新以外,一个更重要的是文档质量的升级。JFox以前的文档都不完善,可以说是非常少,加上国人应用心得也比较少,使得对JFox应用推广非常不利的。然而,每一次JFox的升级,你都会看到文档从数量及质量都不断升级,从1.0时的一小段介绍文档到2.0的几页说明文档到3.0的几十上百页用户指南,每一次升级都能看到非常明显的进步。

JFox的代码质量比较高,基于接口编程、通用的命名规范,中文代码注释。所有这些都非常适合中国的java程序员学习及研究。


一些不足

用了一周的时间对JFox3进行了研究,这里要提出一些认为存在不足的地方。这也算是对JFox的发展所做的一点小小贡献吧。当然,由于本人水平有限,所以有一些见解有可能不对。

1JNDI不能远程调用

如果是开发Web应用,如果要用到EJB,而又不能支持分布式,我们又为何还选择EJBSpringJdonGuice甚至EasyJWeb这些框架里面都有包含了IOC容器。而且更加POJO,为何还要选择用EJBJFox呢?因此,这一方面我不知道这样的设计及限制是对JNDI的创新,还是因为JFox设计的局限性所导致。

2JPA的支持

可以说JFox只是实现了JPA1.0中的一小部分。JPA最核心的是什么?对象及关系映射,而难度最大的环节面向对象的查询(EJBQL)以及各种对象关系及表关联的处理,比如OneToManyManyToMany。由于JFox是基于iBatis这样一个sql mapping的框架实现的JPA容器,所以说功能上受到了一定限制。是直接写面向数据库的sql好还是直接写面向对象的查询好,这是一个问题。另外像hibernate这样的JPA实现,他的优化能力也是非常强的,JPA标准里面也提供了对原生sql的支持,所以性能不应该成为SQL就比EJBQL好的理由。最关键的是,既然我们是一个按照JavaEE规范开发的应用服务器,就要尽量遵循JavaEE的规范。

3JFox中的MVC

JFox中有一个不一样的MVC框架,这对于其它应用服务器来说创新,也就是杨泳所说的差异化。但对于企业应用来说,JavaEE应该更推的是JSF,而且JFox中的MVCJFox 本身存在比较严重的耦合,使用起来并不是非常方便,还有很多地方需要完善。最近看了国内的operamaskseasyjweb两个开源MVC框架,我觉得JFoxMVC部分可以跟这两个框架进行整合,通过operamasks增加JFoxJSF的支持,使用easyjweb替换现有的mvc框架或者借用其中的一些设计来改进现有的MVC。把MVC中的验证框架、异常处理、多国语言处理等进一步完善,减少Action对框架的依赖,这样实用性才会更强。

4、文档及示例

文档在JFox3.0已经完善得多了,但更应该增加一些其它示例,要能充分体现出JFox的优势,仅仅靠一个petstore是不够的。

5、其它

除了前面提到的以外,JFox中还有很多东西,比如用来做任务管理的TimerService,数据访问DAOSupport,安全相关的Sercurityt等等。但相对于Spring容器中提供的同样实现,这些功能都还有待加强。

两点遗憾

如何活得更好

huihoo成立到现在已经有近7年了,7年可以发生很多事情,有人转行了不当程序员了、有人结婚了、有人生子了、有人又离婚了,一个公司要活上7年是非常不容易的,一个在中国做开源的团队能做了7年的开源仍然活着更加不容易。然而,仅仅有活着的勇气及意志还不够,还需要活得更好才行,huihoo发展到现在,存活的项目基本上只有JFox,而且代码尽然基本上全部一人之手,这其实算是一个遗憾,为何没有更多的人参与到其中来,毕竟一个人的能力是非常有限,这一点非常值得我们反思。

应用不广泛

在陈勇等核心人员的努力下,Huihoo的推广做得很不错,国内的很多业内的大腕都知道huihoo,如果你关注开源方面的java应用服务器,也会发现JFox得到很多国外同行的认可及推荐。但为什么JFox在市场上的应用仍然是只闻有雷声,不见雨点呢?不知道国内有多少公司使用JFox,也不知道国内有多少JavaEE程序员的机器上安装得有JFox。感觉是很少的,至少我没见到几个。这也是一个非常遗憾的。


更多期待

在新年钟声敲响前许愿的时候,我许了三个愿望。一个许给家人,希望孩子及老婆建康,希望我能带给他们更多快乐;另外一个许给自己,希望自己今年能赚更多的钱,尽早把欠银行的最后20万早日还清;最后一个算是给祖国吧,希望在2008年中国除了在奥运上拿更多的金牌以外,更希望看到开源领域里的斗士们能带给我们更多的惊喜。

huihoo如今已经是进入了第8个年头,受N座大山压迫的中国人民用了8个年头取得抗日战争的胜利,也期待经历8年奋战后huihoo能取得更加辉煌的战绩。

版权声明:本文版权由Blogjava小雨开源所有,受法律保护。欢迎转载,转载请保留作者版权声明及连接。

posted on 2008-01-04 15:45 小雨开源 阅读(3245) 评论(15)  编辑  收藏

评论

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-04 16:31 cnodin

不错,楼主对国内的开源了解得挺多的。huihoo团队的确是一个值得尊敬的团队  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-04 19:46 RoBeRt

如果你有三年以上的J2EE开发经验,但不知道huihoo,那么你一定不是一个合格的J2EE程序员。

夜郎自大  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-04 19:51 wǒ愛伱--咾婆

呵呵.我有去过他们的网站.不过那时还不知道他们做嘛的  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-05 09:14 张氏兄弟

的确值得尊敬!
不过的确对于他们核心的项目居然是一个人写出来的表示遗憾。
其实中国很多的开源都是这样,老大一个人写。
一帮兄弟跟着混,老大垮了,队伍就散了。

也就是很多人都想从这个队伍中得到东西,但是没有想到怎么付出!  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-05 10:11 wiflish

支持开源。支持默默付出的你们  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-05 23:11 cssrain

从学java到现在工作也就不到1年多。  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-07 09:33 深爱开源的人

写的很好。写出了当前中国开源的一些困惑和步履维艰。如何能够让JFox走的更好更远,全靠杨泳一人之力是远远不够,需要我们大家,所有热爱开源的有志之士都能够参与到JFox中,坚持再坚持。
热情和毅力是JFox能走到现在的关键。但是我们仍要反思为什么JFox通过七年的发展还是处于目前这种状态。可能结合JBoss会给我们比较大的启发:
1. JBoss有一个全职的有热情的团队。
2. JBoss有一个基金或大的公司如Redhat的大力支持,使得这些热情能够转换成强大的生产力。
3. 有大量的国内外企业在使用它、支持它,使得它能够在风雨中勇往直前。
4. 有数以万计的用户在宣传它。典型的Java应用提供商招聘时通常问“使用过Jboss吗?”就是很好的佐证。

因此,使得国内开源特别是JFox走的更远的方式就是:
1. 大家要积极的使用。
2. 要宣传它。
3. 希望有实力的公司来支持它的发展。毕竟,人还是要生活的啊,呵呵。

这是我对开源和JFox的一些看法。。。。。。。  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-07 09:43 iOpenSource

国内的开源之所以还没有形成气候,与开源发展的整条生态链不完善有关系,所以还有很长的路要走啊,希望huihoo和jfox能够探索出来一条适合中国国情的发展之路,为他们默默加油吧。  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-07 11:03 敢于说真话的人

我支持HUIHOO,但也希望HUIHOO的JFOX有大的改进,而不是单纯为开源的理想而做一个自娱自乐的东西,开源的东西也要有社会价值和市场价值,希望HUIHOO眼光放长远点  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-07 11:12 敢于说真话的人

使用easyjweb替换现有的mvc框架或者借用其中的一些设计来改进现有的MVC,这个建议我看很好,HUIHOO与国内优秀WEB框架集成必然会为HUIHOO的普及和推广带来前所未有的进步  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-07 11:26 敢于说真话的人

当然一个开源项目做了这么多年还未走入大家的心中,那么它的团队是不是要去深入思考,深入反思一些东西,坚持是很好的精神,但多思考才能走向进步,才有出路  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队[未登录] 2008-01-07 15:00 屹砾

中国没有开源的商业环境,所以中国的开源就等于工程师在业余时间的业余作品,当然不能和欧美的开源相比。别人的开源是工作,而我们的开源是爱好。  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-01-12 19:33 草根网

好文,收藏至20ju.com  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-02-21 13:47 Anthony

了解Huihoo是从2004年在一个项目中要选型工作流软件开始的。当时Huihoo的工作流项目是Robin他们发起的JFox Flow,可惜后来没有搞下去。
遗憾,于是只好自己在项目里写了一个基于XML的能满足项目需要的简单工作流引擎。
  回复  更多评论   

# re: 第三只眼看huihoo-一个值得尊敬的团队 2008-05-23 21:47 xiaohuasuepr

学java一年,现在是大三,支持jfox  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: