JdonFramework 6.0发布

09-07-17 banq
使用Jdon框架6.0开发应用将变得异常简单,甚至无需XML配置文件,只需要两步:

第一步:将存在依赖关联关系的两个类用@Service或@Component(两者性质一致)标注:

@Service("helloService")

public class HelloServiceImpl implements HelloService

..

@Component

public class UserRepositoryInMEM implements UserRepository {

第二步:客户端调用代码:

HelloService helloService = (HelloService) WebAppUtil.getService("helloService", req);

String result = helloService.hello(myname);

无需jdonframework.xml配置文件和相关XML配置。DI依赖注射原理图见下:

全部演示代码见JdonFramework源码包目录下examples/testWeb

至此,Jdon框架业务层应用基本全部实现Annotation注解,Annotation做到少而精:

@Poolable 表示当前类的实例是从对象池中获得。

@Stateful 表示当前类的实例是与用户状态相关的。

@Singleton 表示当前类的实例是单例。

如果没有以上注解,缺省当前类的实例相当于new,每次请求一次。

以上几种类的创建模式在性能上,对于代码小的类差别都不大,已经经过测试。响应在70毫秒左右。

@Model 是用来对领域模型进行注解。

下载页面:

http://www.jdon.com/jdonframework/download.html

[该贴被admin于2009-07-20 17:41修改过]


2
banq
2009-07-20 16:49

jdonframework 6.0具体变动如下

(一)增加Annotation注射功能, @Service或@Component替代了原来XML配置:

<pojoService name="给自己类取的名称" class="完整类的名称"/>

或者在具体类代码上加入:@Service("给自己类取的名称")

<component name="给自己类取的名称" class="完整类的名称"/>

或者在具体类代码上加入@Component("给自己类取的名称")

Service和Component都表示组件构建概念,可以是一个类,也可以是一个类为主的多个类,如果这个组件供客户端调用,那么就称为服务。两者在Jdon框架中没有区别,只是使用时称呼不同而已。

@Component(“给自己类取的名称”)也可以简化为@Component,这样,Component的名称就是该类的完整类名称(getClass,getName());

@Service则不可以这样,因为是供Jdon框架容器以外的外部客户端调用的,一定要取一个名称。

因为需要被客户端调用,那么就要指定服务的名称,所以,@Service与@Component的区别就是,@Service必须规定一个名称@Service("给自己类取的名称");而@Component则没有name属性,缺省是类名称getClass().getName()名称,如果客户端有时需要临时直接调用@Component标注的组件,也可以按类名称调用。

(二).增加@Singleton Annotation,缺省客户端调用getService时,每次请求获得一个新的Service实例,也可以使用@Poolable对象池来对代码比较大的Service类进行性能提高,现在又提供了另外一种方法,使用单例@Singleton。

单例和对象池区别主要是:对象池可以进行实例最多个数控制,这样,能够保护服务器不会被尖峰冲击造成资源耗尽。

在Service服务代码比较简单小的情况下,Service实例三个创建方式:单例、对象池以及每次请求生成一个新实例,在性能上几乎没有太大差别,已经使用框架源码包中examples目录下的testWeb经过测试了。

(三).没有将有关Action的配置转为Annotation,原来的配置如下继续保留:

<model key="username"

class="com.jdon.jivejdon.model.Account">

<actionForm name="accountForm"/>

<handler>

<service ref="accountService">

<initMethod name="initAccount"/>

<getMethod name="getAccountByName"/>

<createMethod name="createAccount"/>

<updateMethod name="updateAccount"/>

<deleteMethod name="deleteAccount"/>

</service>

</handler>

</model>

因为这个配置是有关MVC表现层,而表现层不是Jdon框架的核心,所以,Jdon框架核心是业务层,对Domain Model和Service服务组件进行管理,所以,不能在业务层耦合具体表现层。上述配置可以认为是表现层和业务层的桥连接配置。

banq
2009-07-21 16:58
相关帖子:

Spring的复杂性

http://www.jdon.com/jivejdon/thread/36618.html

colingo
2009-07-21 21:15
恭喜Jdon6.0发布!!!

banq
2009-07-22 11:24
关于Component和Service定义:

这个定义是从业务领域来定义的。

无论是Evans DDD、NGOSS或者SOA,他们相同定义是:

组件(构件) Component:

1.功能的实现。

2.供第三方使用组合的入口

3.可管理的单元

服务Service:

组件的集合

无论组件和服务,都不是真正将业务功能在自身实现,而是委托,委托给谁?委托给Domain Model领域模型,用NGOSS术语:就是委托给合约Contract,而Contract是用于规定相互调用实体之间信息和功能是如何交互的。

所以,别以为Jdon框架是在屋子里闷头做出来的个人作品(home-grown),而是综合很多业务设计理念Evans DDD NGOSS和SOA基础的。(大白话:当然比纯SOA更厉害了)

SCA更多是一个市场产物:SCA容器没有IOC containers更加直接了当

http://www.jdon.com/jivejdon/thread/36650.html

[该贴被admin于2009-07-29 11:56修改过]

oojdon
2009-07-22 16:32
这个Component怎么跑起来?

@Component
public class InFilterManager {	
	private Collection inFilters;

	public InFilterManager(String[] inFilterClassNames) {
		initFilters(inFilterClassNames);
	}

	private void initFilters(String[] filters) {
		try {
			inFilters = new ArrayList();
			for (int i = 0; i < filters.length; i++) {
				String className = filters[i];
				inFilters.add((MessageRendering) Class.forName(className).newInstance());
			}
		} catch (InstantiationException e) {
			throw new ForumException(e);
		} catch (IllegalAccessException e) {
			throw new ForumException(e);
		} catch (ClassNotFoundException e) {
			throw new ForumException(e);
		}

	}
}
<p>

[该贴被oojdon于2009-07-22 16:33修改过]

banq
2009-07-22 16:36
需要常数配置的Component没有支持,还是需要XML配置,这正好发挥XML配置的作用,XML用来作为配置,一些常数字符串的配置修改,而且修改后,无需重新编译软件,即可运行。

jdonlearner
2009-07-23 21:16
哇,jdonframe愈来愈简单,太好了.顶个!

BANQ老师,持久层daoCRUD和hibernate的注入还要自己配置吗?

banq
2009-07-24 11:21
>持久层daoCRUD和Hibernate的注入还要自己配置吗

多谢,应该不用配置,如果你实现或继承DaoCRUDTemplate以后,在这个继承子类上标注@Componnet就可以。

但是,如果直接使用框架中的组件,还是需要XML配置,这个方面方便性,这个版本还没有考虑到,我先思考一下如何协调,如果你有好的建议,也提出来,谢谢。

banq
2009-07-24 14:38
关于为什么不增加@Transaction支持注解的说明:

使用Jdon框架可以使用事务机制,在代码中直接写JTA调用就可以(可见JiveJdon源码),那为什么Jdon框架不直接@Transaction注解呢?

主要是设计理念不同:我个人一直认为:事务是软件不可伸缩的罪魁祸首,给一段代码标记上事务,实际表明,这段代码中方法操作就是串行化的。我们可以使用基于内存对象模型的并发锁来替代事务操作,事务最后就异化为专为数据库操作准备的技术。

既然是为数据库等资源准备的技术,为什么要上升到业务层呢?业务层完全可以基于缓存中领域模型对象的并发锁机制来实现,更有甚者,可以采取云计算框架来帮助实现。实现方式见:http://www.jdon.com/jivejdon/thread/36633.html

所以,事务在某种程度上代表串行化计算,和云计算 异步处理 并行计算等概念是矛盾的。我们必须为降低事务粒度而和业务进行某种博弈,这时框架不能在其中再偏向事务串行化阵营。而EJB框架,以及整合Hibernate后的Spring框架,业务层缺省是事务的,是偏向事务阵营的。

见这个讨论: http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=36063&message=23122681#23122681

以及:

http://www.jdon.com/jivejdon/thread/36633.html

[该贴被admin于2009-07-25 17:49修改过]

jdonlearner
2009-07-24 19:50
谢谢banq老师的回复!刚更新到6.0,正在使用中

AboutUs
2010-08-31 11:47
找不到 aopalliance.jar 这个包

是不需要么

猜你喜欢