自定义的action的不同方法执行同一service的同一方法,结果完全不同,为什么?

public class RoleManagerAction extends DispatchAction{

private final static Logger logger = Logger.getLogger(RoleManagerAction.class);

public ActionForward save(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception
{

......
EventModel em = new EventModel(); em.setModel(hasRightAssign);
rightAssignService.delete(em);//不能更新数据库和缓存

.......
}


}

public ActionForward delete(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response){
RightAssignService rightAssignService = (RightAssignService)WebAppUtil.getService("rightAssignService", request);
.......
EventModel em = new EventModel();
em.setModel(rightAssign);
rightAssignService.delete(em);//能更新数据库和缓存
......
}
}

为什么要自己去构造EventModel?
这些完全可以交给配置文件使用jdon的增删改查模板,因为jdon的CRUD功能横跨多个层次,你自己new一个EventModel调用service出错几率很大。

问题比较杂,jdon的CRUD功能实现不了这样复杂的操作

需要手工清除缓存:
modelManager.removeCache(keyValue);

其实可以使用服务命令调用模式,就不必写这个Action了,不论多复杂,只要搞清头绪,就可以使用下面服务命令调用模式实现:

1.你只要将hasRightAssign建立成一个Model,或者放入一个Model中。
2.建立service :
public interface TestService{
……
void xxxxx(EventModel em);//注意,方法参数必须统一为是EventModel
……
}

3.配置jdonframework.xml
<model key="primary key of your model主键" class ="你的model类">
<actionForm name="aForm"/>
<handler>
<service ref="testService" /> <!-- 指定对应的接口Service名称 -->
</handler>
</model>
<pojoService name="testService" class="com.jdon.framework.test.service.TestServicePOJOImp"/>
4.配置struts-config.xml
<action path="/aaa" type="com.jdon.strutsutil.ServiceMethodAction"
name="aForm" scope="request" validate="false">
<forward name="xxxxx" path="/xxx.jsp"/>
</action>
5.这样你就可以使用http://localhost:8080/aaa.do?service=testService&method=xxxxx调用了

>>不论多复杂,只要搞清头绪,就可以使用下面服务命令调用模式实现
做框架的人必须要前瞻到当框架遇到复杂问题的时候应具备优雅的处理方法。建议banq老师在文档中除了简单对象的CRUD演示外再加上具有对象关系的模型CRUD演示,网站上的struts_jdon_hibernate算是一个具有对象关系的模型CRUD演示,可是从使用的反馈来看还存在很多问题,比如hibernate已经具备两级缓存,Jdon又在持久层框架外面加了一层缓存,怎么简单的管理同步?
Jdon框架的产品级应用是jivejdon,但不是每个人都会来看jivejdon的源码。框架应用在解决复杂问题的时候可能会被埋怨为什么这个问题不好处理,其实问题处理方法在jivejdon中。
[该贴被oojdon于2008-04-02 13:06修改过]

>Jdon又在持久层框架外面加了一层缓存
Hibernate就是启动二级缓存,每次批量查询时,还是要查询数据库的,不信你看看输出,而是要Jdon框架后,彻底杜绝了数据库访问,Jdon框架对多页面的数据ID进行了缓存。

Jdon缓存可以和Hibernate合用缓存,也可以设置为EHcache,两者不一样时,Jdon缓存更靠界面前端。

刚刚放上struts+jdon+hibernate开发视频,非常类似grails的快速开发:
http://www.jdon.com/jdonframework/jdonMovie.htm

服务命令调用模式实现的话,就得在一个service中调用多个其它的service,且这里有递归调用,这种方式只能使问题处理起来更复杂,service层交叉得更多,从松散的要求来说,不符合要求

使用服务命令调用模式不一定会发生service层交叉。

发生service层交叉,是因为我们将很多业务功能都放在Service中了,而应该将这些业务功能从Service中剥离出来,Service层就是一层很薄的涂料,类似装饰模式,不应该很厚的。这其实就是Evans DDD建模设计要求的。