关于JDON的几点困惑

1、IOC的初始化是由STRUTS的PLUGIN来实现装载的。这样会带来一个问题,在web层可以使用WebAppUtil可以获得在IOC容器中的对象。但是在WEB应用和EJB应用部署在不同的机器上,EJB应用就不能通过WebAppUtil来从IOC中获得对象。也没有时机来初始化IOC容器。
2、查询的缓存机制适用范围有限,只适合于单表查询。对于多表的关联查询就无能为力了,因为,结果集中大多都找不到能那一列或几列联合,能唯一标识出一条记录。

>IOC的初始化是由STRUTS的PLUGIN来实现装载的
Ioc初始化也可以直接在web.xml配置初始化,
Jdon的Ioc只对POJO有作用,当你用EJB时,无需使用Jdon的Ioc,EJB的IOc由EJB容器管理,如EJB3的JBoss 4.0等,此时Jdon只是一个Proxy,另外WebAppUtil调用一般都是在Web容器调用EJB容器服务,EJB内部本身不能这样调用,包括POJO内部也不能这样调用。


关于查询,当然可以联合查询,给你看看一个复杂的多表查询代码,如下:


public PageIterator getMessages(Long categoryId, int start, int count) {

String GET_ALL_ITEMS_ALLCOUNT = "select count(1) from message ";

String GET_ALL_ITEMS =
"select messageId from message where categoryId = ? ";
Collection params = new ArrayList(1);
params.add(categoryId);
return pageIteratorSolver.getPageIterator(GET_ALL_ITEMS_ALLCOUNT, GET_ALL_ITEMS, params, start, count);
}

public PageIterator getMessages(MessageQuery messageQuery, int start, int count) {
logger.debug(
"enter getMessage");

StringBuffer querySqlCondition = new StringBuffer(
"");
Collection paramList = new ArrayList();
//查询参数
Session session = null;
List queryList = null;

querySqlCondition.append(
" FROM message WHERE 1=1 "); //查询字符串

String categoryId = messageQuery.getCategoryId();
//发布类型
String keyword = messageQuery.getKeyword();
//关键值
String publishUser = messageQuery.getPublishUser();
//发布用户
String publishDateDomain = messageQuery.getPublishDateDomain();
//发布时间间隔
if (categoryId != null && !categoryId.equals(
"")) { //发布类型
querySqlCondition.append(
" AND categoryId = ?");
paramList.add(categoryId);
}

if (keyword != null && !keyword.equals(
"")) { //关键值
querySqlCondition.append(
" AND (subject like ? OR body LIKE ?)");
paramList.add(
"%" + keyword + "%");
paramList.add(
"%" + keyword + "%");
}

if (publishUser != null && !publishUser.equals(
"")) { //发布用户
querySqlCondition.append(
" AND Exists(SELECT userId FROM user WHERE name like ? ) ");
paramList.add(
"%"+ publishUser +"%");
}

if (publishDateDomain != null && !publishDateDomain.equals(
"")) {
//发布时间间隙
querySqlCondition.append(
" AND TO_DAYS(NOW()) - TO_DAYS(creationDate) <= ?");
paramList.add(publishDateDomain);
}

logger.debug(
"querySql = " + querySqlCondition);
logger.debug(
"parameter size = " + paramList.size());
String GET_ALL_ITEMS_ALLCOUNT =
"select count(1) " + querySqlCondition;
String GET_ALL_ITEMS =
"select messageId " + querySqlCondition;
logger.debug(
"GET_ALL_ITEMS = " + GET_ALL_ITEMS);

return pageIteratorSolver.getPageIterator(GET_ALL_ITEMS_ALLCOUNT, GET_ALL_ITEMS, paramList, start, count);

}