Jdon框架使用开发指南

 

板桥里人(banq  J http://www.jdon.com)

1.3版本: 200510

 

 

JdonFramework下载地址:http://sourceforge.net/projects/jdon/

技术支持论坛:http://www.jdon.com/jive/forum.jsp?forum=61

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Jdon框架能解决什么问题?

搞过数据库系统的人都知道,数据库系统中大量的基本功能无非是数据表的增删改查和批量分页查询,Jdon框架以J2EE设计理念将这个看似简单功能开发过程抽象出来,放在框架中,并且随着应用程序一起运行,提供优化性能提升等。

当你只需要快速建立一个软件应用系统,Jdon框架正好适合你。

 

 


技术背景

Java EE/J2EE基本概念

J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VBC/S结构,发展到B/SBrowser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。

J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。

J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。

这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。

Web技术中除了Jsp/Servlet技术外,还需要JavaBeansJava Class实现一些功能或者包装携带数据,所以Web技术最初简称为Jsp/Servlet+JavaBeans系统。

谈到JavaBeans技术,就涉及到组件构件技术(component),这是Java的核心基础部分,很多软件设计概念(设计模式)都是通过JavaBeans实现的。

JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/Servlet)调用,那么JavaBeans就运行在J2EEWeb容器中;如果它被EJB调用,它就运行在EJB容器中。

EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。

J2EE集群原理: http://www.jdon.com/jive/article.jsp?forum=121&thread=22282

至此,JavaBeans组件发展到EJB后,并不是说以前的那种JavaBeans形式就消失了,这就自然形成了两种JavaBeans技术:EJBPOJOPOJO完全不同于EJB概念,指的是普通JavaBeans,而且这个JavaBeans不依附某种框架,或者干脆可以说:这个JavaBeans是你为这个应用程序单独开发创建的。

J2EE应用系统开发工具有很多:如JBuilderEclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeansJava class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能,最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。

J2EE容器分为WEB容器和EJB容器,Tomcat/ResinWeb容器;JBossEJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。

J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。

如果你的J2EE应用系统的数据库连接是通过JNDI获得,也就是说是从容器中获得,那么你的J2EE应用系统基本与数据库无关,如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置,那么你的J2EE应用系统就有数据库概念色彩,作为一个成熟需要推广的J2EE应用系统,不推荐和具体数据库耦合,当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。

高质量的Java企业系统

衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。

为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEBEJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。

因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;

EJB为什么能将服务层从Jsp/Servlet手中分离出来,因为它对JavaBeans编码有强制的约束,现在有一种对JavaBeans弱约束,使用Ioc模式实现的(当然EJB 3.0也采取这种方式),在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeans约束,形成一个服务层,这也是是Jive这样开源论坛设计原理之一。

由此,将服务层从表现层中分离出来目前有两种可选架构选择:管理普通JavaBeansPOJO)框架(SpringJdonFramework)以及管理EJBEJB框架,因为EJB不只是框架,还是标准,而标准可以扩展发展,所以,这两种区别将来是可能模糊,被纳入同一个标准了。

但是,通常标准制定是为某个目的服务的,总要牺牲一些换取另外一些,所以,这两种架构会长时间并存。

前面谈了服务层框架,使用服务层框架可以将JavaBeansJsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关,一般是通过标签库(taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。

这样,表现层和服务层的分离是通过两种框架达到目的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来是其目的,持久层框架有两种方向:直接自己编写JDBCSQL语句(如iBatis);使用O/R Mapping技术实现的HibernateJDO技术;当然还有EJB中的实体Bean技术。

持久层框架目前呈现百花齐放,各有优缺点的现状,所以正如表现层框架一样,目前没有一个框架被指定为标准框架,当然,表现层框架现在又出来了一个JSF,它代表的页面组件概念是一个新的发展方向,但是复杂的实现让人有些忘而却步。

最后,你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现,基本可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。

还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解,那么域建模提供了一种比较切实可行的正确理解业务需求的方法,相关详细知识可从UML角度结合理解。

当然,如果你想设计自己的行业框架,那么第一步从设计模式开始吧,因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会了系统基本单元JavaBeans或类之间解耦时,那么系统模块之间的解耦你就可能掌握,进而你就可以实现行业框架的提炼了,这又是另外一个发展方向了。

以上理念可以总结为一句话:

J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。

 

 

组件框架比较

 

 

EJB2/EJB3

Spring Framework

Jdon Framework

灵活性
(
松耦合)

EJB3EJB2更具灵活性,EJB3支持应用系统POJO

支持应用系统POJO,框架基础功能不能替换

支持应用系统POJO,框架本身可分离配置,定制性更强

功能完整性

全面,支持异步JMS 分布式事务

较为全面。有自己的表现层和持久层模板,可支持异步

基本完整,表现层借助Struts实现。有自己简单的持久层模板

单台性能

一般,批量查询等大数据量业务处理须小心,存在本地不透明缺陷。

一般,框架本身组件无性能提升极致,应用程序可配置cache/Pool

好,框架本身组件使用缓存提升性能,应用程序可配置cache/Pool,批量查询专门优化,适合实时性并发性要求较高应用

可伸缩性

可支持多台服务器分布式计算。

不支持,可依靠EJB实现

不支持,可依靠EJB实现

开发效率

学习曲线长,导致熟练掌握难。借助商业开发工具可加快熟练者的开发速度。

较为复杂,可挑选只适合自己的功能实现。当组件很多时,需要照顾这些组件之间调用关系。

简单快速,表现层编码很少。当组件个数很多时,无需照顾它们之间的调用关系

系统规模

EJB2适合大型系统;EJB3适合中大型系统

适合中小型系统

适合小中型系统,和EJB无缝结合,可借助EJB支持中大型系统

重量级别

重量,正在减肥

轻量偏重,有可能继续增肥

最轻量,恪守简单快速原则

详细文章见:http://www.jdon.com/artichect/java_ee_architecture.htm

 

Ioc框架

代码案例

假设有调用者B和被调用者A代码如下:

调用者B

 package test;

 public class B{   

          AInfterface a;

public B(AInfterface a){ 

this.a = a

     }

          public void invoke(){

                a.myMethod();

          }

 }

被调用者A类:

package test;

 public class A  implements AInfterface {

          public void myMethod(){

               System.out.println("hello");

          }

 }

生成B类实例代码如下:

B b = new B(new A());

创建B的实例要逐个照顾到B类中涉及到所有其他类(如A类)的实例化,给编程者带来代码编写的琐碎工作,无法提高效率。

使用Jdon框架的Ioc模式后,B类生成实例代码如下:

B b =  (B)  WebAppUtil.getService(“b”);

b. invoke();

无需首先照顾其他类如A类的实例生成。B的实例生成再也与其他类如A类没有任何关系了,实现松耦合。如果B类中涉及不只是A类,还有CDEF等类,那么生成B类实例时,我们就无需关心这些类的创建了。

实现上述调用效果,需另外进行一下jdonframework.xml配置如下:

<app>

   <services>

                    <pojoService name="b"  class="test.B"/>

                     <pojoService name="a"  class="test.A"/>

       </services>

   ……

</app>

革命性优点

两个革命性优点:

1. 颠覆对象使用之前必须创建的基本定律,正象无需关心对象销毁一样,您可以无需关心对象创建。

Java编程中类创建成实例的过程简化:(Class -> Instance

使用JdonIoc框架前:
编程者需要自己逐个解决这个Class相关涉及的其他Class的实例化。

使用JdonIoc框架后:

无需编程者自己实现这种级联式、琐碎的实例化过程。

2. 松耦合;更换各种子类方便。面向对象编程之父Grady Booch 说:对象最伟大之处在于其可被替代。而Jdon框架伟大之处是帮助你替代这些对象,甚至包括Jdon框架本身。

上例中,如果Ainterface有另外一个实现子类AA类,只要将jdonframework.xml中:

<pojoService name="a"  class="test.A"/>

更换为:

<pojoService name="a"  class="test.AA"/>

 


Jdon框架的特点?

Jdon框架是一个真正轻量级别的开发框架,设计简单巧妙,适合快速开发各种架构的J2EE应用系统。它是一套符合当前国际水平的、面向构件开发的、国人拥有自主产权的中间件产品。

面向对象编程之父Grady Booch 说:对象最伟大之处在于其可被替代。The great thing about objects is they can be replaced.

Jdon框架伟大之处是帮助你替代这些对象,甚至包括Jdon框架本身。另外一个优点是:颠覆对象使用之前必须创建的基本定律,正象无需关心对象销毁一样,您可以无需关心对象创建。

J2EE应用开发中的主要优点

Jdon框架给J2EE应用开发带来主要的好处是:

当你的项目刚开始时,它可能是一个小项目,实现一些简单功能,这时你可能只需要使用普通JavaBeansPOJO)实现数据库操作业务,这个POJO一般一次请求生成一个实例(使用new)。

当访问量逐渐增加,这种POJO每次请求生成和销毁都会耗费性能,你的J2EE应用系统可能出现性能降低缓慢等现象,这时我们就需要池(Pool)和缓存(Cache)来优化。

下面我们从J2EE应用系统运行原理开始简单分析:

如果在某个时刻有两个以上用户同时访问你的系统,也就是说同时发出请求(例如刷新页面),因为J2EE应用系统是运行在J2EE容器中(Tomcat JBoss),而J2EE容器(如Tomcat)等前端有线程池支持;後端有数据库连接池支持,这些虽然提升了你的系统性能,但是因为你的代码最重的POJO是每次请求创建,这实际是整个系统的性能瓶颈。

用对象池优化你的POJO 服务类;用缓存优化你的数据类。这就是使用Jdon框架带给你性能上的跳跃。

使用Jdon框架后,你的J2EE应用系统性能提升不少,但是访问量还是不断上升,尽管优化了其他该优化的:JVMJ2EE服务器;数据库等,系统性能还是碰到了天花板。

使用EJB的多服务器集群分布式计算特性吧,只要增加服务器就可以提升性能。

J2EE集群原理: http://www.jdon.com/jive/article.jsp?forum=121&thread=22282

这时,你可能用EJB将你的POJO封装起来,经过这样架构升级,如果你不使用Jdon框架,你的表现层(Struts)中原来调用POJO的代码需要修改,这是一个存在相当风险的大手术,你可能要全部重新测试;但是使用了Jdon框架,你做的只是在Jdonframework.xml配置中修改一下即可,整个系统代码无需更改。(其他框架升级到EJB时,需要你的EJB继承原来的接口,且需要EJB配置,不方便)

从你的项目一开始就使用Jdon框架,它带给了你方便的可伸缩的解决方案。也就是说:你的系统在规模很小时运行良好;在规模迅速扩张时,无需更改代码;带给你方便的架构更换。

Jdon框架帮助你实现架构设计的可伸缩性。

相比其他框架,Jdon框架实现了对POJO ServiceEJB之间无缝支持。

Jdon框架特点

Jdon框架是根据最新设计思想Ioc/AOP构建的一个源框架(Meta Framework),随着时间推移,它将不断增加入新的设计概念和功能(如MDA或工作流引擎等)。

Jdon框架给你的J2EE应用系统带来完整的高质量解决方案:

High-Availability(高可用性):在J2EE多层分离完全解耦的前提下,提供了数据增删改查(CRUD)快速开发方式,程序员需要编写的CRUD代码很少,表现层CRUD功能实现通常只需要配置就可以实现,No Code。如果持久层开放辅助以其他快速开发工具,可以迅速地提高J2EE开发速度。

Scalability(可伸缩性):使用本框架,可以开发出两种系统:真正轻量的Web应用系统或Web+EJB应用系统;无缝同时支持两种服务架构:EJB Session BeanPOJO ServiceWeb应用),在不改变代码的情况下,可以很方便地将一个Web系统升级到Web+EJB系统。

Performance(良好的性能):Jdon框架提供强大缓存功能,无需编程,在自己的系统中加入Jdon框架后,自动提升了每个应用系统的运行性能,特别是批量查询性能。对Model数据通过缓存拦截器提升性能;对POJO无态服务使用对象池拦截器;也实现了POJO的有态服务拦截器。

Transparency(透明性):框架配置修改维护方便,Jdon框架配置划分三种:基础配置组件、AOP相关配置和应用服务配置,将经常需要修改与应用相关的配置单独出来,可分别修改和拓展。

Extendable(扩展性)Jdon框架是可伸缩的、动态配置的,应用者可以将自己系统中的通用功能从具体系统中抽象出来,加入Jdon框架,从而逐步形成自己的行业专业开发框架。

Loose coupling(松耦合):使用Jdon框架可以完全解耦J2EE多层之间的耦合,从而实现应用系统稳定的健壮性、方便容易的可维护性。从而也使得J2EE表现层开发和业务层开发可以完全分离、各自独立同时进行,提高了开发效率。

 

Jdon框架区别于其他同类框架的独特特点:

Lightweight:真正轻量化,代码精简巧妙,是复杂庞大的Spring框架替代品。

Auto Injection:自适应的构造器注射,Jdon框架是基于PicoContainer为其微容器核心,PicoContainer主要是构造器注射,而且它拥有强大的自适应注射;其它类似框架则要在配置文件中逐个明确指定注射对象,配置烦琐。

EJB服务平滑方便支持,Jdon框架支持EJB服务就如同支持一般POJO服务一样,方便直接,无需EJB服务继承特定接口;而其它类似框架(如Spring)则需要所有EJB服务继承特定接口。

Jdon框架的AOP功能是可分解的,通过缓存优化了动态代理实现,提高了运行性能,Jdon框架AOP支持所有遵循继承Aopalliance(如Spring)的拦截器。

Jdon框架目前使用流行的Struts作为其主要表现层框架支持。

Jdon框架与J2EE架构

目前在J2EE架构设计中主要分两大流派:EJBPOJO(普通的Javabeans);以EJB为代表的流派主流架构是:Struts/JSF+EJB或者Struts/JSF+Session Bean+hibernate/JDO;以POJO为代表的轻量流派则是:Struts/JSF+Hibernate/JDO

Jdon框架对这两种流派都有良好方便的支持,也可以在同一个系统混合这两种架构,所以可以形成:Struts/JSF+Jdon_EJB或者Struts/JSF+Jdon+Hibernate/JDO等架构。

随着新技术诞生,目前它们组件形式无非是EJBPOJO两种,因此Jdon框架可适应这些未来的新技术实现。

适合哪些人

Jdon框架主要是面向J2EE程序员,对于程序员要求并不很高,只要具备以下技术背景之一就可以尝试学习使用Jdon框架:

拥有Jsp/Servlet JavaBeans J2EEWeb编程经验的程序员

最好有一些Struts感性认识和少量编程经验。

 


Jdon框架安装说明

 

Jdon框架源码包中的dist目录下,有下列几个包:

jdonFramework.jar

Jdon框架核心包

必须需要

aopalliance.jar

AOPAlliance

必须需要

jdom.jar

读取XMLJDOM

必须需要

picocontainer-1.1.jar

Picocontainer

必须需要

commons-pool-1.2.jar

Apache对象池包

必须需要

log4j.jar

Log4j 调试记录跟踪包

可选

log4j.properties

Log4j配置文件

可选

struts.jar …

struts驱动包,支持struts1.2

可选

          

JBoss中安装

安装步骤:

1. 确保已经安装J2SE 1.4 以上版本,然后设置操作系统的环境变量 JAVA_HOME=你的J2SE目录

2. 下载JBoss 3.X/JBoss 4.x

3. 安装Jdon框架驱动包:将Jdon框架源码包中的dist目录下除log4j.jarlog4j.properties以外的包拷贝到jboss/server/default/lib目录下。

4. 安装struts驱动包,下载struts 1.2,将jar包拷贝到jboss/server/default/lib

或者使用Jdon框架例程samplesSimpleJdonFrameworkTest项目的lib目录。将该目录下jar包拷贝到jboss/server/default/lib

 

对于具体J2EE应用系统,需要配置Jboss的数据库连接池JNDI

1.配置JBoss的数据库连接:

  将数据库驱动包如MYSQLmysql-connector-java-3.0.14-production-bin.jarOracleclass12.jar拷贝到jboss/server/default/lib

2. 选择JBoss的数据库JNDI定义文件:

jbossdocs目录下寻找你的数据库的配置文件,如果是MySQL,则是mysql-ds.xml;如果是Oracle;则是oracle-ds.xml。下面以MySQL为例子。

mysql-ds.xml拷贝到jboss/server/default/deploy目录下。

3. 修改配置数据库定义文件:

打开jboss/server/default/deploy/mysql-ds.xml,如下:

 <datasources>

  <local-tx-datasource>

    <jndi-name>DefaultDS</jndi-name> <!--  应用程序中使用java:/DefaultDS调用 -->

  <connection-url>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8

</connection-url>

    <driver-class>com.mysql.jdbc.Driver</driver-class>

    <user-name>root</user-name><!--  MySQL数据库访问用户和密码,缺省是root  -->

    <password></password>

  </local-tx-datasource>

  </datasources>

 4.启动JBoss

打开jboss/server/default/log/server.log 如果没有错误,一切OK,一般可能是数据库连接错误,检查mysql-ds.xml配置,查取相关资料,弄懂每行意义。

至此,可以将基于Jdon框架开发的J2EE应用程序部署到JBoss中。

一般是将*.ear*.war拷贝到jboss/server/default/deploy目录下即可。

在其他商业服务器中安装

只要将Jdon框架包和struts 1.2包安装到服务器的库目录下即可,或者配置在系统的classpath中即可。如果你的服务器没有log4j包,那么还需要log4j.jar,并将log4j.properties放置在系统classpath中。

Tomcat中安装

Jdon框架在Tomcat下安装主要问题是log4j问题,下面是安装步骤:

struts驱动包和Jdon框架包(包括log4j.jar)拷贝到tomcat/ common/lib目录下。

Jdon框架源码包dist目录下的log4j. properties拷贝到tomcat/common/classes目录。

配置Tomcat中运行log4j的关键是:检查commons-logging.jar log4j.jar 文件在common/lib 目录,struts驱动包中已经包含commons-logging.jar包。

上面步骤都正常了,可以启动Tomcat,但是你会发现tomcat/logs下没有输出记录,因为我们已经使用新的log4j,所以为了使得tomcat运行信息输出文件便于调试,编辑/common/classeslog4j. properties

#log4j.appender.R.File=D:/javaserver/jakarta-tomcat-5.0.28/logs/tomcat.log一行前面的#删除,文件目录是绝对路径,更改为你自己的目录和文件。

同时将log4j.rootLogger=INFO, A1一行前面加#注释。
重新启动Tomcat,这时可以从tomcat.log看到输出记录。

5.  配置Jdon框架运行过程输出,在log4j. properties中下面一行:

log4j.logger.com.jdon=DEBUG

该配置将会显示Jdon框架的主要运行信息,如果你要关闭,只要更改如下:

log4j.logger.com.jdon=ERROR

如何判断安装启动成功

当启动Jdon框架任何一个应用程序,后台日志出现:

<========  Jdon Framework started successfully! =========>

表示你的系统配置和启动Jdon框架成功。


基本概念和配置篇

本章节讲述Jdon框架的基本配置和一些基本设计,是使用Jdon框架之前需要了解的章节,通过这些基本概念说明,可以让程序员对Jdon框架有一个大体概念上的轮廓。

本章节对于初学者不是必读,其中很多用法可在后面案例中学习,因此,本章节也可以直接跳过去,进入下一个章节阅读。

可彻底分离的组件管理

Jdon框架可以实现几乎所有组件可配置、可分离的管理,这主要得益于Ioc模式的实现,Jdon框可以说是一个组件(JavaBeans)管理的微容器。

Jdon框架中,有三种性质的组件(JavaBeans):框架基础组件;AOP拦截器组件和应用服务组件。三种性质的组件都是通过配置文件实现可配置、可管理的,框架应用者替换这三种性质组件的任何一个。

 

 

框架基础组件是Jdon框架最基本的组件,是实现框架基本功能的组件,如果框架应用者对Jdon框架提供的功能不满意或有意替换,可以编写自己的基础功能组件替代,从而实现框架的可彻底分离或管理。Jdon框架功能开发基本思路是:当有新的功能加入Jdon框架时,总是让该功能组件实现可配置和可更换,以使得该功能代表的一类一系列其他功能有加入拓展的余地。

应用服务组件是框架应用者针对具体项目设计的组件,如用户管理AccountService、订单服务OrderService等都属于应用服务组件。

AOP拦截器组件主要是指一些应用相关的通用基础功能组件,如缓存组件、对象池组件等。相当于应用服务组件前的过滤器(Filter),在客户端访问应用服务组件之前,必须首先访问的组件功能。

这三种性质组件基本函括了应用系统开发大部分组件,应用服务组件是应用系统相关组件,基本和数据库实现相关,明显特征是一个DAO类;当应用服务组件比较复杂时,我们就可以从中重整Refactoring出一些通用功能,这些功能可以上升为框架基础组件,也可以抽象为AOP拦截器组件,主要取决于它们运行时和应用服务组件的关系。当然这三种性质框架组件之间可以相互引用(以构造方法参数形式),因为它们注册在同一个微容器中。

使用Jdon框架,为应用系统开发者提炼行业框架提供了方便,框架应用者可以在Jdon框架基本功能基础上,添加很多自己行业特征的组件,从而实现了框架再生产,提高应用系统的开发效率。

Jdon框架应用第一步

JdonFramework中,所有组件都是在配置文件中配置的,框架的组件是在container.xmlaspect.xml中配置,应用系统组件是在jdonframework.xml中配置,应用系统组件和框架内部或外部相关组件都是在应用系统启动时自动装载入J2EE应用服务器中,它们可以相互引用(以构造器参数引用,只要自己编写的普通JavaBeans属于构造器注射类型的类就可以),好似是配置在一个配置文件中一样。

因此,组件配置主要有三个配置文件:应用服务组件配置container.xmlAOP拦截器组件aspect.xml和应用服务组件配置jdonframework.xml

 

 

初次使用Jdon框架时,需要在应用系统中指定自己定义的配置文件,分两步:

1. 定义自己的jdonframework.xml配置文件,这是必须的步骤。

目前Jdon框架中整合了Struts前台表现层技术,因此可以通过StrutsPlugin实现jdonframework.xml启动,这样做的好处,可以实现Struts多模块开发,一个Struts项目中可能有多个功能模块,每个功能模块涉及从页面表现(struts配置和tiles配置)、模型设计以及后台持久化等横向一系列组件,Jdon框架通过Plugin启动jdonframework.xml可以支持这种多模块开发方式。

Jdon框架已经提供一个Plugin缺省实现子类:com.jdon.strutsutil. InitPlugIn,你可以根据自己要求实现自己的Plugin实现子类。在struts-config.xml(或其它struts模块配置文件如struts-config-admin.xml等等)中配置Plugin实现子类:

<plug-in className="com.jdon.strutsutil.InitPlugIn">

    <set-property property="modelmapping-config" value="news.jdonframework.xml" />

</plug-in>

InitPlugIn主要实现从struts-config.xml中读取modelmapping-config的值,modelmapping-config的值是你自己定义的jdonframework应用配置文件,文件名不一定是jdonframework.xml,可以任意指定,例如news.jdonframework.xml表示jdonframework.xml在包名news下, com.jdon.app.myframework.xml表示myframework.xml在包名com.jdon.app下。

2. Jdon框架启动时将使用jdonframework.jarMETA-INF目录下缺省的container.xmlaspect.xml。如果你需要拓展Jdon框架,如自己开发了一些小零碎组件,如计算公式、报表组件等或者行业软件的一些通用功能,这些组件可能需要启动时就载入,或者希望它们实现可配置可替换,那么就将它们整合入Jdon框架中,有两种加入自己配置的方式(该步骤不是必需的):

第一.定义自己的组件配置文件和拦截器组件配置,文件名必须为mycontainer.xmlmyaspect.xml,这两个文件必须放置在系统的classpath路径中,或者必须在你自己的jar包,这个jar包可以和Jdon框架jar包一起部署。

第二.可以在应用系统的web.xml中定义,可以在web.xml中加入自己定义这两种配置:

<context-param>

<param-name>containerConfigure</param-name>

<param-value>/WEB-INF/mycontainer.xml</param-value>

<param-name>aspectConfigure</param-name>

<param-value>/WEB-INF/myaspect.xml</param-value>

</context-param>

<listener>

     <listener-class>com.jdon.container.startup.ServletContainerListener</listener-class>

</listener>

 那么你的mycontainer.xmlmyaspect.xml必须放置在Web项目的WEB-INF目录下,当然这两个文件名可以自己任意取名。

用户自己定义的配置文件中可以覆盖缺省的container.xmlaspect.xml相应的配置。只要取相同的name值就可以。

应用服务组件配置

jdonframework.xml是应用服务组件配置文件,文件名可自己自由定义,jdonframework.xml中主要是定义Model(模型)和Service(服务)两大要素。

jdonframework.xml最新定义由http://www.jdon.com/jdonframework.dtd规定。

<models>段落是定义应用系统的建模,一个应用系统有哪些详细具体的模型,可由Domain Model分析设计而来。<models>中的详细配置说明可见 数据模型增、删、改、查章节。

<services>段落是定义服务组件的配置,目前有两种主要服务组件配置:EJBPOJO

EJB服务组件配置如下:

<ejbService name="newsManager">

      <jndi name="NewsManager" />

      <ejbLocalObject class="news.ejb.NewsManagerLocal"/>

</ejbService>

每个ejbService组件有一个全局唯一的名字,如newsManager,有两个必须子定义:该EJBJNDI名称和其Localremote接口类。

POJO服务组件配置如下:

<pojoService name="userJdbcDao" class="news.container.UserJdbcDao">

       <constructor value="java:/NewsDS"/>

</pojoService>

POJO服务也必须有一个全局唯一名称,如userJdbcDao,以及它的class类定义。如果该POJO构造器有字符串变量,可在这里定义其变量的值,目前Jdon框架只支持构造器字符串变量注射。

如果该POJO服务需要引用其它服务,例如UserPrincipalImp类的构造器如下:

public UserPrincipalImp(UserDao userDao){

    this.userDao = userDao;

}  ……

UserPrincipalImp构造器需要引用UserDao子类实现,只需在jdonframework.xml中同时配置这两个服务组件即可,Jdon框架会自动配置它们之间的关系:

<pojoService name="userJdbcDao" class="news.container.UserJdbcDao">

       <constructor value="java:/NewsDS"/>

</pojoService>

<pojoService name="userPrincipal" class="news.container.UserPrincipalImp"/>

上面配置中news.container.UserJdbcDao是接口UserDao的子类实现,这样,直接通过userPrincipal这个名称可获得UserPrincipalImp的实例。

基础组件配置说明

container.xmlJdon框架基础组件配置文件,container.xml中包含的组件将由Jdon框架在启动时向微容器(PicoContainer)中注册,至于这些组件之间的依赖关系由微容器解决,称为Ioc模式。

container.xml内容主要由每行配置组成,每行格式如下:

<component name="组件名称" class="POJO类名称" />

<component name="modelHandler" class="com.jdon.model.handler.XmlModelHandler" />

代表组件com.jdon.model.handler.XmlModelHandler,其名称为modelHandler,如果需要在程序中调用XmlModelHandle实例,只需要以modelHandler为名称从微容器中获取即可。

组件配置也可以带有参数,例如下行:

   <component name="cache" class="com.jdon.controller.cache.LRUCache" >

      <constructor value="cache.xml"/>

   </component>

LRUCache的类代码如下:

public class LRUCache implements Cache {

  public LRUCache(String configFileName) {

   PropsUtil propsUtil = new PropsUtil(configFileName);

    cache = new UtilCache(propsUtil);   

  }

    ……..

}

这样LRUCache 中的configFileName值就是cache.xml,在cache.xml中定义了有关缓存的一些设置参数。目前Jdon框架只支持构造器是纯字符串型,可多个字符串变量,但不能字类型和其它类型混淆在一起作为一个构造器的构造参数。如果需要多个类型作为构造参数,可新建一个包含字符串配置的类,这个类就可和其它类型一起作为一个构造器的构造参数了。

一般在container.xml中的组件是框架基本功能的类,不涉及到具体应用系统。

拦截器组件配置说明

本篇为高级应用,初学者可以后再深入研究。

aspect.xml是关于拦截器组件配置,有两个方面:advice(拦截器Interceptor)和pointcut(切入点)两个方面配置,有关AOP的基本概念可见:http://www.jdon.com/AOPdesign/aspectJ.htm

Jdon AOP的设计目前功能比较简单,不包括标准AOP中的MixinIntroduction等功能;Pointcut不是针对每个class和方法,而是针对一组class(如POJO组或EJB组),拦截粒度最粗,与许多复杂完整