Spring 3下如何实现DCI, Domain Events?

已有的项目已经使用了Spring3 + Spring MVC + JPA2的架构,在此架构下,如何实现DCI和Domain Events?
请老师指点,或者能把jdon和spring3结合到一齐吗?如何整合?

2011年11月07日 22:46 "@lshoo"的内容
能把jdon和spring3结合到一齐吗?如何整合 ...

DCI可以用Spring的Aspectj实现,Domain Events估计不行,结合Jdon + Spring实现倒是一个好思路,原来我没有考虑过,可以在下个版本尝试一下,如果你有实践的好方法,也谢谢提供以下。

我google了一下,Axon可以实现Domain Events,而且能和Spring集成.
DCI用scala如何实现?
Spring现在是一个平台,很多应用都有,而且是公司层面决定的,最好能把jdon的优点集成到spring3中.

2011年11月08日 10:04 "@lshoo"的内容
能把jdon的优点集成到spring3 ...

我初步想了一下,两者现在就可以结合,只是各用各的Annotation元注解就可以了。然后把com.jdon.controller.AppUtil作为一个普通Bean配置在Spring中即可,通过AppUtil从外部调用Jdon框架管理的一些功能。
[该贴被banq于2011-11-08 10:58修改过]

在看Axon的Reference,上面有提到:
The Axon Framework makes a distinction between three types of events,Domain Events, Application Events and System Events.

2011年11月08日 14:31 "@lshoo"的内容
在看Axon的Reference,上面有提到 ...

Jdon框架与Axon区别是:JdonFramework是基于DDD领域驱动设计的,也就是DDD + DCI + Domain Events,不是一个纯Events框架,看看这个案例:

DDD DCI和领域事件:http://www.jdon.com/jdonframework/dci.html
[该贴被banq于2011-11-08 14:55修改过]

2011年11月08日 14:55 "@banq"的内容

Jdon框架与Axon区别是:JdonFramework是基于DDD领域驱动设计的,也就是DDD + DCI + Domain Events,不是一个纯Events框架 ...

Axon是基于DDD的, 支持Event sourcing, CQRS, Domain Events,关键是能和Spring集成.
老大能否出个jdon + spring集成的sample,最好再说上两句.谢谢!
[该贴被lshoo于2011-11-08 15:37修改过]

2011年11月08日 15:04 "@lshoo"的内容
老大能否出个jdon + spring集成的sample,最好再说上两句 ...

只要是基于JDK直接开发的,都支持Spring。Jdon框架只要通过一个静态类WebAppUtil就可以访问,在SpringMVC的Rest Controller中直接调用:


@Controller
@RequestMapping(value = "/contact")
public class UserController {

//关键需要声明一个ServletContext 供WebAppUtil使用
@Autowired
ServletContext context;

@Autowired
private SimpleJdbc simpleJdbc;

@RequestMapping(method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("contacts", simpleJdbc.getUsers());
return "contact/listContacts";
}

@RequestMapping(value = "/new", method = RequestMethod.GET)
public String newForm() {
return "contact/createContact";
}

@RequestMapping(value = "/new", method = RequestMethod.POST)
public String newFormSave(@Valid UserModel user, BindingResult result) {
if (result.hasErrors()) {
return "contact/createContact";
}
user.setUserId(Integer.toString(user.hashCode()));
//从Jdon框架中获得DCI的角色分配器
RoleAssigner roleAssigner = (RoleAssigner) WebAppUtil.getComponentInstance("roleAssigner", context);
RepositoryManagerIF rm = (RepositoryManagerIF) roleAssigner.assign(user, new RepositoryManagerEventImp());
rm.remember(user);
return ("contact/contactCreated");
}

SpringMVC3 + Jdon完整源码见:
http://code.google.com/p/jivejdon/downloads/detail?name=SpringMVC%2BJdon.zip&can=2&q=makechanges

在看jdon的文档和做点实验.
jdon不支持maven吗?

2011年11月08日 18:57 "@banq"的内容
在SpringMVC的REST Controller中直接调用: ...

只要在Spring中增加一个启动类,在Spring启动时,把Jdon和Spring互相依赖的组件注射一下就可以无缝混合在一起使用:

@Autowired
private SimpleJdbc simpleJdbc;

@Autowired //需要Jdon框架的RoleAssigner
private RoleAssigner roleAssigner;

至此,在JdonFramework 6.5.1 可以在Spring中使用,Jdon也能使用Spring的资源,比如JdbcTemp:

@Consumer("saveUser") // 这是 Jdon框架
public class UserSaveListener implements DomainEventHandler {

  @Autowired //这是Spring框架
  private UserRepository simpleJdbc;


这个启动类见:http://www.jdon.com/jdonframework/spring.html


试下先,jdon不支持Maven是个遗憾。

2011年11月11日 22:24 "@lshoo"的内容
jdon不支持Maven ...

如果说这世界上还有Maven的反对者,我就是那么一个,Maven是复杂化java的罪魁祸首,不可否认Maven在团队协作中重要作用,但是对于崇尚轻量简单的Jdon框架来说,没有必要,两个原因:

1.Jdon框架对所依赖包都有重写和要求,开源项目升级没有几个是考虑向后兼容的,为保证Jdon框架的稳定性只能固定相应的包。

2.一次性下载开发的依赖环境即可,不必象拉稀一样。初学者可能在等待拉稀过程中离场。

[该贴被admin于2011-11-12 09:17修改过]

2011年11月12日 09:04 "@banq"的内容
1.Jdon框架对所依赖包都有重写和要求,开源项目升级没有几个是考虑向后兼容的,为保证Jdon框架的稳定性只能固定相应的包。
...

这是一个问题,举例来说,aopalliance.jar都是spring和jdon所依赖的,难道Spring中的aopalliance.jar和jdon中的aopalliance.jar要重复导入?如果选一个,另一个都有可能有问题啊.

2011年11月12日 10:49 "@lshoo"的内容
aopalliance.jar都是spring和jdon所依赖的,难道Spring中的AOPalliance.jar和jdon中的AOPalliance.jar要重复导入?如果选一个,另一个都有可能有问题啊 ...

道理是这样,但是具体到AOPalliance.jar不会,因为它是一个空接口包。

所幸的是Jdon和Spring不存在这样冲突,否则就无法在一起使用了。比如Jdon依赖的是picoContainer 1.1包或Disruptor 2.0包,如果你的其他应用依赖于picoContainer 1.3和Disruptor 2.5,而他们没有做到象Windows或JDK那样向后兼容,你如果使用Maven,你就完蛋了,当然,在公司内部相对可控的边界内,都是没有问题的。


[该贴被banq于2011-11-12 11:12修改过]

用sts构造的springmvc,整合jdon好痛苦,把jdon的jar放到lib里,每次保存文件都会重新布署,自动清空lib里的jar,而且只更新maven中的jar,有什么好办法保留lib中的jdon包不被清空?