使用 Domain Events 不成功

10-07-15 lhcli
准备使用 jdon 异步 Domain Events 模式。发现不成功。贴出代码,请老大们指点一二。

Model:

@Model

public class CoderProperty

{

int id;

String first;

String second;

String third;

String last;

int maxLenth;

int maxSize;

@Inject

DomainEvent de ;

boolean isNew = true;// 是否已经更新

。。。。。忽略掉get/set方法

/**

* 计算下一个缓冲自增长量的最大值

*/

public void compute()

{

int current = Integer.parseInt(getLast());

int temp = Double.valueOf(Math.pow(10, getMaxLenth())).intValue();

this.setLast(String.valueOf(current + temp + getMaxSize()).substring(1));

setNew(false);

}

/**

* 修改编码器信息

*/

public void update()

{

compute();

de.updateCoderProperty(this);

}

/**

* @return the de

*/

public DomainEvent getDe()

{

return de;

}

/**

* @param de the de to set

*/

public void setDe(DomainEvent de)

{

this.de = de;

}

}

DomainEvent

@Introduce("message")

public class DomainEvent

{

/**

* 异步修改编码器信息

* @param cp

* @return

*/

@Send("modifyCoderProperty")

public DomainMessage updateCoderProperty(CoderProperty cp)

{

return new DomainMessage(cp);

}

}

components

@Component("modifyCoderProperty")

public class ModifyCoderProperty implements MessageListener

{

CoderDao cd;

/**

* 执行编码器属性修改工作

* @see com.jdon.domain.message.MessageListeneraction(com.jdon.domain.message.DomainMessage)

*/

public void action(DomainMessage arg0)

{

CoderProperty cp = (CoderProperty) arg0.getEventSource();

cd.updBean(cp);

cp.setNew(true);

}

}

当我调用model中的update方法时,发现被注入进去的domainevent为null,导致无法继续执行,请老大给看看是不是我哪写错了。

[该贴被lhcli于2010-07-15 16:37修改过]

oojdon
2010-07-15 20:27
模型类要被jdon的aop包装一下的,不然是要抛空指针,包装可以通过service的get,或者那个环绕拦截注释,你可以看我的那个源码。

lhcli
2010-07-15 22:12
oojdon:

我来jdon不长,可以告诉我你说的那个源码是哪个吗?或者给我发一份,lhc_li@126.com 非常感谢

lhcli
2010-07-15 23:34
非常感谢,我发现问题所在了,不是我写的有问题,而是我调用的时候有问题。

我原来使用构造方法默认注入,好像是不行的。现在改为用形如:

CoderService cs = (CoderService) WebAppUtil.getService(

"coderService", request);

CoderProperty cp = cs.getCoderProperty(1);

cp.update();

调用,就可以成功执行。

但是我现在有个其他的问题,因为,这个service是要内部来使用的,而在内部使用时,没有request对象,不知道,这种情况下如果来调用service。

banq
2010-07-16 08:17
2010年07月15日 23:34 "lhcli"的内容
没有request对象,不知道,这种情况下如果来调用service。 ...

最新版提供无request的getService功能了

lhcli
2010-07-19 11:08
2010年07月16日 08:17 "banq"的内容
最新版提供无request的getService功能了 ...

banq老师:

不知道您指的最新版是不是6.2.3,我现在用的是6.2.3版本。找了下WebAppUtil的方法,没有发现单独能通过name来的到service。还请老师明示。

另外,我还有一个疑问:就是我在使 异步DomainEvent模式的时候,发现:如果在debug模式下 注入model中的DomainEvent对象时没有问题的,但是我在运行模式下 发下 被注入的DomainEvent对象为null。这个我不是很了解,还请老师给解释一下,关于代码,就是我贴这篇帖子的最顶端的代码,谢谢!

yxh1122
2010-08-26 14:31
如果通过构造函数直接注入service的一个service类中,为使得到的对象能够实现模型注入,必须在获取该模型对象的dao层的getmodel方法增加@Around注解,并且在该dao类的类构造函数增加@Introduce注解,也就是使用jdon的域缓存功能,通过启用域缓存,才能让拦截器拦截到dao的方法

将需要的注入对象注入

请看

http://www.jdon.com/jivejdon/thread/39078

猜你喜欢