<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[陈毓哲——学海无涯苦作舟 - 开源项目]]></title>
<link>www.suneca.com/</link>
<description><![CDATA[说我想说的，做我想做的，写我想写的，我只是在自言自语。。。]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yuzhechen@163.com(ZIZZ)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>陈毓哲——学海无涯苦作舟</title>
	<url>www.suneca.com/images/logos.gif</url>
	<link>www.suneca.com/</link>
	<description>陈毓哲——学海无涯苦作舟</description>
</image>

			<item>
			<link>www.suneca.com/article.asp?id=94</link>
			<title><![CDATA[JQuery层的显示与隐藏]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Tue,11 May 2010 13:22:26 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=94</guid>
		<description><![CDATA[使用jquery对层进行显示跟隐藏，非常方便。<br/>通过类选择器，对visible属性值进行设置。<br/><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#0000ff">&lt;</span><span style="color:#0000ff">%</span>@ page <span style="color:#008000">contentType</span><span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;text/html;charset=UTF-8&#34;</span> <span style="color:#008000">language</span><span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;java&#34;</span> <span style="color:#0000ff">%</span><span style="color:#0000ff">&gt;</span><br/><span style="color:#0000ff">&lt;</span><span style="color:#008000">html</span><span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>head<span style="color:#0000ff">&gt;</span><span style="color:#0000ff">&lt;</span>title<span style="color:#0000ff">&gt;</span>Simple jsp page<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>title<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>script <span style="color:#008000">type</span><span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;text/javascript&#34;</span> src<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;javascripts/jquery.js&#34;</span><span style="color:#0000ff">&gt;</span><span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>script<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>script <span style="color:#008000">type</span><span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;text/javascript&#34;</span><span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span style="color:#0000ff">(</span><span style="color:#800000"><strong>function</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#39;#oned&#39;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">.</span>click<span style="color:#0000ff">(</span><span style="color:#800000"><strong>function</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#39;#one:visible&#39;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">.</span><span style="color:#5000a0">hide</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#39;#oneh&#39;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">.</span>click<span style="color:#0000ff">(</span><span style="color:#800000"><strong>function</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#39;#one:hidden&#39;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">.</span><span style="color:#5000a0">show</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>script<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>head<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>body<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>div id<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;one&#34;</span><span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i am one<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>div<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>div<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>a href<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;#&#34;</span> id<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;oned&#34;</span><span style="color:#0000ff">&gt;</span>hidden<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>a<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span>a href<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;#&#34;</span> id<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;oneh&#34;</span><span style="color:#0000ff">&gt;</span>display<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>a<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>div<span style="color:#0000ff">&gt;</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>body<span style="color:#0000ff">&gt;</span><br/><span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span><span style="color:#008000">html</span><span style="color:#0000ff">&gt;</span></div></div>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=93</link>
			<title><![CDATA[解决JQuery缓存问题]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Fri,07 May 2010 10:57:11 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=93</guid>
		<description><![CDATA[在使用JQuery进行load的时候，遇到一个缓存问题，重起resin，没有作用，把ie cache清了，再访问，问题解决。<br/>这样很麻烦，我要求load的时候每次都向服务器发送新的请求。<br/>找了一个JQuery文档，发现JQuery有设置项。<br/>以下是解决办法：<br/><span style="color:#0000ff">&lt;</span>SCRIPT <span style="color:#008000">type</span><span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;text/javascript&#34;</span><span style="color:#0000ff">&gt;</span><br/>$<span style="color:#0000ff">.</span>ajaxSetup <span style="color:#0000ff">(</span><span style="color:#0000ff">{</span><br/>cache<span style="color:#0000ff">:</span> <span style="color:#0000a0"><strong>false</strong></span><br/><span style="color:#0000ff">}</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">&lt;</span><span style="color:#0000ff">/</span>SCRIPT<span style="color:#0000ff">&gt;</span>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=83</link>
			<title><![CDATA[Spring 2.5与Hibernate整合的事务问题]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Sun,28 Sep 2008 11:52:47 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=83</guid>
		<description><![CDATA[<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/>&nbsp;&nbsp;&nbsp;&nbsp;近期在做的项目是基于Spring 2.5 + Hibernate 3.2，在搭框架的时候遇到一些问题，那就是Spring事务根本就不起作用。系统报了以下错误：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO o&#114; remove &#39;readOnly&#39; marker from transaction definition.<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1182)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:746)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.HibernateTemplate.saveOrUp&#100;ate(HibernateTemplate.java:744)<br/>&#160;&#160;&#160;&#160;com.suneca.base.BaseRepositoryHibernate.save(BaseRepositoryHibernate.java:22)<br/>&#160;&#160;&#160;&#160;com.suneca.service.DepartmentService.saveDepartment(DepartmentService.java:30)<br/>&#160;&#160;&#160;&#160;com.suneca.web.DepartmentController.saveDepartment(DepartmentController.java:45)<br/>&#160;&#160;&#160;&#160;sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br/>&#160;&#160;&#160;&#160;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br/>&#160;&#160;&#160;&#160;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br/>&#160;&#160;&#160;&#160;java.lang.reflect.Method.invoke(Method.java:597)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:409)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:132)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:310)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:297)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)<br/>&#160;&#160;&#160;&#160;javax.servlet.http.HttpServlet.service(HttpServlet.java:710)<br/>&#160;&#160;&#160;&#160;javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)<br/>&#160;&#160;&#160;&#160;o&#114;g.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)<br/>&#160;&#160;&#160;&#160;com.suneca.servlet.SessionAvailableFilter.doFilter(SessionAvailableFilter.java:36)<br/><br/></div></div><br/><br/>业务层已经使用了@Transactional声明了打开事务了<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#160;&#160;&#160;&#160;@Transactional<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> saveUser<span style="color:#0000ff">(</span>User user<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;userRepository<span style="color:#0000ff">.</span>save<span style="color:#0000ff">(</span>user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span></div></div><br/><br/>但是系统还是报错，最后，发现将Controller的scaner做了一下调整就可以了。<br/>原来admin-servet.xml文件Controller的scan是做如下的配置：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#0000ff"><strong>&lt;</strong></span>context:component-scan base-package<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;com.suneca.**/*&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span></div></div><br/><br/>改为：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#0000ff"><strong>&lt;</strong></span>context:component-scan base-package<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;com.suneca.web&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span></div></div><br/>如果有多个包那就写多个<br/><br/>事务就起作用了，比较郁闷，或许算是Spring的一个bug来的吧]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=78</link>
			<title><![CDATA[推荐一款超精致的Mysql web client]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Wed,23 Jul 2008 00:03:46 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=78</guid>
		<description><![CDATA[<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于mysql的客户端工具，可能有很多人都是使用phpMyAdmin或者像mysql-front、Mysql cc这样的CS工具。对于phpMyAdmin，我也已经使用过很长一段时间，只是phpMyAdmin实在是太丑陋了，或者你会跟我说，ZIZZ，丑一点无所谓，最重要的是功能，但我想说，如果一款工具会影响你胃口，那我就不用了，哈哈~~~。今天跟大家推荐一款超精致的Mysql管理工具sidu，这是一款开源的工具，使用php写的，整个压缩包才96k，96k可以干嘛？96k可能对于有些开发人员来讲，它才一个类或者一个jsp！呵呵~~~<br/>sidu的官方网址是：<a href="http://sidu.sourceforge.net/mysql-sidu.php" target="_blank" rel="external">http://sidu.sourceforge.net/mysql-sidu.php</a><br/>由于sidu是使用php写的，所以如果你想要运行它，那你还需要安装一个apache跟php！<br/>本人不是php的开发人员，对php的语法也不懂，但对于php，使用已经很长时间了，从最早的phpbb论坛到现在的discuz论坛，中途帮朋友搭过一些基于php的cms系统。<br/><br/>sidu目前支持中文、英文版本，你可以在系统当中进行认定。。。实在是强，国际化都做了！界面非常漂亮。<br/>中文版界面：<br/><img src="www.suneca.com/attachments/month_0807/b20087230322.GIF" border="0" alt=""/><br/><br/>英文版界面：<br/><img src="www.suneca.com/attachments/month_0807/120087230342.GIF" border="0" alt=""/><br/><br/><br/>最后，顺便提一下php环境的安装<br/><strong>1，安装apache</strong><br/>建议只安装2.0版，现在最新的2.2在php 4.x的支持不太好，可能你的php安装不起来<br/>apache的下载地址是：<a href="http://httpd.apache.org/download.cgi" target="_blank" rel="external">http://httpd.apache.org/download.cgi</a><br/>比如安装在c:/Apache/Apache2<br/><br/><strong>2，安装php 4</strong><br/>到php官方网站上下载php4，然后解压缩就可以了<br/>php4的下载地址是：<a href="http://www.php.net/downloads.php" target="_blank" rel="external">http://www.php.net/downloads.php</a>#v4<br/>假如解压缩到c:/php<br/><br/><strong>3，配置php</strong><br/>将C:/php/sapi下面所有的dll文件copy到php的根路径c:/php（如果熟的话你只要copy需要的到php根路径就可以了，这里只是为了方便）<br/><br/><strong>4，配置apache</strong><br/>打开apache/conf/httpd.conf<br/>1）在LoadModule的配置当中增加以下这句话，注意要选对哦，如果你安装的是apache 1.3，那就不是以下的配置了。<br/>LoadModule php4_module &#34;c:/php/php4apache2.dll&#34;<br/>2）在AddType的配置区域增加以下配置，目的是让apache对够对php的扩展名做处理<br/>AddType application/x-httpd-php .php<br/>3）在DirectoryIndex区域增加php应用的默认首页<br/>DirectoryIndex index.html index.html.var index.php<br/><br/><strong>5，重新apache</strong><br/>如果apache启动没有报错，一般情况下没有问题，或者你可以写一个test.php文件，放在apache/htdocs下面，test.php里面只要有以下这一行内容就可以了<br/>&lt;?phpinfo()?&gt; <br/>接着，通过ie或ff进行访问，如果可以看到php的信息，那说明配置没有问题了！]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=77</link>
			<title><![CDATA[基于Tomcat Native加速Tomcat性能]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Tue,22 Jul 2008 23:24:09 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=77</guid>
		<description><![CDATA[<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;今天在apache tomcat的官方网站上看到，跟tomcat相关的project，除了connector外，还有另外一个叫tomcat native，有兴趣的朋友可以上去看一下，地址是：<a href="http://tomcat.apache.org/native-doc/" target="_blank" rel="external">http://tomcat.apache.org/native-doc/</a>，tomcat native在具体的运行平台上，提供了一种优化技术，它本身是基于ARP（Apache Portable Runtime）技术，在tomcat的document当中提到：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Tomcat can use the Apache Portable Runtime to provide superior scalability, performance, and better integration with native server technologies. The Apache Portable Runtime is a highly portable library that is at the heart of Apache HTTP Server 2.x. APR has many uses, including access to advanced IO functionality (such as sendfile, epoll and OpenSSL), OS level functionality (random number generation, system status, etc), and native process handling (shared memory, NT pipes and Unix sockets).<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;These features allows making Tomcat a general purpose webserver, will enable much better integration with other native web technologies, and overall make <a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> much more viable as a full fledged webserver platform rather than simply a backend focused technology.<br/></div></div><br/><br/>也就是说，我们应用了tomcat native技术之后，tomcat在跟操作系统级别的交互方面可以做得更好，并且它更像apache一个，可以更好地作为一台web server。<br/><br/>如果我们是win32/wind64的操作系统，我们可以下载tcnative-1-ipv4.dll或tcnative-1-ipv6.dll，并把这些文件放在%TOMCAT_HOME%/bin目录下就可以了，这样tomcat会有更好的performance。<br/><br/>目前，Tomcat Native的最新版本是1.1.14，其下载地址是：<br/><a href="http://tomcat.heanet.ie/native/1.1.14/" target="_blank" rel="external">http://tomcat.heanet.ie/native/1.1.14/</a><br/>我们需要选择相应的操作系统，对于windows操作系统比较方便，直接下载dll文件，然后丢到tomcat的bin即可，而对于linux，我们还需要按照document进行配置跟编辑才能使用。<br/><br/>试了一下tomcat的启动，没有使用tomcat native技术进行启动，系统启动需要3秒多。而将tomcat native放到bin目录之后，启动飞快，一秒种搞定！神啊。。。<br/>以下是tomcat的启动截图：<br/><img src="www.suneca.com/attachments/month_0807/l2008722232315.GIF" border="0" alt=""/><br/><br/>整个系统启动只花了1003ms。启动速度提高了2倍！额滴神啊。。。。]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=76</link>
			<title><![CDATA[OpenJpa大批量插入及更新的解决办法]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Fri,18 Jul 2008 21:58:39 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=76</guid>
		<description><![CDATA[<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;使用OpenJPA进行大批量插入或更新的时候，比较麻烦，近期在基于OpenJPA的开发测试当中发现不少问题，一旦数据量非常大的时候，系统将会执出异常，主要是内存用完了！奇怪，才一千条数据，内存就用完了！<br/>以下是系统所执出的异常：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Exception in thread &#34;main&#34; java.lang.StackOverflowError<br/>&#160;&#160;&#160;&#160;at java.lang.reflect.Field.copy(Field.java:126)<br/>&#160;&#160;&#160;&#160;at java.lang.reflect.ReflectAccess.copyField(ReflectAccess.java:122)<br/>&#160;&#160;&#160;&#160;at sun.reflect.ReflectionFactory.copyField(ReflectionFactory.java:289)<br/>&#160;&#160;&#160;&#160;at java.lang.Class.copyFields(Class.java:2711)<br/>&#160;&#160;&#160;&#160;at java.lang.Class.getDeclaredFields(Class.java:1715)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.lib.util.J2DoPrivHelper$7.run(J2DoPrivHelper.java:270)<br/>&#160;&#160;&#160;&#160;at java.security.AccessController.doPrivileged(Native Method)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.enhance.Reflection.getDeclaredField(Reflection.java:201)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.enhance.Reflection.findField(Reflection.java:180)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.enhance.com$suneca$model$User$pcsubclass.pcProvideField(Unknown Source)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.StateManagerImpl.provideField(StateManagerImpl.java:3003)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.SaveFieldManager.isFieldEqual(SaveFieldManager.java:189)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:824)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.ManagedCache.dirtyCheck(ManagedCache.java:307)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3786)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.BrokerImpl.setDirty(BrokerImpl.java:3903)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1597)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1511)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:825)<br/>&#160;&#160;&#160;&#160;at o&#114;g.apache.openjpa.kernel.ManagedCache.dirtyCheck(ManagedCache.java:307)</div></div><br/><br/>后来，经过一些研究之后，发现这个主要是JPA在进行持久化这一块的策略导致，对于JPA的持久化工作需要浪费不少内存。解决的办法就是，在对程序进行flush的同时，使用EntityManager的clear将持久化的对象从内存当中去掉。<br/><br/>以下是技术实现的代码：<br/>User.java<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">package com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>model<span style="color:#0000ff">;</span><br/><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Column<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Entity<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>GeneratedValue<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>GenerationType<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Id<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Table<span style="color:#0000ff">;</span><br/><br/>@SuppressWarnings<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;serial&#34;</span><span style="color:#0000ff">)</span><br/>@Entity<br/>@Table<span style="color:#0000ff">(</span>name <span style="color:#0000ff">=</span> <span style="color:#ff00ff">&#34;ECA_USER&#34;</span><span style="color:#0000ff">)</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class User <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Id<br/>&#160;&#160;&#160;&#160;@GeneratedValue<span style="color:#0000ff">(</span>strategy <span style="color:#0000ff">=</span> GenerationType<span style="color:#0000ff">.</span>IDENTITY<span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#5000a0">int</span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;NAME&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#0000a0"><strong>String</strong></span> name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;LOGINID&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#0000a0"><strong>String</strong></span> loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;PASSWORD&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#0000a0"><strong>String</strong></span> <span style="color:#008000">password</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name<span style="color:#0000ff">=</span><span style="color:#ff00ff">&#34;AGE&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#5000a0">int</span> age<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#5000a0">int</span> getId<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000a0"><strong>String</strong></span> getName<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000a0"><strong>String</strong></span> getLoginId<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000a0"><strong>String</strong></span> getPassword<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> <span style="color:#008000">password</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#5000a0">int</span> getAge<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> age<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> setId<span style="color:#0000ff">(</span><span style="color:#5000a0">int</span> id<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>id <span style="color:#0000ff">=</span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> setName<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>String</strong></span> name<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>name <span style="color:#0000ff">=</span> name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> setLoginId<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>String</strong></span> loginId<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>loginId <span style="color:#0000ff">=</span> loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> setPassword<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>String</strong></span> <span style="color:#008000">password</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span><span style="color:#008000">password</span> <span style="color:#0000ff">=</span> <span style="color:#008000">password</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#0000ff">void</span> setAge<span style="color:#0000ff">(</span><span style="color:#5000a0">int</span> age<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>age <span style="color:#0000ff">=</span> age<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;<br/><span style="color:#0000ff">}</span><br/></div></div><br/><br/>UserTest.java<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">package com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>test<span style="color:#0000ff">;</span><br/><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityManager<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityManagerFactory<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityTransaction<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Persistence<span style="color:#0000ff">;</span><br/><br/>import com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>model<span style="color:#0000ff">.</span>User<span style="color:#0000ff">;</span><br/><br/><span style="color:#008080">/**<br/> * OpenJPA Test<br/> * @author chen yuzhe<br/> *<br/> * Cr&#101;ate-Time:2008-7-18 下午09:57:35<br/> */</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class UserTest <span style="color:#0000ff">{</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#00a0c0"><strong>static</strong></span> <span style="color:#0000ff">void</span> main<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>String</strong></span><span style="color:#0000ff">[</span><span style="color:#0000ff">]</span> args<span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityManagerFactory factory <span style="color:#0000ff">=</span> Persistence<span style="color:#0000ff">.</span>cr&#101;ateEntityManagerFactory<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>null</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityManager em <span style="color:#0000ff">=</span> factory<span style="color:#0000ff">.</span>cr&#101;ateEntityManager<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityTransaction tx <span style="color:#0000ff">=</span> em<span style="color:#0000ff">.</span>getTransaction<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tx<span style="color:#0000ff">.</span>begin<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;long startTime <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>currentTimeMillis<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>for</strong></span><span style="color:#0000ff">(</span><span style="color:#5000a0">int</span> i<span style="color:#0000ff">=</span>0<span style="color:#0000ff">;</span>i<span style="color:#0000ff">&lt;</span>10000<span style="color:#0000ff">;</span>i<span style="color:#0000ff">+</span><span style="color:#0000ff">+</span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;User user <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> User<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setName<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;陈毓哲&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setLoginId<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;zizz&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setPassword<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;admin&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setAge<span style="color:#0000ff">(</span>28<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">//EntityManager Persistent Object</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span>persist<span style="color:#0000ff">(</span>user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">//Flush data</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>i <span style="color:#0000ff">%</span> 50 <span style="color:#0000ff">=</span><span style="color:#0000ff">=</span> 0<span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span><span style="color:#5000a0">flush</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">//Evlia all persistent objects</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span><span style="color:#5000a0">clear</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;long endTime <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>currentTimeMillis<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>out<span style="color:#0000ff">.</span>println<span style="color:#0000ff">(</span>endTime <span style="color:#0000ff">-</span> startTime<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tx<span style="color:#0000ff">.</span>commit<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span>close<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;factory<span style="color:#0000ff">.</span>close<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span>&#160;&#160;&#160;&#160;<br/><span style="color:#0000ff">}</span><br/></div></div><br/><br/>程序当中最关键的就是em.clear();将持久的对象进行剥离<br/><br/>测试的结果是：插入一千条数据，程序跑得非常轻松，用时1219ms(1.2秒)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插入一万条数据，程序还是跑得非常轻松，用时6563ms(6.5秒)<br/>从性能上讲，还是比较满意的。]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=75</link>
			<title><![CDATA[Eclipse jee下JPA的开发]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Wed,16 Jul 2008 18:53:26 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=75</guid>
		<description><![CDATA[ <span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/><span style="color:Green"><span style="font-size:12pt;line-height:100%;"><strong>一、预备知识</strong></span></span><br/>JPA即<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> Persistence API，它是是EJB 3.0 规范 (JSR 220) 中引入的标准对象关系可持续性。<br/>以下文字来源于互联网：<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">JPA主要借鉴了领导持久层的诸如Hibernate，<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a> TopLink，<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> Data Objects (JDO)等持久层框架，以及早期EJB的容器管理持久化的思想与概念。实现了ORM<span style="color:#800080">（对象关系映射：Object-Relational Mapping）</span>和 实体间的关系映射等功能。<br/>1，简化程序模型<br/>2，使用注释，简化配置<br/>3，ORM：对象关系映射<br/>4，EJB-QL：提供了动态查询，和功能强大的EJB查询语言<br/>5，独立。可在EJB容器之外单独运行，也使得实体Bean更加容易测试<br/>6，灵活，可配置。可以使用第三方JPA provider实现<br/><br/>OpenJPA概要：<br/>OpenJPA 是 Apache 组织提供的开源项目，它的前身是BEA公司的Kodo <a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> Persistence API，于2006年7月捐献给ASF<span style="color:#800080">（Apache Software Foundation）</span>，并于2007年8月28日发布了OpenJPA 1.0.0版本。OpenJPA 100%实现了 EJB 3.0<span style="color:#800080">（JSR220）</span> 中的 JPA 标准，为开发者提供功能强大、使用简单的持久层数据管理框架。OpenJPA 当然实现了对象关系映射<span style="color:#800080">（ORM）</span>与对象关系等功能。OpenJPA 除了可以运行在符合EJB 3.0 标准的EJB容器中之外，还可以作为独立的持久层框架，轻松地与其它<a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a>EE应用框架集成。</div></div><br/><br/>当前OpenJPA的最新版本是1.1<br/><br/><span style="color:Green"><span style="font-size:12pt;line-height:100%;"><strong>二、工具的下载及安装</strong></span></span><br/>JDK 1.5的下载地址：<a href="http://java.sun.com" target="_blank" rel="external">http://java.sun.com</a><br/>Eclipse jee的下载地址：<a href="http://www.eclipse.org/downloads/" target="_blank" rel="external">http://www.eclipse.org/downloads/</a><br/>OpenJPA的下载地址：<a href="http://openjpa.apache.org/downloads.html" target="_blank" rel="external">http://openjpa.apache.org/downloads.html</a><br/>Mysql的下载地址：<a href="http://dev.mysql.com/downloads/" target="_blank" rel="external">http://dev.mysql.com/downloads/</a><br/>Apache Tomcat的下载地址：<a href="http://tomcat.apache.org/download-60.cgi" target="_blank" rel="external">http://tomcat.apache.org/download-60.cgi</a><br/>对于Eclipse jee跟OpenJPA直接解压缩就可以使用了，Mysql进行安装<br/><br/><span style="color:Green"><span style="font-size:12pt;line-height:100%;"><strong>三、Eclipse下环境的配置</strong></span></span><br/>1，配置JPA。点击window --&gt; Preferences的“参数选择”对象框当中选择JPA；接着，点击Configure User Libraries，在用户类库当中将OpenJPA的核心包以及依赖的外部包文件加到OpenJPA Library当中。配置后的效果图如下所示：<br/><img src="www.suneca.com/attachments/month_0807/82008716184539.png" border="0" alt=""/><br/><br/>2，配置数据库连接，点击window --&gt; Preferences的“参数选择”对象框当中选择Connectivity--&gt; Driver Definitions，在数据库的选择项当中选择Mysql，并添加Mysql JDBC Driver。最终的效果如下图所示：<br/><img src="www.suneca.com/attachments/month_0807/42008716184559.png" border="0" alt=""/><br/><br/>3，创建新的JPA Project：点击File --&gt; New --&gt; Other，在弹出的创建向导当中选择JPA，如下图所示：<br/><img src="www.suneca.com/attachments/month_0807/82008716184618.png" border="0" alt=""/><br/><br/>点击Next（下一步）。在窗口当中输入项目名称，比如JPATraining，其它默认<br/><br/><img src="www.suneca.com/attachments/month_0807/82008716184645.png" border="0" alt=""/><br/>点击Next(下一步)<br/><br/><img src="www.suneca.com/attachments/month_0807/z2008716184711.png" border="0" alt=""/><br/>各项默认就可以了，点击下一步<br/><img src="www.suneca.com/attachments/month_0807/42008716184739.png" border="0" alt=""/><br/>一切都默认就可以，因为之前已经配置完了。最后点击Finish<br/>最后，可以在Project Explorer当中看到src/META-INF/下面多了两个文件，一个叫persistence.xml，另一个叫orm.xml<br/><br/><span style="color:Green"><span style="font-size:12pt;line-height:100%;"><strong>四、程序的编写</strong></span></span><br/>1、数据库脚本<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Cr&#101;ate TABLE ECA_USER<span style="color:#0000ff">(</span><br/>&nbsp;&nbsp;ID INT NOT NULL AUTO_INCREMENT<span style="color:#0000ff">,</span><br/>&nbsp;&nbsp;NAME VARCHAR<span style="color:#0000ff">(</span>20<span style="color:#0000ff">)</span> NOT NULL<span style="color:#0000ff">,</span><br/>&nbsp;&nbsp;LOGINID VARCHAR<span style="color:#0000ff">(</span>20<span style="color:#0000ff">)</span> NOT NULL<span style="color:#0000ff">,</span><br/>&nbsp;&nbsp;PASSWORD VARCHAR<span style="color:#0000ff">(</span>32<span style="color:#0000ff">)</span> NOT NULL<span style="color:#0000ff">,</span><br/>&nbsp;&nbsp;AGE INT NOT NULL<span style="color:#0000ff">,</span><br/>&nbsp;&nbsp;PRIMARY KEY<span style="color:#0000ff">(</span>ID<span style="color:#0000ff">)</span><br/><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span></div></div><br/><br/>2，Entity<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#800000"><strong>package</strong></span> com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>entity<span style="color:#0000ff">;</span><br/><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Column<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Entity<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Id<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Table<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>GeneratedValue<span style="color:#0000ff">;</span><br/>import <span style="color:#800000"><strong>static</strong></span> javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>GenerationType<span style="color:#0000ff">.</span>IDENTITY<span style="color:#0000ff">;</span><br/><br/><span style="color:#0066FF">/**<br/> * <br/> * @author ChenYuzhe<br/> * @version 1.0<br/> * Cr&#101;ate-Time：2008-7-16 下午06:55:22<br/> */</span><br/>@Entity<br/>@Table<span style="color:#0000ff">(</span>name<span style="color:#0000ff">=</span><span style="color:#0000CC">&#34;ECA_USER&#34;</span><span style="color:#0000ff">)</span><br/>public <span style="color:#800000"><strong>class</strong></span> User <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Id<br/>&#160;&#160;&#160;&#160;@GeneratedValue<span style="color:#0000ff">(</span>strategy<span style="color:#0000ff">=</span>IDENTITY<span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> <span style="color:#800000"><strong>int</strong></span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name <span style="color:#0000ff">=</span> <span style="color:#0000CC">&#34;NAME&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> String name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name <span style="color:#0000ff">=</span> <span style="color:#0000CC">&#34;LOGINID&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> String loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name <span style="color:#0000ff">=</span> <span style="color:#0000CC">&#34;PASSWORD&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> String password<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;@Column<span style="color:#0000ff">(</span>name <span style="color:#0000ff">=</span> <span style="color:#0000CC">&#34;AGE&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>private</strong></span> <span style="color:#800000"><strong>int</strong></span> age<span style="color:#0000ff">;</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>int</strong></span> getId<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String getName<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String getLoginId<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> String getPassword<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> password<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>int</strong></span> getAge<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> age<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>void</strong></span> setId<span style="color:#0000ff">(</span><span style="color:#800000"><strong>int</strong></span> id<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>this</strong></span><span style="color:#0000ff">.</span>id <span style="color:#0000ff">=</span> id<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>void</strong></span> setName<span style="color:#0000ff">(</span>String name<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>this</strong></span><span style="color:#0000ff">.</span>name <span style="color:#0000ff">=</span> name<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>void</strong></span> setLoginId<span style="color:#0000ff">(</span>String loginId<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>this</strong></span><span style="color:#0000ff">.</span>loginId <span style="color:#0000ff">=</span> loginId<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>void</strong></span> setPassword<span style="color:#0000ff">(</span>String password<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>this</strong></span><span style="color:#0000ff">.</span>password <span style="color:#0000ff">=</span> password<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>public</strong></span> <span style="color:#800000"><strong>void</strong></span> setAge<span style="color:#0000ff">(</span><span style="color:#800000"><strong>int</strong></span> age<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>this</strong></span><span style="color:#0000ff">.</span>age <span style="color:#0000ff">=</span> age<span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span>&#160;&#160;&#160;&#160;<br/><span style="color:#0000ff">}</span><br/></div></div><br/><br/>3，测试类的编写<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">package com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>test<span style="color:#0000ff">;</span><br/><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityManager<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityManagerFactory<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>Persistence<span style="color:#0000ff">;</span><br/>import javax<span style="color:#0000ff">.</span>persistence<span style="color:#0000ff">.</span>EntityTransaction<span style="color:#0000ff">;</span><br/><br/>import com<span style="color:#0000ff">.</span>suneca<span style="color:#0000ff">.</span>entity<span style="color:#0000ff">.</span>User<span style="color:#0000ff">;</span><br/><br/><span style="color:#008080">/**<br/> * <br/> * @author ChenYuzhe<br/> * @version 1.0<br/> * Cr&#101;ate-Time：2008-7-16 下午06:55:08<br/> */</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class UserTest <span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;<span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#00a0c0"><strong>static</strong></span> <span style="color:#0000ff">void</span> main<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>String</strong></span><span style="color:#0000ff">[</span><span style="color:#0000ff">]</span> args<span style="color:#0000ff">)</span><span style="color:#0000ff">{</span>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">// get Entity Manager</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityManagerFactory factory <span style="color:#0000ff">=</span> Persistence<span style="color:#0000ff">.</span>cr&#101;ateEntityManagerFactory<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;MyJPA&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;long startTime <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>currentTimeMillis<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityManager em <span style="color:#0000ff">=</span> factory<span style="color:#0000ff">.</span>cr&#101;ateEntityManager<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">// get Transaction and Begin Transaction</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EntityTransaction transaction <span style="color:#0000ff">=</span> em<span style="color:#0000ff">.</span>getTransaction<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;transaction<span style="color:#0000ff">.</span>begin<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;User user <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> User<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setName<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;陈毓哲&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setLoginId<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;zizz&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setPassword<span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;admin&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;user<span style="color:#0000ff">.</span>setAge<span style="color:#0000ff">(</span>28<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span>persist<span style="color:#0000ff">(</span>user<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">// Commit&#160;&#160;&#160;&#160;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;transaction<span style="color:#0000ff">.</span>commit<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;long endTime <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>currentTimeMillis<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000a0"><strong>System</strong></span><span style="color:#0000ff">.</span>out<span style="color:#0000ff">.</span>println<span style="color:#0000ff">(</span>endTime <span style="color:#0000ff">-</span> startTime<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;em<span style="color:#0000ff">.</span>close<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">}</span><br/><br/><span style="color:#0000ff">}</span><br/></div></div><br/><br/>4，persistence.xml的修改<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>?</strong></span>xml version<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;1.0&#34;</span> encoding<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;UTF-8&#34;</span><span style="color:#0000ff"><strong>?</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/><span style="color:#0000ff"><strong>&lt;</strong></span>persistence version<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;1.0&#34;</span> xmlns<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;<a href="http://java.sun.com/xml/ns/persistence" target="_blank" rel="external">http://java.sun.com/xml/ns/persistence</a>&#34;</span> xmlns:xsi<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank" rel="external">http://www.w3.org/2001/XMLSchema-instance</a>&#34;</span> xsi:schemaLocation<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;<a href="http://java.sun.com/xml/ns/persistence" target="_blank" rel="external">http://java.sun.com/xml/ns/persistence</a> <a href="http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" target="_blank" rel="external">http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd</a>&#34;</span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>persistence-unit name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;MyJPA&#34;</span> transaction-type<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;RESOURCE_LOCAL&#34;</span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">&lt;!-- 定义jpa的Provider --&gt;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>provider<span style="color:#0000ff"><strong>&gt;</strong></span>org.apache.openjpa.persistence.PersistenceProviderImpl<span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>provider<span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">&lt;!-- 定义持久化实体 --&gt;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>class<span style="color:#0000ff"><strong>&gt;</strong></span>com.suneca.entity.User<span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>class<span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008080">&lt;!-- 定义jpa的数据库参数 --&gt;</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>properties<span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;openjpa.ConnectionURL&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;jdbc:mysql://localhost:3306/suneca&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;openjpa.ConnectionDriverName&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;com.mysql.jdbc.Driver&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;openjpa.ConnectionUserName&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;root&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span>property name<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;openjpa.ConnectionPassword&#34;</span> value<span style="color:#008000">=</span><span style="color:#ff00ff">&#34;admin&#34;</span><span style="color:#0000ff"><strong>/</strong></span><span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>properties<span style="color:#0000ff"><strong>&gt;</strong></span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>persistence-unit<span style="color:#0000ff"><strong>&gt;</strong></span><br/><span style="color:#0000ff"><strong>&lt;</strong></span><span style="color:#0000ff"><strong>/</strong></span>persistence<span style="color:#0000ff"><strong>&gt;</strong></span><br/></div></div><br/>运行程序，将可以看到在数据库当中增加了<br/><br/>程序代码！<div id="mdown_wh2wjqxljr"></div><br /><script language="javascript" type="text/javascript">check('Action.asp?action=type1&mainurl=attachments%2Fmonth%5F0807%2Fx2008716191614%2Erar&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_wh2wjqxljr','mdown_wh2wjqxljr');</script><br/>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=74</link>
			<title><![CDATA[SourceForge无法连接的解决办法]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Sat,12 Jul 2008 09:40:13 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=74</guid>
		<description><![CDATA[ <span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;SourceForge近期被封杀了，到现在估计已经有一个多星期了！没办法，SourceForge上面有不少反动信息。。。近期又被封了！个人有点郁闷，做技术的怎么整天要跟政治扯在一起！奥运会作为全世界的一个体育盛会，是你说抵制就抵制的吗？引用毛主席的话，“一切反对派都是纸老虎”难道你们会不看奥运会？我就不信！！！<br/>&nbsp;&nbsp;&nbsp;&nbsp;对于我们做开发的，需要到开源的一些工具，那就没有办法用到啦！近期急着要下载Spring，确无法连到sourceforge，确实是非常痛苦！在网上找了很久，终于在javaeye找到解决方案：<br/>可以进入<a href="http://mirror.optus.net/sourceforge/" target="_blank" rel="external">http://mirror.optus.net/sourceforge/</a><br/><br/>其实只要搜索一下sourceforge全球的镜相就可以啦，google&nbsp;&nbsp;: sourceforge mirror<br/>基本上在第一页都可以找到sourceforge的镜相！这些镜相跟sourceforge官方下的都是一样的，只是在sourceforge官方网站，会根据你的IP来源，自动找到离你最近的下载点，其实这些下载点就是这些镜相！<br/><br/>首页的样子，这个是所对应的软件的索引，现在我要找的是Spring,所以我进入点击s<br/><br/><img src="www.suneca.com/attachments/month_0807/s200871293715.JPG" border="0" alt=""/><br/><br/>进入S搜引之后，Spring的第二个字母是p，我点击sp<br/><img src="www.suneca.com/attachments/month_0807/320087129393.JPG" border="0" alt=""/><br/><br/>在新页面里面就可以找到跟Spring相关的东西。<br/><br/>其他的开源工具也是可以通过这种方式查找到<br/>]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=71</link>
			<title><![CDATA[免费的数据库建模工具]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Sat,05 Jul 2008 16:47:55 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=71</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对于数据模型的建模，最有名的要数ERWin跟PowerDesigner，基本，PowerDesigner是中国软件公司可是非常有名的，其易用性、功能、对流行技术框架的支持、以及它的模型库的管理理念，都深受设计师们喜欢。PowerDesigner是我一直以来非常喜欢的一个设计工具，对于它，我可以用两个字来形容，那就是我能<strong>驾驭</strong>这个工具！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;现在所在的公司自上市以来，对软件版权问题看得非常重，公司从上市以后，对软件的版权做了一些相应的规定，不允许使用破解的软件，软件只能使用开源的、免费的、或者共享的软件！所用软件必须公司注册的！没办法，我也只能放弃我多年的喜好，转向开源、免费的领域！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;数据库物理建模是在软件设计当中必不可少的环节，数据库建得怎么样，关系到以后整个系统的扩展、性能方面的优化以及后期的维护。使用一个数据建模工具是非常必须的。那在开源或免费的领域，有没有比较好的工具呢？其实是有很多的，只是开源这一块，功能上、易用性上没有商业软件那么好用！<br/><br/>现在介绍几个相对比较好用的工具：<br/><strong>第一个：ERDesigner NG</strong><br/>官方网址是：<a href="http://mogwai.sourceforge.net/?Welcome:ERDesigner_NG" target="_blank" rel="external">http://mogwai.sourceforge.net/?Welcome:ERDesigner_NG</a><br/>属于sourceforge的一个开源产品，目前版本为1.4<br/>以下是官方所描述的：<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">The Mogwai ERDesigner is a entity relation modeling tool such as ERWin and co. The only difference is that it is Open Source and does not cost anything. It was designed to make database modeling as easy as it can be and to support the developer in the whole development process, from database design to schema and code generation. This tool was also designed to support a flexible plug in architecture, to extend the system simply by installing a new plug in. This way, everybody can implement new features and tools to make ERDesigner fit the requirements.<br/><br/>ERDesigner NG<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;* is based on <a href="http://www.suneca.com/default.asp?cateID=22" target="_blank">Java</a> and can be run on Windows and Unix systems<br/>&nbsp;&nbsp;&nbsp;&nbsp;* has a powerfull WYSIWYG for physical database design<br/>&nbsp;&nbsp;&nbsp;&nbsp;* handles tables, relations, indexes and comments<br/>&nbsp;&nbsp;&nbsp;&nbsp;* supports subject areas<br/>&nbsp;&nbsp;&nbsp;&nbsp;* supports MySQL, o&#114;acle, Microsoft SQLServer and Postgres<br/>&nbsp;&nbsp;&nbsp;&nbsp;* cr&#101;ates the SQL DDL statements for schema creation<br/>&nbsp;&nbsp;&nbsp;&nbsp;* has an integrated schema version control system<br/>&nbsp;&nbsp;&nbsp;&nbsp;* can generate schema migration scripts for every change<br/>&nbsp;&nbsp;&nbsp;&nbsp;* stores the database definition as XML files for further processing<br/>&nbsp;&nbsp;&nbsp;&nbsp;* can export the database schema as GIF, BMP, JPEG o&#114; SVG files<br/>&nbsp;&nbsp;&nbsp;&nbsp;* has an integrated reverse engineering module for existing schemas<br/>&nbsp;&nbsp;&nbsp;&nbsp;* it is based on GPL license<br/>&nbsp;&nbsp;&nbsp;&nbsp;* support is available by authors and newsgroups<br/></div></div><br/>从上述的描述我们可以看得出，软件支持多种主流的数据库，比如mysql、oracle、MSSQLSERVER等。<br/>功能方面支持反向工程、数据库比较、通过建模自动产生ddl、将模型图导成图片等等。<br/>软件的截图如下：<br/><img src="www.suneca.com/attachments/month_0807/n200875164639.PNG" border="0" alt=""/><br/><img src="www.suneca.com/attachments/month_0807/n200875164747.PNG" border="0" alt=""/><br/><br/><strong>第二个：ModelRight3</strong><br/>官方网址为：<a href="http://www.modelright.com/Default.aspx" target="_blank" rel="external">http://www.modelright.com/Default.aspx</a><br/>以下是官方的介绍：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Need to design, visualize o&#114; document your database?<br/>ModelRight 3 can reverse engineer your existing database to give you a graphical view of it, generate all the SQL statements to cr&#101;ate the database, o&#114; synchronize your database model with the database to keep your design up to date. <br/><br/>Do you need to control the most detailed aspects of your database?<br/>ModelRight 3 has more complete and in-depth support for your database&#39;s (<a href="http://www.suneca.com/default.asp?cateID=8" target="_blank">Oracle</a>, SQL Server, MySQL o&#114; any via ODBC) most advanced features. <br/></div></div><br/>别以为真的支持这么多数据库，这个是专业版的才知识这么多，如果你叫钱多多，那你就去买专业版吧！<br/>这个产品是比ERDesigner NG专业的一个，理由非常简单，它本身就是一个商业的工具，不过，也有免费版本，只是免费版权在数据库的支持上少了好多！今天我们介绍的就是这个免费版本，只支持mysql，比较痛苦！产商其实不太厚道！ <img src="www.suneca.com/images/smilies/Face_10.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/><br/>下个图片截图吧！<br/><img src="www.suneca.com/attachments/month_0807/u20087517829.PNG" border="0" alt=""/><br/>再来个官方的图片（专业版的）<br/><img src="www.suneca.com/attachments/month_0807/220087517545.gif" border="0" alt=""/><br/>看了专业版的千万不要眼红，使用是要付出代价的！如果我们每个人都是钱多多，多好啊！<br/><br/>第三，OpenSystemArchitect（推荐产品）<br/>官方网址是：<a href="http://www.codebydesign.com/" target="_blank" rel="external">http://www.codebydesign.com/</a><br/>这是一个开源做得比较彻底的一个产品，推荐大家使用。<br/>最喜欢的一点说法是操作习惯有点类似于PowerDesigner，界面比PD丑一点，但是，还挺好用的！<br/>它支持windows、Linux<br/>以下是官方的介绍：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="www.suneca.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Open System Architect (OSA) is an application used for modelling a system. OSA currently supports data modelling (physical and logical) with UML in the works. The unique thing about OSA is that it is an Open Source product licensed under the General Public License (GPL). The free factor makes OSA particularly interesting for students but OSA is powerful enough to compare favourably with products costing thousands of dollars.<br/><br/>OSA is sponsored by CodeByDesign (the o&#114;iginally developer of OSA) and by Source Forge (they host the community collaboration environment for OSA). </div></div><br/>以下是官方的demo，看完这些截图之后，我相信你马上会下载一个用用！ <img src="www.suneca.com/images/smilies/Face_02.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/>为什么，确实是厚道！<br/>Logical Model<br/><img src="www.suneca.com/attachments/month_0807/p200875172127.png" border="0" alt=""/><br/><br/>Physical Model<br/><img src="www.suneca.com/attachments/month_0807/f200875172146.png" border="0" alt=""/><br/><br/>SQL Editor<br/><img src="www.suneca.com/attachments/month_0807/n200875172212.png" border="0" alt=""/><br/><br/><strong>第四个：Mysql WorkBench</strong><br/>官方网址：<a href="http://dev.mysql.com/workbench/" target="_blank" rel="external">http://dev.mysql.com/workbench/</a><br/>Mysql官方出的设计工具，for mysql<br/>如果你是使用mysql，也可以考虑一下它！]]></description>
		</item>
		
			<item>
			<link>www.suneca.com/article.asp?id=69</link>
			<title><![CDATA[免费的&#34;谷歌金山词霸合作版&#34;]]></title>
			<author>yuzhechen@163.com(admin)</author>
			<category><![CDATA[开源项目]]></category>
			<pubDate>Sat,05 Jul 2008 14:58:20 +0800</pubDate>
			<guid>www.suneca.com/default.asp?id=69</guid>
		<description><![CDATA[ <span style="color:Red"><strong>版权所有，欢迎转载，转载请注明转自<a href="http://www.suneca.com" target="_blank" rel="external">http://www.suneca.com</a></strong></span><br/><br/>Google与金山合作的免费产品“谷歌金山词霸合作版”<br/>以前都是使用金山词霸2005，用了三年了，从一个朋友那里借来的正版碟安装的，其实这种行为本身就是盗版！哈哈！<br/><br/>今天在网上看到，谷歌金山词霸合作版，下载下来用，非常好用！其实也不是什么新闻，5月8号已经有了！只不过我一直不知道！<br/><br/>对于对版权越来越重视的今天，大家最可以将电脑里面金山词霸删了，用这个版本代替！<br/><br/>谷歌金山词霸合作版的功能如下：<br/><strong>经典准确</strong>：传承金山词霸十年内容品质，收录《现代英汉综合大词典》、《汉英词典》(新)等经典词典，涵盖金山词霸百万余词条。 <br/><strong>网络词典</strong>：《爱词霸百科词典》和海量的《Google网络词典》，囊括所有新词，流行词，内容紧跟时代。 <br/><strong>实用例句</strong>：80万情景例句，直接输入句子或关键字就可以找到所有相关联的句型和用法，举一反三使您学到更多。 <br/><strong>时尚轻巧</strong>：下载快，启动快，有效节省系统资源。使用快捷方便，占用空间小。人性化操作界面，外形时尚。 <br/><strong>智能翻译</strong>：使用领先的网络引擎，在丰富语料库基础上结合强大的翻译技术，使得全文翻译结果智能准确。 <br/><strong>网页直译</strong>：支持网页翻译，您可以直接输入网址并选择语种，快速实时地显示翻译结果。 <br/><strong>多语互译</strong>：中英日繁4种语言七个方向!支持英汉、汉英、英英、汉汉、汉日、日汉查词，以及中、英、日、繁四种语言7个方向翻译。 <br/><strong>纯正发音</strong>：30万纯正真人发音，含英语中5万长词、难词和词组，帮您纠正英文单词发音。 <br/><strong>屏幕取词</strong>：领先的屏幕词取技术，新增译中译功能，可选任意的单词或词组，支持Windows Vista操作系统，并支持PDF文档格式取词。 <br/><strong>轻松学习</strong>：查词或学习时将生词归纳入生词本，以悬浮窗口的形式方便您随时背单词。每日新鲜的网络学习内容让您和爱词霸百万会员分享共进！<br/><br/>下载地址：<a href="http://g.iciba.com/" target="_blank" rel="external">http://g.iciba.com/</a><br/>分为两个版本，一个是在线安装版，一个是离线安装版，自己喜欢！]]></description>
		</item>
		
</channel>
</rss>
