JiveJdon Community Forums
在线68人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » 开源JdonFramework及其应用案例论坛
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 3 回复 / 1
 发表新帖子   回复该主题贴
sdaucs

悄悄话
发表文章: 18
注册时间: 2007年09月14日 10:44
关于内嵌对象(Embedded Object)缓存设计的问题 2008年04月23日 13:14 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
我在修改jpetstore这个项目时,发现如果用户查询自己以前的订单时,需要查询Item,所以我想让Item成为成为order.LineItem的内嵌对象的,这时就想到了用banq老师讲内嵌对象缓存设计的问题,我是这样用的
我先说原来没有用内嵌对象时的设计:
Class OrderSqlMapDao{
...........
public Order getOrder(int orderId) throws SQLException {
Order order = null;
Object parameterObject = new Integer(orderId);
order = (Order) sqlMapDaoTemplate.queryForObject("getOrder",
parameterObject);
List lineItems = sqlMapDaoTemplate.queryForList(
"getLineItemsByOrderId", new Integer(order.getOrderId()));
Iterator it = lineItems.iterator();
while (it.hasNext()) {
LineItem lineItem = (LineItem) it.next();
parameterObject = lineItem.getItemId();
lineItem.setItem((Item) sqlMapDaoTemplate.queryForObject("getItem",
parameterObject));
}
order.setLineItems(lineItems);
return order;
}
..............
}
[该贴被sdaucs于2008-04-23 13:15修改过]
sdaucs

悄悄话
发表文章: 18
注册时间: 2007年09月14日 10:44
关于内嵌对象(Embedded Object)缓存设计的问题 2008年04月23日 13:22 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
然后我又用了内嵌设计
下面修改的OrderServiceImp类
Class OrderServiceImp{
...............
private ProductManager productManager;
..............
public Order getOrder(Integer orderId) {
Order order = null;
try {
order = orderDao.getOrder(orderId);

// 内嵌对象(Embedded Object)缓存设计
Iterator it = order.getLineItems().iterator();
while (it.hasNext()) {
LineItem lineItem = (LineItem) it.next();
Item item = productManager.getItem(lineItem.getItemId());
lineItem.setItem(item);
}

} catch (Exception daoe) {
Debug.logError(" Dao error : " + daoe, module);
}
return order;
}
............
}

下面是OrderSqlMapDao类
Class OrderSqlMapDao{
.............
public Order getOrder(int orderId) throws SQLException {
Order order = null;
Object parameterObject = new Integer(orderId);
order = (Order) sqlMapDaoTemplate.queryForObject("getOrder",
parameterObject);
List lineItems = sqlMapDaoTemplate.queryForList(
"getLineItemsByOrderId", new Integer(order.getOrderId()));
order.setLineItems(lineItems);
return order;
}
..............
}

可是从jboss的控制台上看,item还是没有缓存!我也不知道是怎么回事!
banq

悄悄话
发表文章: 9290
注册时间: 2002年08月03日 17:08
回复:关于内嵌对象(Embedded Object)缓存设计的问题 2008年04月24日 09:08 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
你新增的Item 需要缓存有两个条件:
1. item实现modelif接口

2. 需要客户端单独对item的get获取。在这种情况下,缓存机制发挥作用,item在缓存内,但是如果你在Order中也有一份item,那么要保证这两个item是同一个,否则乱了。这是我提出内嵌对象的目的。

[该贴被banq于2008-04-24 09:08修改过]
sdaucs

悄悄话
发表文章: 18
注册时间: 2007年09月14日 10:44
回复:回复:关于内嵌对象(Embedded Object)缓存设计的问题 2008年04月24日 11:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
1. item继承了model类
2. item也在jdonframework.xml里面配置了

首先查询items的时候,已经将item缓存了,
然后当查询order的时候,需要调用item这个缓存,但是通过jboss控制台,我看到好像系统有查询了一次item,并重新缓存了.我也不知道是怎么回事!
这个主题有 3 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam