关于JiveJdon中MessageBuilder的问题

09-11-21 d02540315
    

小弟不才,JiveJdon中MessageBuilder.java中的以下代码看不太明白,希望大家指点迷津。

public void asyncGetAccount(final ForumMessage forumMessage) throws Exception {

try {

logger.debug(" embed getAccount ");

// DomainMessage message =

// forumMessage.getDomainEvents().loadAccount(forumMessage);

FutureTask<Account> ft = new FutureTask(new Callable<Account>() {

public Account call() throws Exception {

Account account = accountFactory.getFullAccount(forumMessage.getAccount());

if (!account.isAnonymous()) {

// get messageCount of the account;

int count = messageQueryDao.getMessageCountOfUser(account.getUserIdLong());

account.setMessageCount(count);

}

return account;

}

});

ft.run();

forumMessage.getModelState().setFutureTask(ft);

} catch (Exception e) {

String error = e + " embedAccount forumMessageId=" + forumMessage.getMessageId();

logger.error(error);

throw new Exception(error);

}

}

问题:

FutureTask<Account> ft = new FutureTask(new Callable<Account>() ...

这里应该是一个匿名内部类的用法。我迷惑的是:内部类返回的应该是一个Callable的子类的实例。 我看了Account, Callable之间是没有继承关系的。 请问,这里由 FutureTask(new Callable<Account> 转换成 FutureTask<Account>的?

多谢~~

    

banq
2009-11-22 18:27

这是用来准备ForumMessage中Account对象值,forumMessage.getModelState().setFutureTask(ft)

由于Account中messageCount需要查询大量数据耗时,当初使用并行计算的futuretask专门计算,可提升性能,减少CPU占耗。

现在messageCount已经使用Domain events实现,这里没有改回,留个纪念吧。

Domain Events异步应用