首    页 建模架构 设计模式 培训咨询 jdon框架 论坛

上一级 首页 下一级


POJO应用篇

本章节主要讲述如何在应用系统中应用Jdon框架,技术架构主要是基于J2EEWeb结构,使用普通JavaBeans实现服务功能情况下的Jdon框架使用,POJO应用架构适合Struts+Jdon+Hibernate等架构。

组件实例和服务实例

Jdon框架中, POJO实例分为两种性质:组件实例和服务实例。

组件实例是指那些注册在容器中的普通Javabeans,它们是单例的,也就是你每次获得的组件实例都是同一个实例,也就是说是单态的。

组件POJO获得方法是通过WebAppUtilgetComponentInstance方法,例如在container.xml中有如下组件定义:

<component name="modelManager" class="com.jdon.model.ModelManagerImp" />

在程序中如果要获得ModelManagerImp组件实例的方法是:

ModelManager modelManager =

(ModelManager)WebAppUtil.getComponentInstance(“modelManager”, sc);

组件实例获得的原理实际是直接在微容器中寻找以前注册过的那些POJO,相当于直接从XML配置中直接读取组件实例配置。

服务实例是指在jdonframework.xml中定义的ejbServicepojoService,当然它们也可以组件实例方式获得,但是如果以组件实例方式获得,AOP功能将失效;而以服务实例方式获得的话,在aspect.xml中定义的拦截器功能将激活。

EJB服务一定是通过服务实例方式获得,只有普通JavaBeansPOJO)才可能有这两种方式。

因此,除非特殊需要,一般推荐在应用系统中,通过获得服务实例方式来获得jdonframework.xml中定义的服务实例。

如在jdonframework.xml中有如下服务组件定:

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

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

</pojoService>

获得服务实例的方法代码如下:

UserDao ud = (UserDao)WebAppUtil.getService(“userJdbcDao”, request);

UserDaoUserJdbcDao的接口。注意,这里必须getService结果必须下塑为接口类型,不能是抽象类或普通类,这也是与getComponentInstance不同所在。

如果你在aspect.xmlpojoServices都配置以对象池Pool拦截器,那么上面代码将是从对象池中获取一个已经事先生成的实例。

如何获得一个POJO实例?

在上面章节说明了服务实例和组件实例的区别,在jdonframework.xml中配置POJO既可以组件实例获得,也可以服务实例获得。

首先,我们需要在jdonframework.xml中定义自己的POJO服务,例如在jdonframework.xml有如下一行定义:

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

那么在应用程序中需要访问UserJdbcDao 实例有以下两种方式:

第一. 通过WebAppUtil工具类的getService方法获得服务实例,如:

 

UserDao ud = (UserDao)WebAppUtil.getService(“userJdbcDao”, request);

 

getService方法每次返回的一个新的服务实例对象,相当于new一对象。如果对象池拦截器被配置,那么这里返回的就是从对象池中借用的一个对象。

 

第二. 通过WebAppUtil工具类的getComponentInstance方法获得组件实例,这也是获得UserJdbcDao一个实例,与服务实例不同的是,每次获得组件实例是同一个对象,因此,如果这个服务中如果包含上次访问的状态或数据,下次访问必须使用到这些状态和数据,那么就必须使用getComponentInstance方法获得服务实例。

注意,以上方式是假定你获得一个POJO实例,是为了使用它,也就是说,是为了访问它的方法,如访问userJdbcDaogetName方法,就要使用上述方式。

如果你不是为了使用它,而是作为别的POJO服务的输入参数,如构造器的输入参数,那么完全不必通过上述方式,你只要直接使用上述方式获得那个POJO服务的实例就可以,因为容器自动完成它们的匹配。

还有一点要求注意的是:使用getService获得服务实例,必须该服务类有一个接口,这样才能将getService downcasting下塑为其接口,否则只能是一个普通Object,你获得后无法使用它。当然getComponentInstance没有这样限制。

如何编写一个POJO 类?

既然在Jdon框架中获得POJO服务这么方便,那么POJO服务类的编写是否有特殊规定,回答是没有,就是一个普通的Java类,当然如果你需要在这个类引用其他类,最好将其他类作为构造器参数,如A类中引用B类,A类的写法如下:

class A {

    private B b;

    public A(B b){

        this.b = b;

}

    ….

}

这样,在jdonframework.xml中配置如下两行:

<pojoService name=" a" class="A">

<pojoService name=" b" class="B">

当然,你也可以使用下面一种方式:

 class A {

    private B b  = new B();

    ….

}

这样就无需配置jdonframework.xml,但是这样做的缺点是不够灵活,万一B类改名或更改后就需要修改A类代码,带来强烈的耦合性,这也是为什么使用Ioc模式的原因。

如果你希望你的POJO服务能够以对象池形式被访问,那么你的类需要implements com.jdon.controller.pool.Poolable

如何获得一个POJO服务的运行结果

在应用系统中,我们不但可以通过上面方式获得一个POJO实例,然后在通过代码调用其方法,获得其运行结果,例如写入代码:

userJdbcDao.getName();

可以获得getName方法的运行结果。

除此之外,Jdon框架还可以直接获得POJO服务的运行结果,只要你告诉它POJO类名、需要调用的方法名和相关方法参数类型和值,借用Java Method Relection机制,Jdon框架可以直接获得运行结果。

实现这个功能,只要和接口com.jdon.controller.service.Service打交道即可:

public interface Service {

   

    public Object execute(String name,

                                  MethodMetaArgs methodMetaArgs,

                                  HttpServletRequest request)  throws Exception;

   

   

    public Object execute(TargetMetaDef targetMetaDef,

                          MethodMetaArgs methodMetaArgs,

                          HttpServletRequest request)  throws Exception;

 

 

}

Service提供了两种获得某个POJO服务运行结果的方法。一个是以Jdonframework.xml中配置的POJO服务名称为主要参数,这是经常使用的一个情况。

MethodMetaArgs是包含调用的方法名、方法参数类型和方法参数值。

这种调用方式适合于POJO服务配置式调用,也就是说,通过编写自己的XML配置文件也可以实现如同写代码一样的服务调用和运行。



上一级 首页 下一级


更多Jdon框架专题讨论

JdonFramework作为一个免费开源软件开发平台,可以商用开发大多数数据库应用软件和管理软件: 电子商务软件 在线教育软件 税务软件 Web快速开发软件 财务软件 购物车软件 医院帐务软件 crm software medical software 人事薪资软件payroll software 在线购物软件 销售软件 项目管理软件 房产不动产管理软件 生产软件 PDM软件 制造业软件 仓库软件 采购软件 进销存软件 危险源监控软件 物流软件 超市软件 银行软件 保险软件 汽车软件 医疗软件 电子软件 自动化软件 服装软件 烟草软件 分销管理软件 供应商管理软件

下载源码

框架文档

框架应用系统

演示运行

JiveJdon3

性能测试

Q&A 问答

技术支持

 

 

更多标签...



Jdon框架演示

JiveJdon
源码下载

VIP收费区

历史热点讨论排行榜




google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘





手机 add to google add to yahoo
联系我们 | 关于我们 | 广告联系 | 网站地图 | 设为首页

沪ICP证08026060 如有意见请与我们联系 Powered by JdonFramework
_×
您有新消息