使用 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.MessageListener#action(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。

猜你喜欢
2Go 1 2 下一页