<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>ygxdha</title>
    <description></description>
    <link>http://ygxdha.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>S2Dao 实现分页的一些经验</title>
        <author>ygxdha</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ygxdha.javaeye.com">ygxdha</a>&nbsp;
          链接：<a href="http://ygxdha.javaeye.com/blog/175871" style="color:red;">http://ygxdha.javaeye.com/blog/175871</a>&nbsp;
          发表时间: 2008年03月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          S2Dao是seasar下面的一个字项目，使用annotation + interface的方式实现了dao层。下面是给公司做培训时所写文章的节选。主要是分页底层的一些使用方法。公司项目的架构采用了s2struts+s2dao+seasar。s2struts和seasar部分在分页上的实现因为该项目设计上的特殊性，没有广泛代表意义，就没帖出来了。<br /><br /><br />1：底层的实现原理。<br />S2Dao中，只需要传入DAO函数的参数实现了PagerConditon这个interface，再加上j2ee.dicon里面的配置，在dao层就自动提供了分页功能。PagerCondtion的用处是用于提供分页所需要的必要信息,以及返回分页查询后所附带的一些信息，其中需要提供的信息有limit,offset,返回的信息有count.<br />Offset：本次查询从那条数据开始。<br />Limit：一次查询返回的结果数。<br /><br />Count:查询结果的记录总数量。<br /><br />S2Dao本身提供一个类叫DefaultPagerCondition，该类实现了PagerCondition。算是分页的默认实现。<br /><br />S2Dao分页在Jdbc层的实现有2种<br />1：利用Jdbc中ResultSet的滚动游标实现。<br />2：利用数据库的特有功能实现。Oracle支持rowNum，MySql和PostgreSQL支持的Limit,Offset.<br /><br /><br />其中的配置可以参考http://s2dao.seasar.org/ja/s2pager.html，这里就不详细介绍了。这里介绍下这2者之间的区别。<br />1：使用ResultSet的滚动游标来实现分页。有些数据库并不支持这个功能，比如我们项目的oracle10g，所以查询的时候虽然返回的记录条数是limit限制了的，不过实际上查询会把所有的记录都返回到内存里面，如果有10w条记录，很可能就出现内存泄漏的情况。所以就这个意义上来说，使用ResultSet的分页已经失去了原有的意义。<br /><br />2：数据库的特有支持。我们的项目使用的是oracle10g。所以最后采用了rowNum的方法。<br />S2Dao会包装你原有的Sql语言，将原来的一句SQL变成三句SQL，发送给数据库。具体的实现可以参考 OracleRownumPagingSqlRewriter。因为原来的一句语言变成了三句SQL，所以采用这种分页有可能降低查询的效率。你可以参考OracleRownumPagingSqlRewriter实现自己的AbstractPagingSqlRewriter来优化效率。比如我们的项目中就定义了自己的rowNum查询语言，引入了with语句。
          <br/>
          <span style="color:red;">
            <a href="http://ygxdha.javaeye.com/blog/175871#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Mar 2008 15:59:54 +0800</pubDate>
        <link>http://ygxdha.javaeye.com/blog/175871</link>
        <guid>http://ygxdha.javaeye.com/blog/175871</guid>
      </item>
      <item>
        <title>项目一期结束后的思考。怎么样改善tomcat的工作环境</title>
        <author>ygxdha</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ygxdha.javaeye.com">ygxdha</a>&nbsp;
          链接：<a href="http://ygxdha.javaeye.com/blog/146576" style="color:red;">http://ygxdha.javaeye.com/blog/146576</a>&nbsp;
          发表时间: 2007年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目一期已经完成。在最后的测试，bug修改，回归阶段，eclipse3.3 + wtp + tomcat5.5+jdk1.5给整个项目组带来了巨大的无力感。问题出在hot deploy上，在上面所述的环境下，任何java源代码的更改都会导致wtp的重启，session的失效，之前的页面操作需要重兴做一遍才能回到需要测试的页面。如果java web项目能做到ruby那样的hot deploy该多好啊。可惜项目2期依然是java的环境，看来只有自己想办法改善了。查了下网上的资料，大概有如下几条路可以走。<br />
<br />
1：改用Tomcat&nbsp;的嵌入式版本。<br />
优点：启动速度更快，wtp上publish阶段所需要的copy 文件的时间可以节约下来。<br />
<br />
疑问：Tomcat&nbsp;的嵌入式版本是否支持hot deploy。感觉需要tomcat支持hot deploy 需要修改tomcat的classloader机制。<br />
<br />
2：修改tomcat的classloader机制。在classloader的分层里面，tomcat的 classloader属于app 级别的classloader。可以通过修改tomcat的源代码来解决java类修改不需要重启tomcat的功能。<br />
<br />
疑问：网上该方法的资料很少，javaeye上也只看到大家讨论过修改web中的配置文件，不需要重启tomcat的讨论，一切不确定因素太多了，项目等不得。<br />
<br />
3：改用classfish v2来替代tomcat。<br />
测试过一下。虽然不需要重启，不过build的时间依然不短，而且session还是失效了。效果没有现象中的理想。<br />
<br />
4：wtp插件的问题。<br />
将wtp插件改成使用sysdeo 的tomcatplugin插件。tomcatplugin插件如果发现有java文件修改，如果该文件的修改是tomcat 的classloader不支持hotdeploy，会给你提示。让你选择是否重启，这个比wtp已经人性化一点了。不过还是不能实现hotdeploy。<br />
<br />
5：使用 <a href="http://www.zeroturnaround.com/javarebel/" target="blank">javarebel</a><br />
<br />
看javarebel的官网，上面提到的hotswap功能的确让人心动。不过是收费的，而且相关的使用经验和资料太少，风险比较大。<br />
<br />
<br />
应该选择哪种方法解决问题，希望有经验的大大给点经验。
          <br/>
          <span style="color:red;">
            <a href="http://ygxdha.javaeye.com/blog/146576#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Dec 2007 10:49:11 +0800</pubDate>
        <link>http://ygxdha.javaeye.com/blog/146576</link>
        <guid>http://ygxdha.javaeye.com/blog/146576</guid>
      </item>
  </channel>
</rss>