关于JDON的几点困惑

06-03-15 zljin
1、IOC的初始化是由STRUTS的PLUGIN来实现装载的。这样会带来一个问题,在web层可以使用WebAppUtil可以获得在IOC容器中的对象。但是在WEB应用和EJB应用部署在不同的机器上,EJB应用就不能通过WebAppUtil来从IOC中获得对象。也没有时机来初始化IOC容器。

2、查询的缓存机制适用范围有限,只适合于单表查询。对于多表的关联查询就无能为力了,因为,结果集中大多都找不到能那一列或几列联合,能唯一标识出一条记录。

    

banq
2006-03-16 11:23
>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);

    }

猜你喜欢