<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8668902489196669083</id><updated>2011-08-25T10:21:00.399+08:00</updated><category term='ibatis'/><category term='Python'/><category term='SnapAmazon'/><category term='项目'/><category term='java'/><category term='Portal'/><category term='加密'/><category term='Nokia770'/><category term='连接池'/><category term='Pluto'/><category term='Oracle'/><category term='cookie'/><category term='日志'/><category term='极限编程'/><category term='数据库'/><category term='webwork'/><category term='Tomcat'/><category term='Jetty'/><category term='struts'/><category term='敏捷开发'/><category term='Maven'/><category term='Eclipse'/><category term='ECS'/><category term='Partal'/><category term='优化'/><category term='笔记'/><category term='缓存'/><category term='addresses'/><category term='Geplex'/><category term='Jakarta Common'/><title type='text'>青椒</title><subtitle type='html'>香菜芹菜辣青椒，茄子扁豆嫩蒜苗，好大的黄瓜你们谁要，一个铜子儿拿两条。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-4557037216882056570</id><published>2008-06-16T22:26:00.000+08:00</published><updated>2008-09-10T18:48:11.648+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ibatis'/><category scheme='http://www.blogger.com/atom/ns#' term='缓存'/><title type='text'>Ibatis缓存</title><content type='html'>用Ibatis做了一个项目了，关于它的缓存管理有两个问题一直没弄得很明白：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;缓存的readOnly到底有什么意义？&lt;br /&gt;看到的中文文档多数都是对此草草带过，说readOnly为true的缓存是只读，为false的是可读写。可是“可读写”三个字写起来容易，到底是怎么个“可读写”法我却一直没想明白。理想化一点的想法是将vo的内容先写入缓存，然后由Ibatis统一控制其内容的持久化。今天又在设计一个网站的dao层，终于抽空看了看《Ibatis In Action》，这才搞明白，所谓readOnly的缓存，其实就是当应用需要从缓存中获取对象时，Ibatis直接将一个对象的引用传递给应用，因为反正对象是只读的，传递引用无疑会有最好的性能；而readOnly为false时（同时最好serialize为true，这个好理解），Ibatis则传递给应用一个当前对象的副本——恍然大悟。&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 缓存的刷新和过期&lt;br /&gt;Ibatis在设置缓存的时候，有个flushOnExecute的标签，当其中的方法执行时，即刷新缓存。我一直不明白的是，这个刷新缓存，是刷新全部缓存还是只刷新与特定对象相关的缓存。更直接点说，要看这个缓存的Key是Prepare Statement呢，还是Prepare Statement与statement语句参数值的集合。后者的效能显然更好一些，比如我更新了id为1的一条记录，那么只刷新select * from table where id='1'的缓存，而不是刷新所有与之相关的缓存。但是如果这样的话，Ibatis对缓存的管理任务无疑是相当繁重的，而且在设计时大概就需要引入新的标签了。所以看起来前者的可能性更大。&lt;br /&gt;今天也顺便查了《Ibatis In Action》，确实如上所述。如此以来，要想很好的利用Ibatis的缓存，那么在使用Ibatis&lt;flushonexecute&gt;&lt;flushinterval&gt;标签的时候，就要有从更细致的粒度去考虑设计了。&lt;/flushinterval&gt;&lt;/flushonexecute&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-4557037216882056570?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/4557037216882056570/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=4557037216882056570' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/4557037216882056570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/4557037216882056570'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2008/06/ibatis.html' title='Ibatis缓存'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-8165079805058163304</id><published>2007-08-08T10:10:00.000+08:00</published><updated>2007-08-08T10:13:33.627+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nokia770'/><title type='text'>Nokia770把玩笔记(1)</title><content type='html'>首先，解决中文问题。为了达到这一目的，需要拿到root权限，以及命令行界面，再加上自己也有在770上开发application的意图，因此决定安装一个完备的开发环境。&lt;br /&gt;看了几个文档，在还没有完全搞清楚状况的情况下，先下载了Scratchbox到我的Ubuntu 7.04环境上，接着才开始读maemo上的Tutorial。&lt;br /&gt;于是，开始下载flasher 3.0和770的Image。&lt;br /&gt;&lt;br /&gt;安装Maemo 2.2 SDK。&lt;br /&gt;接下来就发现这些对于基本的软件安装和Hack都是没有必要的。&lt;br /&gt;&lt;br /&gt;8月1号，我在770上安装了&lt;a href="http://770.fs-security.com/xterm/" title="xterm"&gt;xterm&lt;/a&gt; / &lt;a href="https://garage.maemo.org/frs/download.php/696/locales-extras-cjk_2.3.5-2_all.deb"&gt;locales-extras-cjk_2.3.5-2_all.deb。&lt;/a&gt;&lt;br /&gt;如果要安装字体至/usr/share/fonts目录下，必须得到root权限，所以要想办法打开Nokia 770上的R&amp;D模式（即开发模式）或者利用如下办法：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;     安装xterm 和     &lt;a href="http://matt.ucc.asn.au/dropbear/dropbear.html" title="Dropbear SSH Server"&gt;Dropbear     SSH Server&lt;/a&gt;；   &lt;/li&gt;&lt;li&gt;     从另一台机器远程ssh登录770主机： ssh     root@xxx.xxx.xxx.xxx，默认的root密码是“rootme”。接下来就获得了root权限了。但是，首先要做的是，禁掉root用户从网络访问的可能性，否则，加入一个开放的wifi网络就意味着对外开放了自己770的大门；   &lt;/li&gt;&lt;li&gt;     修改gainroot命令配置，使自己可以在不开放R&amp;amp;D模式的情况下可以获得root权限:用vi编辑/usr/sbin/gainroot文件，修改     &lt;blockquote&gt;&lt;pre&gt;MODE=`/usr/sbin/chroot /mnt/initfs cal-tool --get-rd-mode`&lt;/pre&gt;&lt;/blockquote&gt;     为     &lt;blockquote&gt;MODE=enabled #`/usr/sbin/chroot /mnt/initfs cal-tool --get-rd-mode`&lt;br /&gt;&lt;/blockquote&gt;&lt;pre&gt;    &lt;/pre&gt;   &lt;/li&gt;&lt;li&gt;     用passwd修改root用户的密码；&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;     可选：禁掉root直接访问的权限：     &lt;blockquote&gt;&lt;pre&gt;passwd -l root&lt;/pre&gt;&lt;/blockquote&gt;   &lt;/li&gt;&lt;li&gt;     可选：禁掉从ssh访问使用root的权限：编辑/etc/default/dropbear文件，加一个属性：     &lt;blockquote&gt;&lt;pre&gt;DROPBEAR_EXTRA_ARGS="-w"&lt;/pre&gt;&lt;/blockquote&gt; 重启Dropbear即可：&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;/etc/init.d/dropbear restart&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;   &lt;/li&gt;&lt;li&gt;     之后，便可以通过sudo gainroot获取root执行权限；&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;这之后，拷贝字体至/usr/share/fonts目录，执行fc-cache –f 刷新字体cache，重启之后，就可以在浏览器中正常查看中文了。&lt;br /&gt;&lt;br /&gt;但若要解决title栏的中文显示问题，仍需以下步骤：&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;在xterm中通过sudo gainroot获取root权限；&lt;/li&gt;&lt;li&gt;cd /usr/share/themes；&lt;/li&gt;&lt;li&gt;进入你想要hack的theme（但要注意，不要是当前正在使用的），如 cd theme2/matchbox；&lt;/li&gt;&lt;li&gt;拷贝其中的theme.xml文件到你的可见文件系统当中，如mmc卡上，cp theme.xml /media/mmc1/temp/theme.xml；&lt;/li&gt;&lt;li&gt;运行fc-list命令，查看你想要使用的字体的名字，如"Microsoft Yahei,微软雅黑"，复制下来，便于下文的修改；&lt;br /&gt;&lt;/li&gt;&lt;li&gt;在770里，利用文本编辑工具打开这个theme.xml文件，找到这行：&lt;blockquote&gt;&lt;div class="hl-main"&gt;&lt;span style="color: Olive;"&gt;&lt;&lt;/span&gt;&lt;span style="color: Green;"&gt;font&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 139);"&gt;id&lt;/span&gt;&lt;span style="color: Gray;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Red;"&gt;osso-TitleFont&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 139);"&gt;def&lt;/span&gt;&lt;span style="color: Gray;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Red;"&gt;Nokia Sans-17.85&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: Olive;"&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: Olive;"&gt;&lt;span style="color:#000000;"&gt;            将其替换为：&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;div class="hl-surround"&gt;&lt;div class="hl-main"&gt;&lt;span style="color: Olive;"&gt;&lt;&lt;/span&gt;&lt;span style="color: Green;"&gt;font&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 139);"&gt;id&lt;/span&gt;&lt;span style="color: Gray;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Red;"&gt;osso-TitleFont&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 139);"&gt;def&lt;/span&gt;&lt;span style="color: Gray;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;Microsoft Yahei,微软雅黑&lt;span style="color: Red;"&gt;-17.85:18px|Nokia Sans-17.85&lt;/span&gt;&lt;span style="color: rgb(139, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: Gray;"&gt; &lt;/span&gt;&lt;span style="color: Olive;"&gt;/&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;ol start="7"&gt;&lt;li&gt;保存后，重新在xterm里将此文件覆盖回原来位置；&lt;/li&gt;&lt;li&gt;使用你刚刚修改过的theme，就可以解决title栏里的中文问题了。（如果不行，或许你需要重启一次）&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;续：后来发现，已经有更简单的方法可以代替这些繁琐的工序了，详见后文。&lt;br /&gt;&lt;span style="color: Olive;"&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-8165079805058163304?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/8165079805058163304/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=8165079805058163304' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8165079805058163304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8165079805058163304'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/08/nokia7701.html' title='Nokia770把玩笔记(1)'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-3517554333416339555</id><published>2007-04-02T23:37:00.001+08:00</published><updated>2007-04-04T13:31:24.290+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jetty'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>JettyLaucher是个好东西</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://jettylauncher.sourceforge.net/"&gt;JettyLaucher&lt;/a&gt;是一个可以把Jetty嵌入Eclipse做快速测试与调试的插件。使用一个多月以来，越来越喜爱，真是称心的工具呀。&lt;br /&gt;&lt;br /&gt;使用很简单，用Eclipse的安装工具即可用 http://jettylauncher.sourceforge.net/updates 查找到插件并安装。之后在Run中就能找到Jetty Web的项目，填入一些必备信息，再把jdk/lib/tools.jar加入到类路径中。之后只要一Run，就立即启动了Jetty，非常方便。还可以Debug启动它，支持断点调试。&lt;br /&gt;&lt;br /&gt;当然，之前你要先装一个&lt;a href="http://www.mortbay.org/"&gt;Jetty&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-3517554333416339555?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/3517554333416339555/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=3517554333416339555' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3517554333416339555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3517554333416339555'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/04/jettylaucher.html' title='JettyLaucher是个好东西'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-1895216827241809133</id><published>2007-03-23T15:13:00.000+08:00</published><updated>2007-03-28T19:09:02.078+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python编码规范 (beta)</title><content type='html'>&lt;ul&gt; &lt;li&gt;4个空格一个缩进层次.&lt;/li&gt; &lt;li&gt;行限制在最大79字符&lt;/li&gt; &lt;li&gt;UTF-8文件编码&lt;/li&gt; &lt;li&gt;在二元运算符两边放置一个空格：赋值(=), 比较（＝＝, &lt;, &gt;, !=, &lt;&gt;, &lt;=,&gt;=, in, not in, is, is not）, 布尔运算 (and, or, not)&lt;/li&gt; &lt;li&gt;不要在用于指定关键字参数或默认参数值的'='号周围使用空格&lt;/li&gt; &lt;li&gt;不要将多条语句写在同一行上&lt;/li&gt; &lt;li&gt;&lt;u&gt;注释块&lt;/u&gt;（Block Comments）通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次. 注释块中每行 以 '#'和一个空格开始(除非他是注释内的缩进文本). 注释块内的段落以仅含单个'#'的行分割. 注释块上下方最好有一空行包围( 或上方 两行下方一行,对一个新函数定义段的注释).&lt;/li&gt; &lt;li&gt;一个&lt;u&gt;行内注释&lt;/u&gt;（Inline Comments）是和语句在同一行的注释.行内注释应该谨慎适用. 行内注释应该至少用两个空格 和语 句分开. 它们应该以'#'和单个空格开始.&lt;/li&gt; &lt;li&gt;为所有公共模块,函数,类和方法编写文档字符串.&lt;/li&gt; &lt;li&gt;多行文档字符串结尾的""" 应该单独成行&lt;/li&gt; &lt;li&gt;对于CVS的服务器工作标记应该在代码段中明确出它的使用，如：在文档的最开始的版权声明后应加入如下版本标记：&lt;/li&gt;   &lt;pre&gt;   &lt;blockquote&gt;     __version__ = "$Revision: 1.4 $"&lt;br /&gt;    # $Source: E:/cvsroot/python_doc/pep8.txt,v $   &lt;/blockquote&gt; 或   &lt;blockquote&gt;     # 文件：$id$ # 版本： $Revision$   &lt;/blockquote&gt; &lt;/pre&gt; &lt;li&gt;永远不要用字符‘l’,‘O’(大写字母oh),或‘I’(大写字母eye)作为单字符的变量名.&lt;/li&gt; &lt;li&gt;模块应该是不含下划线的,简短的,小写的名字.&lt;/li&gt; &lt;li&gt;类名总是使用首字母大写单词串(CapWords)的约定.&lt;/li&gt; &lt;li&gt;倾向使用首字母大写单词串(CapWords)作为异常名.&lt;/li&gt; &lt;li&gt;函数名应该为小写,可能用下划线风格单词以增加可读性.&lt;/li&gt; &lt;li&gt;方法名和实例变量名通常使用小写单词,必要时用下划线分隔增加可读性. 使用两个前导下划线以表示类私有的名字.&lt;/li&gt; &lt;li&gt;始终要确定一个类中的方法和实例变量是否要被公开,私有与非公有的区别在于: 前者永远不会被用在一个派生类中,而后者可 能 会.&lt;/li&gt; &lt;li&gt;同象None之类的单值进行比较,应该永远用:'is'或'is not'来做.&lt;/li&gt; &lt;li&gt;基于类的异常总是好过基于字符串的异常. 模块和包应该定义它们自己的域内特定的基异常类(base exception class), 基类 应 该是内建的Exception类的子类. 还始终包含一个类的文档字符串.例如:&lt;/li&gt;    &lt;pre&gt;    &lt;blockquote&gt; class MessageError(Exception):   &lt;br /&gt;   """Base class for errors in the email package."""    &lt;/blockquote&gt; &lt;/pre&gt; &lt;li&gt;在检查前缀或后缀时避免对字符串进行切片,用startswith()和endswith()代替.&lt;/li&gt; &lt;li&gt;对象类型的比较应该始终用isinstance()代替直接比较类型.例如:&lt;/li&gt;   &lt;pre&gt;   &lt;blockquote&gt; No:  if type(obj) is type(1):&lt;br /&gt;Yes: if isinstance(obj, int): &lt;/blockquote&gt; &lt;/pre&gt;&lt;li&gt;对序列,(字符串(strings),列表(lists),元组(tuples)), 使用空列表是false这个事实,因此"if not seq"或"if seq"比 "if len(seq)"或"if not len(seq)"好.&lt;/li&gt; &lt;li&gt;不要用 ＝＝ 来比较布尔型的值以确定是True或False&lt;/li&gt; &lt;pre&gt;   &lt;blockquote&gt; No:  if greeting ＝＝&lt;br /&gt;True: Yes: if greeting: &lt;/blockquote&gt; &lt;/pre&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-1895216827241809133?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/1895216827241809133/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=1895216827241809133' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1895216827241809133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1895216827241809133'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/python-beta.html' title='Python编码规范 (beta)'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-2020475159252466528</id><published>2007-03-19T14:20:00.001+08:00</published><updated>2007-03-19T14:23:21.081+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>[旧文]安装Maven</title><content type='html'>windows XP下的安装：&lt;br /&gt;&lt;br /&gt;1.下载Maven(&lt;a href="http://maven.apache.org/start/download.html"&gt;http://maven.apache.org/start/download.html&lt;/a&gt;)。&lt;br /&gt;&lt;br /&gt;2.双击exe安装文件，指定目录安装。所指定的目录路径请不要有中文，也请尽量避免空格；（我曾经遇到因为空格导致设置不成功的倒霉事儿）&lt;br /&gt;&lt;br /&gt;3.检查环境变量。命令行下输入echo %maven_home%，输出的地址应该是指向Maven安装目录的地址，此目录下应该直接可以看到/bin/、/lib、/plugins三个目录以及其他文件等。如果没有输入安装目录的地址，请用命令set maven_home=...设置。同时，你也需要在Path变量中加入指向%MAVEN_HOME%/bin的地址；&lt;br /&gt;&lt;br /&gt;4.下面的步骤可选，且可能只对2000以上系统有效：在命令行下输入命令%MAVEN_HOME%\bin\install_repo.bat %HOME%\.maven\repository(注意：%HOME%地址指的是你的用户在系统盘的主目录，例如我的就是C:\Documents and Settings\monkito)。此语句会创建本地依赖库。如果跳过此步骤也没有关系，Maven会通过下载来代替从lib目录复制依赖库；&lt;br /&gt;&lt;br /&gt;5.重启系统后，你的Maven就可以正常使用了。你可以通过在命令行中输入maven -v命令来验证是否安装正确。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-2020475159252466528?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/2020475159252466528/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=2020475159252466528' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/2020475159252466528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/2020475159252466528'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/maven.html' title='[旧文]安装Maven'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-2055822396413342861</id><published>2007-03-19T14:02:00.000+08:00</published><updated>2007-03-19T14:20:57.185+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pluto'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><title type='text'>[旧文]Pluto手记</title><content type='html'>&lt;p&gt;Pluto 是 Apache开发下的一个Open Source项目(&lt;a target="_blank" href="http://portals.apache.org/pluto/"&gt;http://portals.apache.org/pluto/&lt;/a&gt;)， 是基于Portlet Specs的一个 Portlet Container 的实现。(关于Portal，请参考&lt;a href="http://www.zmaze.org/drupal/?q=node/view/88"&gt;《Portal》&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;目前Pluto处于开发阶段，尚未有发布版本面世。为了取得Pluto，我们必须从apache的CVS树上把此项目的开发版本checkout下来。&lt;/p&gt; &lt;h4&gt;用Eclipse3.0取得Pluto&lt;/h4&gt; &lt;p&gt;打开Eclipse，3.0版本自带有CVS的支持。我们只需在Window &gt; Customize Perspective…中把CVS相关的ShortCut、Commands勾选上即可。然后点击面板上的“Check from CVS”按钮，在打开的窗口中输入apache树的信息：&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Host：&lt;cite&gt;cvs.apache.org&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;Repository Path：&lt;cite&gt;/home/cvspublic&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;User：&lt;cite&gt;anoncvs&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;Password：&lt;cite&gt;anoncvs&lt;/cite&gt;&lt;/li&gt;&lt;li&gt;Connection Type：&lt;cite&gt;pserver&lt;/cite&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;点击Next，在“Select Module”窗口中指定module name：jakarta-pluto，点击Next，便可以从CVS树上取得最新的Pluto开发版本。默认的下载地址在你的Eclipse workspace目录下。&lt;/p&gt; &lt;p&gt;Pluto是利用Apache的另一个项目管理工具Maven(&lt;a href="http://maven.apache.org/"&gt;http://maven.apache.org/&lt;/a&gt;)来做项目管理的，所以在部署Pluto的时候，我们需要借助Maven。( Maven 1.0-beta-10 or higher )&lt;/p&gt; &lt;h4&gt;安装Maven&lt;/h4&gt; &lt;p&gt;此部分可参考&lt;a target="_blank" href="http://qingjiao.blogspot.com/2007/03/maven.html"&gt;《Maven手记》&lt;/a&gt;，此处略。&lt;/p&gt; &lt;h4&gt;部署Pluto&lt;/h4&gt; &lt;p&gt;首先，我们需要修改Pluto根目录下的build.properties.sample文件，并将其重命名为build.properties： 指定 maven.tomcat.home到你的要部署Pluto的Tomcat安装目录。注意，目录路径中的"\"须换为"/"方可正常工作。&lt;br /&gt;修改Pluto根目录下的project.properties文件，添加参数&lt;cite&gt;maven.repo.remote=http://public.planetmirror.com/pub/maven,&lt;br /&gt;http://mirrors.sunsite.dk/maven/,http://www.ganet.org/maven/&lt;/cite&gt;，这三个url地址用来从远程下载需要的依赖包，默认的http://www.ibiblio.org/maven地址总是不太灵光。&lt;br /&gt;在Pluto根目录下执行&lt;cite&gt;maven fullDeployment&lt;/cite&gt;，Maven 便会自动开始部署Pluto，如有本地没有的包，Maven会自动从远程库中下载。(注意：如果部署过程中下载依赖包出错，请在%HOME%\. maven\repository中找到下载不成功的包并删除，之后再重新执行Maven命令，否则会在部署过程中出现找不到包的错误提示。)&lt;br /&gt;如果部署顺利完成，我们就可以启动Tomcat了，在浏览器中输入地址http://localhost:8080/pluto/portal就可以看到Pluto的test unit界面了。&lt;/p&gt; &lt;h4&gt;参考资料&lt;/h4&gt; &lt;p&gt;Pluto&lt;br /&gt;&lt;a target="_blank" href="http://portals.apache.org/pluto/"&gt;http://portals.apache.org/pluto/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Maven&lt;br /&gt;  &lt;a href="http://maven.apache.org/"&gt;http://maven.apache.org/&lt;/a&gt;&lt;br /&gt;  &lt;a href="http://maven.huangdong.com/"&gt;http://maven.huangdong.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="astitle"&gt;项目管理：&lt;/span&gt;&lt;span class="atitle"&gt;Maven 让事情变得简单&lt;/span&gt;&lt;br /&gt;  &lt;a href="http://www-900.ibm.com/developerWorks/cn/java/j-maven/"&gt;http://www-900.ibm.com/developerWorks/cn/java/j-maven/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-2055822396413342861?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/2055822396413342861/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=2055822396413342861' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/2055822396413342861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/2055822396413342861'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/pluto.html' title='[旧文]Pluto手记'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-6972416775778746128</id><published>2007-03-19T14:01:00.000+08:00</published><updated>2007-03-19T14:02:00.530+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Partal'/><title type='text'>[旧文]关于Partal</title><content type='html'>&lt;p&gt;什么是Portal？Portal就是门户。&lt;/p&gt; &lt;p&gt;Portal包括：&lt;br /&gt;(1) Portal Server。『Portal Server是基于WEB的应用程序, 它将不同资源进行整合并展现给用户。有些文章直接把Portal Server叫做Portal，请注意。』&lt;br /&gt;(2) Portlet Container。『Portlet Container用来管理Portlet的生命周期并且提供其运行所需要的必要环境. 并且为Portlet Preferences提供持久性(Persistent)存取服务.但是其不支持内容的Aggregation. Aggregation由Portal组件提供.』&lt;br /&gt;(3) Portlet。『Portlet 是以 Java 技术为技术的 web 组件，可以被容器管理，可以产生动态内容。处理请求并动态返回页面, 可以做为Portal 的可拔插的用户界面组件.』&lt;/p&gt; &lt;p&gt;我们需要Portal的目的就是要做到系统功能与模块的可配置。同时要开源并符合标准。能与其他的系统进行结合比如Struts。&lt;/p&gt; &lt;p&gt;基于这个目标，我们来寻找可用的Portal。&lt;/p&gt; &lt;p&gt;说Portal，就不能不提JSR#168 Portlet。&lt;/p&gt; &lt;p&gt;JSR 是由 JCP ( www.jcp.org ) 这个 Java 组织所定义出来的规范。JSR#168规范就是一个关于Portlet的规范 ——Portlet Spec 1.0 。这个规范推出于去年的10月底。既然有了规范，理所当然的之后的产品就应该按照这个规范来制作。&lt;/p&gt; &lt;p&gt;目前比较主流的Portal产品：&lt;br /&gt;Apache Jetspeed（http://jakarta.apache.org/jetspeed/）&lt;br /&gt;Liferay（http://www.liferay.com）&lt;br /&gt;EXOportal（http://cvs.sf.net/viewcvs.py/exo/ExoPortal/）&lt;br /&gt;Pluto（http://jakarta.apache.org/pluto）&lt;br /&gt;BEA WebLogic Portal （http://edocs.bea.com/wlp/docs81/javadoc/com/bea/portal/model/Portlet.html ）&lt;br /&gt;IBM Websphere Portal （http://www.software.ibm.com/wsdd/zones/portal/ ）&lt;br /&gt;Oracle Portal Developer Kit （http://portalstudio.oracle.com/）&lt;br /&gt;jfoxportal（http://www.huihoo.org/jfox/jfoxportal/index.html  刚提出草案，不过是国内的。）&lt;/p&gt; &lt;p&gt;Jetspeed是Apache的一个开源项目，现在的最高版本是1.4。WebSphere的Portal就是基于这个系统开发的，但显然二次修改的力度很大。也是应用相对比较多的系统。&lt;br /&gt;但问题是，Jetspeed1.x开发时，标准并没有出台，于是Jetspeed里有很多自己定义的规范，而这些规范显然是应该被废除的。于是这个项目在1.4之后就停止了开发，转而开发支持JSR#168标准的2.0版本。但这个版本的出台目前还遥遥无期。&lt;/p&gt; &lt;p&gt;Apache在JSR#168推出以后，又有了一个新的Portal项目，便是Pluto。Pluto 一个Open Source项目, 是基于Portlet Specs的一个 Portlet Container 的实现. 它也提供了Sample Portal实现.但是功能相对简单。目前开发中。据说从CVS树上下载的版本已经有了安装程序，运行还算正常。但从官方网站来看，还没有推出Alpha 版的征兆。倒是Eclipse好像有了Pluto的插件。有文章专门强调：“请记住Pluto只是一个Portlet Container的实现, 不是一个Portal的实现. 如果你需要功能更为强大的Portal,可以使用JetSpeed , 它同样也是Apache的一个Open Source Project. ”有人预言Jetspeed2.0就会基于Pluto来研发。&lt;/p&gt; &lt;p&gt;Liferay 代表了完整的J2EE应用，使用了Web、EJB以及JMS等技术，特别是其前台界面部分使用Struts 框架技术，基于XML的portlet配置文件可以自由地动态扩展，使用了Web Services来支持一些远程信息的获取，使用 Apahce Lucene实现全文检索功能。 但Liferay的缺点是它缺乏一个简单清晰可拓展的架构设计，portlet设计显得比较凌乱，进行二次开发有一定的难度。这一点我觉得是个比较致命的 弱点，但是有多严重？没有开发，没有发言权。而且这个Based on Jboss。&lt;/p&gt; &lt;p&gt;EXOportal同样Based on Jboss。国内谈论的很少。居然没有找到他们的官方网站，只有一个CVS树。&lt;/p&gt; &lt;p&gt;剩下的，都是商业软件了。&lt;/p&gt; &lt;p&gt;个人觉得BEA WebLogic Portal是做的最好的。我们为什么不能在这上面开发，然后客户有需求的时候直接说服客户让他们买一套Weblogic Portal8.1呢？  哈哈，还可以赚个软件钱。我觉得对于政府、大型企业等完全可以。&lt;br /&gt;至 于开源的选择，我个人倾向于Pluto，但Pluto和Struts的整合到底可以到一个什么程度，不好说。Pluto里头部署就是用Portlet了。 Jetspeed1.4本身与Struts的兼容是有问题的，“因为二者都是前端控制器模式，每个请求最开始都被映射到一个servlet，你如果要让门 户管理起struts应用，那jetspeed的映射应该在最前面，在之后的话你又要想办法把jetspeed中的请求转换到struts，这可能有很多 障碍。 ”&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-6972416775778746128?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/6972416775778746128/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=6972416775778746128' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/6972416775778746128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/6972416775778746128'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/partal.html' title='[旧文]关于Partal'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-3931574073461921303</id><published>2007-03-16T02:01:00.001+08:00</published><updated>2007-03-16T02:11:46.695+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='数据库'/><category scheme='http://www.blogger.com/atom/ns#' term='优化'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle Sql优化笔记</title><content type='html'>&lt;b&gt;基本的Sql编写注意事项&lt;/b&gt;&lt;ul&gt;&lt;li&gt;尽量少用IN操作符，基本上所有的IN操作符都可以用EXISTS代替。&lt;/li&gt;&lt;li&gt;不用NOT IN操作符，可以用NOT EXISTS或者外连接+替代。&lt;/li&gt;&lt;li&gt;Oracle 在执行IN子查询时，首先执行子查询，将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询，然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。但具体在选择IN或EXIST操作时，要根据主子表数据量大小来具体考虑。&lt;/li&gt;&lt;li&gt;不用“&lt;&gt;”或者“!=”操作符。对不等于操作符的处理会造成全表扫描，可以用“&lt;” or “&gt;”代替。&lt;/li&gt;&lt;li&gt;Where子句中出现IS NULL或者IS NOT NULL时，Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时，对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作。&lt;/li&gt;&lt;li&gt;当通配符“%”或者“_”作为查询字符串的第一个字符时，索引不会被使用。&lt;/li&gt;&lt;li&gt;对于有连接的列“||”，最后一个连接列索引会无效。尽量避免连接，可以分开连接或者使用不作用在列上的函数替代。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;如果索引不是基于函数的，那么当在Where子句中对索引列使用函数时，索引不再起作用。&lt;/li&gt;&lt;li&gt;Where子句中避免在索引列上使用计算，否则将导致索引失效而进行全表扫描。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;对数据类型不同的列进行比较时，会使索引失效。&lt;/li&gt;&lt;li&gt;用“&gt;=”替代“》”。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UNION操作符会对结果进行筛选，消除重复，数据量大的情况下可能会引起磁盘排序。如果不需要删除重复记录，应该使用UNION ALL。&lt;/li&gt;&lt;li&gt;Oracle从下到上处理Where子句中多个查询条件，所以表连接语句应写在其他Where条件前，可以过滤掉最大数量记录的条件必须写在Where子句的末尾。&lt;/li&gt;&lt;li&gt;Oracle从右到左处理From子句中的表名，所以在From子句中包含多个表的情况下，将记录最少的表放在最后。（只在采用RBO优化时有效，下文详述）&lt;/li&gt;&lt;li&gt;Order By语句中的非索引列会降低性能，可以通过添加索引的方式处理。严格控制在Order By语句中使用表达式。&lt;/li&gt;&lt;li&gt;不同区域出现的相同的Sql语句，要保证查询字符完全相同，以利用SGA共享池，防止相同的Sql语句被多次分析。&lt;/li&gt;&lt;li&gt;多利用内部函数提高Sql效率。&lt;/li&gt;&lt;li&gt;当在Sql语句中连接多个表时，使用表的别名，并将之作为每列的前缀。这样可以减少解析时间。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;需要注意的是，随着Oracle的升级，查询优化器会自动对Sql语句进行优化，某些限制可能在新版本的Oracle下不再是问题。尤其是采用CBO（Cost-Based Optimization，基于代价的优化方式）时。&lt;br /&gt;&lt;br /&gt;我们可以总结一下可能引起全表扫描的操作：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在索引列上使用NOT或者“&lt;&gt;”;&lt;/li&gt;&lt;li&gt;对索引列使用函数或者计算；&lt;/li&gt;&lt;li&gt;NOT IN操作；&lt;/li&gt;&lt;li&gt;通配符位于查询字符串的第一个字符；&lt;/li&gt;&lt;li&gt;IS NULL或者IS NOT NULL；&lt;/li&gt;&lt;li&gt;多列索引，但它的第一个列并没有被Where子句引用；&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Oracle优化器&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Oracle优化器（Optimizer）是Oracle在执行SQL之前分析语句的工具。&lt;br /&gt;Oracle的优化器有两种优化方式：基于规则的（RBO）和基于代价的（CBO）。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;RBO：&lt;/i&gt;优化器遵循Oracle内部预定的规则。&lt;/li&gt;&lt;li&gt;&lt;i&gt;CBO：&lt;/i&gt;依据语句执行的代价，主要指对CPU和内存的占用。优化器在判断是否使用CBO时，要参照表和索引的统计信息。统计信息要在对表做analyze后才会有。Oracle8及以后版本，推荐用CBO方式。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Oracle优化器的优化模式主要有四种：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rule：基于规则；&lt;/li&gt;&lt;li&gt;Choose：默认模式。根据表或索引的统计信息，如果有统计信息，则使用CBO方式；如果没有统计信息，相应列有索引，则使用RBO方式。&lt;/li&gt;&lt;li&gt;First rows：与Choose类似。不同的是如果表有统计信息，它将以最快的方式返回查询的前几行，以获得最佳响应时间。&lt;/li&gt;&lt;li&gt;All rows：即完全基于Cost的模式。当一个表有统计信息时，以最快方式返回表所有行，以获得最大吞吐量。没有统计信息则使用RBO方式。&lt;/li&gt;&lt;/ul&gt;设定优化模式的方式&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Instance级别：在init&lt;sid&gt;.ora&lt;sid&gt;文件中设定OPTIMIZER_MODE；&lt;/sid&gt;&lt;/li&gt;&lt;li&gt;Session级别：通过SQL&gt; ALTER SESSION SET OPTIMIZER_MODE=;来设定。&lt;/li&gt;&lt;li&gt;语句级别：通过SQL&gt; SELECT /*+ALL+_ROWS*/ ……;来设定。可用的HINT包括/*+ALL_ROWS*/、/*+FIRST_ROWS*/、/*+CHOOSE*/、/*+RULE*/ 等。&lt;/li&gt;&lt;/ul&gt;要注意的是，如果表有统计信息，则可能造成语句不走索引的结果。可以用SQL&gt;ANALYZE TABLE table_name DELETE STATISTICS; 删除索引。&lt;br /&gt;对列和索引更新统计信息的SQL：&lt;br /&gt;SQL&gt; ANALYZE TABLE table_name COMPUTE STATISTICS;&lt;br /&gt;SQL&gt; ANALYZE INDEX index_name ESTIMATE STATISTICS;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-3931574073461921303?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/3931574073461921303/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=3931574073461921303' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3931574073461921303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3931574073461921303'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/oracle-sql.html' title='Oracle Sql优化笔记'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-3067842961198572349</id><published>2007-03-15T01:09:00.000+08:00</published><updated>2007-03-15T01:32:40.263+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='优化'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Tomcat性能优化笔记</title><content type='html'>Tomcat性能优化可从外部环境和自身调整两方面着手。&lt;br /&gt;外部环境主要是Tomcat所在服务器的运行环境，包括操作系统层面、部署以及Java虚拟机的配置。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;操作系统&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;这里不再赘述，跟优化其他服务器的思路与步骤没有本质区别。尽可能的增大可使用的内存容量、提高CPU的频率、保证文件系统的读写速率等等。对于可能发生很大并发连接的情况，可能需要修改内核参数来设置最大连接数。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Java虚拟机&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Sun的JVM应该是多数情况下的第一选择。在满足项目要求的前提下可以选用版本较高的JVM版本，一般来说高版本产品在速度和效率上比低版本会有改进。&lt;br /&gt;由 于Jvm系统垃圾收集机制的存在，在高负载情况下如果能根据系统的具体要求有效的调整最优化堆的大小，也可以起到一定优化作用。如果堆设置较大，则GC次 数变少，但每次花费较长时间，从而导致系统处理能力抖动较大；如果堆设置较小，则GC变得频繁，虽然对系统性能影响较小，但频繁的GC也会耗费系统资源。&lt;br /&gt;JVM动态库有Server和Client两个版本，虽然差别不是很大，但生产环境还是推荐使用Server版本。&lt;br /&gt;初此之外，主要的JVM还包括&lt;a href="http://www.bea.com.cn/products/beawebjro81/index.jsp"&gt;BEA JRockit&lt;/a&gt;，&lt;a href="http://www-128.ibm.com/developerworks/java/jdk/"&gt;IBM JVM&lt;/a&gt;，&lt;a href="http://jikesrvm.sourceforge.net/"&gt;Jikes RVM&lt;/a&gt;，&lt;a href="http://www.kaffe.org/"&gt;Kaffe&lt;/a&gt;等。可以根据项目的中间件产品选择对应厂商的JVM来获取有针对性的性能优化。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tomcat自身的调整策略&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;启动参数&lt;/li&gt;Tomcat默认可以使用的内存是128MB。可以通过在启动时加入“-Xms”和“-Xmx”参数来获得更大的内存分配。但也要注意GC的问题。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;负载均衡&lt;/li&gt;比较复杂，有机会另文详述。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;集成Web服务器处理静态内容&lt;/li&gt;作 为一个Jsp/Servlet容器，Tomcat本身对静态Html文件的相应速度远逊Apache等Web服务器。通过与此类Web服务器的集成，可以 将对jsp内容的请求转发至Tomcat，而用Web服务器处理静态内容，能够非常显著的降低整体负载，提高整体响应的速度。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;调整线程数&lt;/li&gt;Tomcat5使用线程池（&lt;a href="http://apr.apache.org/"&gt;Apache Portable Runtime&lt;/a&gt;）来加速响应速度。默认创建5个线程，最大 线程数是200.如果并发较大，则可以对以下几个参数进行具体的调整：&lt;br /&gt;&lt;i&gt;maxThreads：&lt;/i&gt;Tomcat可创建的最大线程数；&lt;br /&gt;&lt;i&gt;acceptCount：&lt;/i&gt;如果当前可用线程数为0，则将请求放入处理队列中。这个值限定了请求队列的大小，超过这个数值的请求将不予处理。&lt;br /&gt;&lt;i&gt;connectionTimeout：&lt;/i&gt;网络连接超时数，单位毫秒。&lt;br /&gt;&lt;i&gt;minSpareThreads：&lt;/i&gt;如果当前没有空闲线程，且没有超过maxThreads，一次性创建的空闲线程数量。Tomcat初始化时创建的线程数量也由此值设置。&lt;br /&gt;&lt;i&gt;maxSpareThreads：&lt;/i&gt;一旦创建的线程超过此数值，Tomcat会关闭不再需要的线程。&lt;br /&gt;线程数可以大致上用 “同时在线人数*每秒用户操作次数*系统平均操作时间” 来计算。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;使用Jikes&lt;/li&gt;&lt;a href="http://jikes.sourceforge.net/"&gt;Jikes&lt;/a&gt;是性能优良的Java编译器，在jsp容器中使用Jikes替代Sun的编译器能够有效提高jsp文件的编译速度。对于Tomcat 5.5，可以参考&lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Using%20Jikes"&gt;Jasper-Howto&lt;/a&gt;。要注意的是Windows版本的Jikes是不支持-encoding选项的，你需要自己编译。可以参考&lt;a href="http://www.javaeye.com/topic/776"&gt;这里&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;用Ant进行预编译&lt;/li&gt;Tomcat官方推荐的部署方式是使用Ant对jsp进行预编译。直接在部署时将jsp编译为servlet类，能够在运行初期时显著提高响应速度。&lt;br /&gt;&lt;/ul&gt;可能还有其他遗漏，另文补充。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-3067842961198572349?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/3067842961198572349/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=3067842961198572349' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3067842961198572349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3067842961198572349'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/tomcat.html' title='Tomcat性能优化笔记'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-7474130442583792241</id><published>2007-03-14T01:00:00.000+08:00</published><updated>2007-03-14T01:03:31.244+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='笔记'/><category scheme='http://www.blogger.com/atom/ns#' term='ECS'/><category scheme='http://www.blogger.com/atom/ns#' term='SnapAmazon'/><title type='text'>Amazon E-Commerce Service笔记 Part III</title><content type='html'>当SearchIndex=VideoGames时，以下查询参数是有效的：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Brand：&lt;/span&gt;品牌；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;BrowseNode：&lt;/span&gt;产品类别；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Condition：&lt;/span&gt;新旧状况；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;DeliveryMethod&lt;/span&gt;；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;ISPUPostalCode&lt;/span&gt;；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;ItemPage：&lt;/span&gt;制定返回结果集的页数；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Keywords：&lt;/span&gt;关键词；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Manufactures：&lt;/span&gt;厂商；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;MaximumPrice：&lt;/span&gt;最高价格；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;MerchantId：&lt;/span&gt;店主id，不指定时即为Amazon；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;MinimumPrice：&lt;/span&gt;最低价格；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Sort：&lt;/span&gt;排序；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;State：&lt;/span&gt;所在州；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;TextStream：&lt;/span&gt;文本；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Title：&lt;/span&gt;产品名称。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;内容缓存：&lt;br /&gt;&lt;br /&gt;为了保证系统性能能够满足所有人的需求，Amazon ECS服务限制了客户端发送请求的频度。每个ip地址最多每秒钟只能发送一个请求。如果你的应用在很短的时间内发送大量请求，则会导致整个的性能下降，特别是Amazon的服务器特别繁忙的时候。如此以来，缓存就成为AWS-based的应用非常重要的一部分。&lt;br /&gt;例如我们做一个REST请求，可以用HashMap类来做一个简单的缓存，利用请求的URL地址做键。每一个成功的请求后，将返回的数据放入cache中。&lt;br /&gt;要注意的是Amazon限制了数据缓存的时间。根据许可声明，多数数据都不允许缓存超过24小时，除了某些静态信息——例如作者姓名、产品名称、发售日期——是可以存储最多三个月的时间的。价格和供货信息能被缓存一周，但如果不是每小时刷新一次的话，则必须在显示的时候加上一个时间说明。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-7474130442583792241?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/7474130442583792241/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=7474130442583792241' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/7474130442583792241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/7474130442583792241'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/amazon-e-commerce-service-part-iii.html' title='Amazon E-Commerce Service笔记 Part III'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-1626985651660725307</id><published>2007-03-13T12:19:00.000+08:00</published><updated>2007-03-13T12:21:23.047+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='敏捷开发'/><category scheme='http://www.blogger.com/atom/ns#' term='极限编程'/><title type='text'>敏捷软件开发</title><content type='html'>敏捷软件开发的十二条原则：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;利用持续交付来使客户满意；&lt;/li&gt;&lt;li&gt;无论何时都欢迎需求的变更；&lt;/li&gt;&lt;li&gt;将交付变成一项经常性的工作，交付的间隔越短越好；&lt;/li&gt;&lt;li&gt;业务人员与开发人员必须始终一起工作；&lt;/li&gt;&lt;li&gt;围绕个人来构建项目；&lt;/li&gt;&lt;li&gt;鼓励利用面对面的交谈来传递信息；&lt;/li&gt;&lt;li&gt;能软件的软件是首要的进度度量标准；&lt;/li&gt;&lt;li&gt;敏捷过程提倡可持续的开发速度；&lt;/li&gt;&lt;li&gt;不断关注好的技能和设计；&lt;/li&gt;&lt;li&gt;简单是最根本的；&lt;/li&gt;&lt;li&gt;自组织的团队最有效率；&lt;/li&gt;&lt;li&gt;团队要不断的进行反省和调整。&lt;/li&gt;&lt;/ol&gt;敏捷开发的要素是&lt;b&gt;以人为为核心&lt;/b&gt;、&lt;b&gt;迭代&lt;/b&gt;、&lt;b&gt;循序渐进&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;极限编程要素：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;客户作为团队成员；&lt;/li&gt;&lt;li&gt;只掌握能够估算的需求；&lt;/li&gt;&lt;li&gt;短交付周期：&lt;/li&gt;&lt;ol&gt;&lt;li&gt;   制定迭代计划&lt;/li&gt;&lt;li&gt;   发布随后约6次迭代的计划&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;验收测试；&lt;/li&gt;&lt;li&gt;结对编程；&lt;/li&gt;&lt;li&gt;测试驱动；&lt;/li&gt;&lt;li&gt;代码的集体所有权；&lt;/li&gt;&lt;li&gt;持续集成；&lt;/li&gt;&lt;li&gt;可持续的开发速度；&lt;/li&gt;&lt;li&gt;开放的工作空间；&lt;/li&gt;&lt;li&gt;计划；&lt;/li&gt;&lt;li&gt;简单的设计；&lt;/li&gt;&lt;li&gt;重构。&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-1626985651660725307?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/1626985651660725307/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=1626985651660725307' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1626985651660725307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1626985651660725307'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/blog-post_12.html' title='敏捷软件开发'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-8511126841936839579</id><published>2007-03-07T19:40:00.000+08:00</published><updated>2007-03-07T19:44:44.641+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><category scheme='http://www.blogger.com/atom/ns#' term='Geplex'/><title type='text'>设想中的游戏评论网站</title><content type='html'>其实很简单，就是一个TV Game的评论网站以及在此基础上的SNS平台。&lt;br /&gt;&lt;br /&gt;大概的框架仍然用Webwork2、Spring、Hibernate，未来可能采用Python的web框架重构。&lt;br /&gt;&lt;br /&gt;有好多游戏，我们玩过、钟爱过，可是随着时间的流逝往往最神奇的体验都留在了记忆中，那么，通过这个网站，或许能让你找到一些美妙的心情。那些在FC/SFC/MD/3DO……上留下的痕迹，在这里会找到共鸣并放大么？&lt;br /&gt;&lt;br /&gt;试试吧。开始！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-8511126841936839579?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/8511126841936839579/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=8511126841936839579' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8511126841936839579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8511126841936839579'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/blog-post.html' title='设想中的游戏评论网站'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-9059524648484754686</id><published>2007-03-07T19:37:00.000+08:00</published><updated>2007-03-14T01:03:05.347+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='笔记'/><category scheme='http://www.blogger.com/atom/ns#' term='ECS'/><category scheme='http://www.blogger.com/atom/ns#' term='SnapAmazon'/><title type='text'>Amazon E-Commerce Service笔记 Part II</title><content type='html'>利用ECS帮助信息，需要的参数有：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Operation：&lt;/span&gt;=Help&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;HelpType：&lt;/span&gt;=Operation 或者 =ResponseGroup&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;About：&lt;/span&gt;想要查询的Operation或者ResponseGroup的名字&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;利用批量查询和多操作查询可以将多个操作融入单一查询中。（*目前批量查询和多操作查询的数量限制是2）&lt;br /&gt;&lt;br /&gt;REST Batch Requests查询的特殊参数：&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Operation.1.Parameter：&lt;/span&gt;为第一个查询设定参数，如ItemSearch.1.Keywords；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Operation.2.Parameter：&lt;/span&gt;为第二个查询设定参数，如SellerLookup.2.SellerId；&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Operation.Shared.Parameter：&lt;/span&gt;设定两个查询的共用参数，如SellerLookup.Shared.ResponseGroup。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-9059524648484754686?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/9059524648484754686/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=9059524648484754686' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/9059524648484754686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/9059524648484754686'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/amazon-e-commerce-service-part-ii.html' title='Amazon E-Commerce Service笔记 Part II'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-7731941090009564805</id><published>2007-03-06T02:21:00.001+08:00</published><updated>2007-03-14T01:03:22.987+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='笔记'/><category scheme='http://www.blogger.com/atom/ns#' term='ECS'/><category scheme='http://www.blogger.com/atom/ns#' term='SnapAmazon'/><title type='text'>Amazon E-Commerce Service笔记 Part I</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;基本所有信息都来自于Amazon官方的Developer Guide。&lt;br /&gt;&lt;br /&gt;完成REST request的Base Url： http://ecs.amazonaws.com/onca/xml?Service=AWSEcommerceService&lt;br /&gt;&lt;br /&gt;对我的SnapAmazon应用来说，构建REST Request的必须参数有：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Service： &lt;/i&gt;指定ECS服务名称；&lt;/li&gt;&lt;li&gt;&lt;i&gt;AWSAccessKeyId： &lt;/i&gt;必须获取一个id来作为获取信息的资质；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Operation： &lt;/i&gt;指定操作方式；&lt;/li&gt;&lt;li&gt;&lt;i&gt;AssociateTag： &lt;/i&gt;可向Amazon申请一个Associate ID，以通过链接达成的交易来从亚马逊获取奖励分成；&lt;/li&gt;&lt;li&gt;&lt;i&gt;ResponseGroup： &lt;/i&gt;指定获取数据的内容和详尽程度(包含Request组可以在返回的文件中包含request参数)。&lt;/li&gt;&lt;/ul&gt;*调试时可用Validate=True来验证参数，如果发送的url参数有问题，返回一个值为False的IsValid参数，以及正常执行情况下会返回的错误信息。如果url参数正确，则会返回值为True的IsValid参数。&lt;br /&gt;&lt;br /&gt;从Amazon获取产品信息的主要操作有两种，&lt;b&gt;ItemSearch&lt;/b&gt;和&lt;b&gt;ItemLookup&lt;/b&gt;。前者利用关键字进行相关性产品搜索，后者用来查找某确知物品的信息。&lt;br /&gt;&lt;br /&gt;我的应用进行ItemSearch的主要参数包括：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Operation： &lt;/i&gt;=ItemSearch；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Keywords： &lt;/i&gt;关键词。ECS会从产品名称、作者、演员、描述等信息中进行匹配；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Title： &lt;/i&gt;按标题的部分或者全部内容进行匹配；&lt;/li&gt;&lt;li&gt;&lt;i&gt;BrowseNodes： &lt;/i&gt;产品种类；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Manufacturer： &lt;/i&gt;按厂商的部分或者全部名称进行匹配；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Brand： &lt;/i&gt;按品牌的全部或者部分名称进行匹配；&lt;/li&gt;&lt;li&gt;&lt;i&gt;ItemPage： &lt;/i&gt;对返回结果进行分页。每页10件，每次查询返回最多400页数据。&lt;/li&gt;&lt;/ul&gt;我的应用进行ItemLookup的主要参数包括：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Operation： &lt;/i&gt;=ItemLookup&lt;/li&gt;&lt;li&gt;&lt;i&gt;ItemId：&lt;/i&gt;产品的ASIN、SKU、UPC、ISBN、EAN编码。一次只能用一种编码，多个编码之间用逗号隔开；&lt;/li&gt;&lt;li&gt;&lt;i&gt;IdType：&lt;/i&gt;如果是SKU、UPC、EAN编码则必须制定此项；&lt;/li&gt;&lt;li&gt;&lt;i&gt;SearchIndex：&lt;/i&gt;如果制定了UPC编码或者EAN，则需此项制定产品所属类别；&lt;/li&gt;&lt;/ul&gt;*关于各种编码，可参考&lt;a href="http://zmaze.org/?p=192"&gt;http://zmaze.org/?p=192&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;作为通用参数之一，&lt;b&gt;ResponseGroup&lt;/b&gt;限定了&lt;b&gt;ItemSearch&lt;/b&gt;操作所返回数据的内容构成。默认的ResponseGroup包括了Request和Small两个数据组。部分重要的数据组分析如下：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Request：&lt;/i&gt;回显发送Request的参数；&lt;/li&gt;&lt;li&gt;&lt;i&gt;ItemIds：&lt;/i&gt;仅仅返回产品的ASIN编码；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Small：&lt;/i&gt;总阔性的内容，包括ASIN编码、产品名称、作者（作者、演员、作曲家、导演等）、产品组别、Url地址、厂商。&lt;/li&gt;&lt;li&gt;&lt;i&gt;Medium：&lt;/i&gt;包括了Smaill、Request、ItemAttributes、OfferSummary、SalesRank、EditorialReview、Images等子数据组；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Large：&lt;/i&gt;包括了Medium、Tracks、BrowseNodes、Reviews、ListmaniaLists、Similarities、Offers、Accessories等字数据组；&lt;/li&gt;&lt;li&gt;&lt;i&gt;OfferSummary：&lt;/i&gt;价格汇总；&lt;/li&gt;&lt;li&gt;&lt;i&gt;ItemAttributes：&lt;/i&gt;产品属性；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Tracks：&lt;/i&gt;曲目；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Accessories：&lt;/i&gt;附件；&lt;/li&gt;&lt;li&gt;&lt;i&gt;BrowseNodes：&lt;/i&gt;类别；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Images：&lt;/i&gt;图片；&lt;/li&gt;&lt;li&gt;&lt;i&gt;Reviews：&lt;/i&gt;评论。&lt;/li&gt;&lt;/ul&gt;对于得到数据的处理，留待Part II。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-7731941090009564805?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/7731941090009564805/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=7731941090009564805' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/7731941090009564805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/7731941090009564805'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/amazon-e-commerce-service-part-i.html' title='Amazon E-Commerce Service笔记 Part I'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-9187439293771582271</id><published>2007-03-03T11:38:00.000+08:00</published><updated>2007-03-03T11:39:38.744+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webwork'/><category scheme='http://www.blogger.com/atom/ns#' term='cookie'/><category scheme='http://www.blogger.com/atom/ns#' term='addresses'/><title type='text'>在Webwork中处理Cookie</title><content type='html'>Addresses基本框架完成了。&lt;br /&gt;&lt;br /&gt;今天主要把登录和注销的功能给完善了，加入了Cookie的支持。Webwork对session进 行了封装，但是目前的2.2.4版本中并未有cookie的原生支持。查了一下wiki，好像在07年1月加入了cookieInterceptor，大 概在Struts 2中会有体现吧。但当前，我还是用了比较原始的做法，一方面在Interceptor中做了cookie的request处理，但写入cookie还是直 接在action中做的。比较bad smell，但还算简单有效。&lt;br /&gt;&lt;br /&gt;接下来几天开始玩Amazon E-Commerce Service。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-9187439293771582271?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/9187439293771582271/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=9187439293771582271' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/9187439293771582271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/9187439293771582271'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/03/webworkcookie.html' title='在Webwork中处理Cookie'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-73721885740722251</id><published>2007-03-01T01:43:00.001+08:00</published><updated>2007-03-01T01:44:42.488+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jakarta Common'/><category scheme='http://www.blogger.com/atom/ns#' term='addresses'/><category scheme='http://www.blogger.com/atom/ns#' term='加密'/><title type='text'>利用MessageDigest实现加密</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;今天又是效率低下的一天。&lt;br /&gt;&lt;br /&gt;今天的大部分时间都被一个LoadAll()问题困扰。这是HibernateTemplate提供的一个方法，原本很简单，可是却让我花费了半个下午，因为我总是不能正确的从数据库中取得我想要的所有对象实例。中间甚至检查了Spring和Hibernate集成的事务处理，不可谓不头大。&lt;br /&gt;&lt;br /&gt;后来愚蠢的发现是在对象传递时发生了问题。使用LoadAll方法时需要传入entity的Class对象，可我却在对象的传递和调用中错误的传入了entity的Class对象的Class对象…… 这可真是笨出档次了！&lt;br /&gt;&lt;br /&gt;重构了一些Action，把Log相关的Action作为base action供继承。感觉以后有时间的话还是做成interceptor较好。&lt;br /&gt;&lt;br /&gt;后来又用java.security.MessageDigest类实现了MD5和SHA-1加密方法，其中的byte2Hex方法直接用了&lt;a href="http://jakarta.apache.org/commons/codec/"&gt;Jakarta Common Codec&lt;/a&gt;包里的Hex类。最近对&lt;a href="http://jakarta.apache.org/commons/"&gt;Jakarta Common&lt;/a&gt;非常依赖，很多类都直接拿过来用了，挺好用的。&lt;br /&gt;&lt;br /&gt;希望明天能更高效一些。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-73721885740722251?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/73721885740722251/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=73721885740722251' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/73721885740722251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/73721885740722251'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/messagedigest.html' title='利用MessageDigest实现加密'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-6641890197943345405</id><published>2007-02-28T05:08:00.001+08:00</published><updated>2007-02-28T05:10:09.308+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addresses'/><category scheme='http://www.blogger.com/atom/ns#' term='连接池'/><category scheme='http://www.blogger.com/atom/ns#' term='日志'/><title type='text'>被连接池困扰</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;今天被连接池的设置困扰很久。&lt;br /&gt;&lt;br /&gt;在之前的单元测试中，Service类非常容易的通过了CRUD测试，所有的数据都能够正常存取与数据库。测试扩展了Spring提供的AbstractTransactionalDataSourceSpringContextTests，与应用程序中的一样也是通过AOP获取依赖。&lt;br /&gt;&lt;br /&gt;可是今天在Web容器中，忽然发现无法正常往数据库中插入数据，没有报错，断点跟踪进去也一切正常的又跟出来，没有异常。在测试类中prepare了同样的数据，测试通过。怀疑问题可能在Spring Beans配置文件上，把Web容器中的datasource设置换成测试环境的试了一下，果然可以正常操作了。确定问题以后，就着手解决，可是我废了九牛二虎也没搞定Proxool的配置，只要我不在applicationContext.xml中配置dataSource，就无法插入数据。可是即使不配dataSource，配置了sessionFactory也是可以的呀，至少已经能够从数据库读取数据了。&lt;a href="http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=2"&gt;这里&lt;/a&gt;就有一份用Proxool设置数据库连接池的例子，我就是照着它来的。&lt;br /&gt;&lt;br /&gt;换用c3p0再试，也是一样的问题。&lt;br /&gt;&lt;br /&gt;最后无奈，在applicationContext.xml加入了dataSource的配置，另加了一个datasource.properties文件，用来参数化一些数据库连接的数据，总算解决问题。但是上面问题的原因我还是没能明白。&lt;br /&gt;&lt;br /&gt;在datasource.properties里详细添加了c3p0的config注释，以后直接参考这个就行。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-6641890197943345405?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/6641890197943345405/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=6641890197943345405' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/6641890197943345405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/6641890197943345405'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/blog-post_27.html' title='被连接池困扰'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-1955135107518669168</id><published>2007-02-27T18:47:00.001+08:00</published><updated>2007-02-27T18:49:16.193+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webwork'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><title type='text'>Struts2.0 GA发布</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;今天Apache发布了Struts 2.0的GA版本，也就是说已经脱离bata，正式发布了。&lt;br /&gt;&lt;br /&gt;Struts 2.0是在Webwork2的基础上发展的，也就是说虽然还是叫Struts，但和Struts 1.0已经基本没什么关系了，其实就是Webwork 2.3。&lt;br /&gt;&lt;br /&gt;现在很多基于Webwork的项目都是在2.2.4版本之上的，按照Apache的说法，从2.2.4过渡到Struts 2.0应该是比较平滑的。作为Webwork的核心部分xwork，在Struts 2中变成了xwork2；webwork部分则更改了包名，以org.apache.struts2作为起始；一些设置文件的名称发生了改变；ui标签库的uri发生了变化，其他的就基本没什么了。&lt;br /&gt;&lt;br /&gt;借助一些IDE的重构工具，做这些改变应该是相当简单的。&lt;br /&gt;&lt;br /&gt;Struts 2.0也引入了一些新的特性，比如新的Ioc容器的引入就让人很是好奇。等把手头的这个项目完成，就打算重构一下，升级到Struts 2.0一探究竟。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-1955135107518669168?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/1955135107518669168/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=1955135107518669168' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1955135107518669168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/1955135107518669168'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/struts20-ga.html' title='Struts2.0 GA发布'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-3995160853546845080</id><published>2007-02-27T01:00:00.001+08:00</published><updated>2007-02-28T05:12:26.392+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webwork'/><category scheme='http://www.blogger.com/atom/ns#' term='addresses'/><category scheme='http://www.blogger.com/atom/ns#' term='日志'/><title type='text'>自定义Authentication拦截器</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;今天基本完成了用户注册部分的代码，开始着手进行数据展现等主要功能的开发。&lt;br /&gt;&lt;br /&gt;因为这部分的内容是需要登录后才能展现，所以重构了webwork package，分出三个package：default、public和secure。&lt;br /&gt;default直接继承自webwork-default，是一个抽象package，定义了一些全局result、interceptor、exception；&lt;br /&gt;public主要包括了登录、校验、注册以及其他开放内容的action；&lt;br /&gt;secure使用了"member"的namespace，仅展现需登录才能查看的action。&lt;br /&gt;&lt;br /&gt;考虑到secure的存在，决定增添一个拦截器，应用于secure部分的action。它的主要功能是检查用户是否已经登录，如没有则返回一个全局result：login。 如果已经登录，则给相应的action注入对应Member实例。为了实现后一功能，又增添了一个助手接口，供需要登录查看的action实现此接口。&lt;br /&gt;&lt;br /&gt;之前为注册增加了一个wait页面，用execAndWait Interceptor实现，简单。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-3995160853546845080?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/3995160853546845080/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=3995160853546845080' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3995160853546845080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/3995160853546845080'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/authentication.html' title='自定义Authentication拦截器'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-5265337202791907881</id><published>2007-02-26T16:17:00.001+08:00</published><updated>2007-02-26T16:21:22.664+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><category scheme='http://www.blogger.com/atom/ns#' term='addresses'/><title type='text'>项目:Addresses</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;为学习Webwork2、Spring、Hibernate所搭建Demo项目。面向小群体人群交换联系方式的需求，提供一个安全、开放的信息集中与共享平台。&lt;br /&gt;&lt;br /&gt;开发平台：Eclipse，Jetty，HsqlDb&lt;br /&gt;&lt;br /&gt;核心技术：Spring AOP，Webwork做web层，Hibernate ORM提供data层与service的交互，View层遵循web标准，div+css布局。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-5265337202791907881?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/5265337202791907881/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=5265337202791907881' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/5265337202791907881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/5265337202791907881'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/addresses.html' title='项目:Addresses'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668902489196669083.post-8398908218350651555</id><published>2007-02-26T15:02:00.000+08:00</published><updated>2007-03-07T19:45:03.501+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='项目'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>当前项目</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://qingjiao.blogspot.com/2007/02/addresses.html"&gt;Addresses&lt;/a&gt; - 基于Webwork2、Spring、Hibernate的线上通讯录&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://qingjiao.blogspot.com/2007/03/blog-post.html"&gt;Geplex&lt;/a&gt; - 基于Webwork2、Spring、Hibernate的游戏评论网站&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668902489196669083-8398908218350651555?l=qingjiao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qingjiao.blogspot.com/feeds/8398908218350651555/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668902489196669083&amp;postID=8398908218350651555' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8398908218350651555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668902489196669083/posts/default/8398908218350651555'/><link rel='alternate' type='text/html' href='http://qingjiao.blogspot.com/2007/02/blog-post.html' title='当前项目'/><author><name>MonkiTo</name><uri>http://www.blogger.com/profile/17699244397853409683</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
