jdon的域模型事件注入问题

10-06-08 yxh1122
              

最近在项目中使用域模型事件来实现model的懒加载,刚开始在moel类Organization中按照jdon文档的步骤,创建域事件,创建事件监听类,在model中设置注入对象,可以实现事件的依赖注入,后来用同样的方法在另一个类Custom中创建,当运行到该类的属性获取方法getXingzhiText()时,发现需要注入的事件对象classifyValueDomainEvents 为null,出现错误。已经困扰两天了,希望banq能够给予帮助

以下是相关的代码:

model类 Custom :

package dnn.custom.model;

import com.jdon.annotation.model.Inject;

import com.jdon.async.message.EventMessage;

import com.jdon.controller.model.Model;

public class Custom extends Model {

@Inject

private ClassifyValueDomainEvents classifyValueDomainEvents = null;

private String xingzhiText;

public String getXingzhiText(){

EventMessage message = classifyValueDomainEvents.getClassifyValue(this);

message.getEventResult();

return this.xingzhiText;

}

public void setXingzhiText(String xingzhiText){

this.xingzhiText = xingzhiText;

}

...

}

域事件类ClassifyValueDomainEvents:

package dnn.custom.model;

import com.jdon.annotation.Introduce;

import com.jdon.annotation.model.Send;

import com.jdon.domain.message.DomainMessage;

@Introduce("message")

public class ClassifyValueDomainEvents {

@Send("getClassifyValue")

public DomainMessage getClassifyValue(Custom custom) {

return new DomainMessage(custom);

}

}

事件监听类 ClassifyValueMessageListener:

package dnn.custom.service;

import com.jdon.annotation.Component;

import com.jdon.domain.message.DomainMessage;

import com.jdon.domain.message.MessageListener;

import com.jdon.model.ModelKey;

import com.jdon.model.ModelManager;

import dnn.custom.model.Custom;

import dnn.organization.model.Organization;

@Component("getClassifyValue")

public class ClassifyValueMessageListener implements MessageListener {

private CustomService customService= null;

private ModelManager modelManager = null;

public ClassifyValueMessageListener(CustomService customService,ModelManager modelManager){

this.customService = customService;

this.modelManager = modelManager;

}

@Override

public void action(DomainMessage eventMessage) {

Custom custom = (Custom)eventMessage.getEventSource();

try {

} catch (Exception e) {

e.printStackTrace();

}

}

}

[该贴被yxh1122于2010-06-08 09:14修改过]

              

banq
2010-06-08 11:58

关键是 Custom 从数据库获得时,需要在仓储Repository的getCustom所在类上加@Introduce(“modelCache”) ,在getCustom方法上加@Around,如图:


yxh1122
2010-06-08 14:16

呵呵,找到原因了,是因为我没有添加域事件对象的get和set方法,很惭愧,多谢banq的帮助

oojdon
2010-06-09 09:40

2010年06月08日 14:16 "yxh1122"的内容
是因为我没有添加域事件对象的get和set方法 ...

确实容易忘记,我也遇到过,如果JF不通过set注入,直接注入就好了。

yxh1122
2010-06-18 18:09

现在又有了新的问题,域事件注入是在拦截器CacheInterceptor中,在访问服务的get方法时由拦截器拦截,得到model后执行model属性的域事件注入。但是我在一个model的域事件监听处理类中访问服务,利用域事件懒加载该model需要的其他model的属性,比如获取联系人model的所在客户名称,这个时候访问服务层的get属性方法获取的客户model将不能被CacheInterceptor拦截器拦截,因此得到的客户model内部定义的域事件将不能被注入,有没有解决办法,希望给予帮助,谢谢先

2Go 1 2 下一页