强烈疑惑,请 banq 大哥一定尽快看看

分析主题列表时一个主题缓存丢失的运行如下:

ThreadListAction:
findModelIFByKey(request, dataKey);
|
ForumMessageShell:
forumMessageService.getThread((Long)key);
|
MessageKernel:
messageKernel.getThread(threadId);
|
MessageRepository:
messageRepository.getThread(threadId);
|
ForumBuilder:
forumBuilder.getThread(threadId, null);
|
MessageDaoSql:
messageDao.getThread(threadId);

超长的调用链先不说,在 ForumBuilder 有下面这句:

if (forumThread.isEmbedded()) return forumThread;

但是我没有看到什么地方设置了 embedded 为 true,所以其后代码永远必须执行

logger.debug("<Embed ForumThread----> start, threadId=" + threadId);
if (forum == null) forum = getForum(forumThread.getForum().getForumId());
forumThread.setForum(forum);

我没有看到 Thread 是如何共享同一个 Forum 的,难道每个 Thread 都要重新查询?

一定是我有什么地方没有分析到,或者是 IoC,或者是 AOP 什么的,源码下载的是官方最新提供的,怎么都用不起来。只有下载那个 jdon_jboss_mysql 的包才能用,但是里面没源码,请 banq 分析指点一下,谢谢了~!

又看了下配置, 好像是靠 ForumDaoCache 等来介入的, 自己会继续探索, banq 大哥看到的时候也请指点一下程序处理的大概流程,那样可能会更清楚,更直接。reference 我基本上看完了的,但是好像没有详细说明这些的

嗯 ... 基本清楚了。有新问题再请教
[该贴被jdonfans于2007年03月21日 08:48修改过]

第一个问题是依靠Ioc注射.

第二个setEmbedded应该是在forumBuilder等地方有设置.

谢谢 banq 的回复,最开始我是忽略了 cache filter,后来看了,原来是 cache filter 继承了 dao,然后先通过 containerUtile 在 Ioc 容器中找,找不到才查询数据库,所以完成了内存对象的共享.不过觉得有点不是很 smart,不知道可不可以通过更改 modle 实现能更智能一点。

对于 setEmbedded 还没找到在什么地方有设置