<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Helo</title>
    <description></description>
    <link>http://helo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>移植Liferay4.2.2到websphere+db2环境</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/120953" style="color:red;">http://helo.javaeye.com/blog/120953</a>&nbsp;
          发表时间: 2007年09月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial"><font face="Arial">
<p><font face="Arial">Author: Helo<br />
Mail: probilo@gamil.com</font></p>
<p><font face="Arial">在开始迁移以前，需要准备好：<br />
1. websphere ： 必须是6.0以上的版本才支持Lifieray 4.2，因为6.0以下的websphere其XML版本不支持已经升级到xml 2.4 version 的liferay 4.2。如果使用的是websphere6.0.0.x，则需要pack到6.0.2.x 以上，否则登录页面无法显示（这是一个response的错误）；如果使用的是websphere6.1.0.x，则需要pack到6.1.0.9，pack2解决了前面提到登录页面错误问题，而到pack9这是修正了webshpere自带的portlet container的bug，这个bug会导致liferay无法加载portlet。<br />
2. db2 8.1以上版本：最好使用8.2。<br />
完成以上安装以后，开始进入迁移设置。这里我使用的版本是webshpere 6.1.0.9 + db2 8.2，都是中文版。</font></p>
<p><font face="Arial"><strong>一、在websphere中建立DB2连接</strong><br />
我的websphere目录为D:\Program Files\IBM\WebSphere\AppServer，下面我将使用%WEBSPHERE%来代替。<br />
1. 打开cmd, 进入%WEBSPHERE%\bin目录下，执行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startserver server1<br />
等待完成启动，打开IE，输入地址：http://localhost:9060/admin(貌似6.0的默认端口号是9090，有点忘了!^0^!), 确定后进入管理页面。选择：资源--&gt;JDBC--&gt;JDBC提供程序--&gt;新建。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称：LDB<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类路径：${DB2_JDBC_DRIVER_PATH}/db2java.zip，或者清空这里，但要将db2java.zip拷贝到%WEBSPHERE%\lib\ext 下面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实现类名：COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource<br />
其他默认，点击确定。在页面上方，点击保存。<br />
2. 选择：资源--&gt;JDBC--&gt;JDBC提供程序--&gt;LDB--&gt;数据源--&gt;新建<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称：liferaydatabasesource<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI名称：jdbc/LiferayPool<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库名：lportal<br />
其余默认，点击确定。保存。<br />
3. 选择：资源--&gt;JDBC--&gt;JDBC提供程序--&gt;LDB--&gt;数据源--&gt;liferaydatabasesource--&gt;JAAS － J2C 认证数据--&gt;新建<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入当前使用的用户标识和密码，这个必须是websphere服务启动所在的用户名和密码，或者说是建立lportal数据库时的表schema，因为Liferay将把这个用户名作为schema到DB2中去做查询。<br />
点击确定。保存。<br />
4. 选择：资源--&gt;JDBC--&gt;JDBC提供程序--&gt;LDB--&gt;数据源--&gt;liferaydatabasesource<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 组件管理的认证别名:选择*/lportal(*表示websphere所建立节点名称)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容器管理的认证别名:选择*/lportal<br />
点击确定并保存。<br />
然后，点击&ldquo;测试连接&rdquo;，如果一切正常的话，应该可以页面上方看到连接成功的信息。<br />
到此，DB2的数据库JDBC配置完成（其他的数据库可类推）。</font></p>
<p><font face="Arial"><strong>二、安全性配置<br />
</strong>1. 选择：安全性--&gt;安全管理、应用程序和基础结构。 <br />
2. 点击&ldquo;安全配置向导&rdquo;，默认，点击下一步。<br />
3. 选择&ldquo;联合存储&rdquo;，点击下一步。<br />
4. 用户名和密码(随意)输入（我的是&quot;system&quot;和&quot;system&quot;），下一步，点击完成。<br />
5. 回到主页面，&ldquo;用户帐户存储库&rdquo;选择&ldquo;联合存储&rdquo;，点击&ldquo;设置为当前&rdquo;。<br />
点击保存。<br />
最后，将liferay-portal-jaas-4.2.2.jar(<a href="http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607">http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607</a>)拷贝到%WEBSPHERE%\lib\ext下。</font></p>
<p><font face="Arial"><strong>三、邮件配置</strong><br />
1. 选择：资源--邮件--&gt;邮件提供程序--&gt;Built-in Mail Provider--&gt;邮件会话--&gt;新建<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称：liferaymail<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNDI名称：mail/MailSession<br />
其余默认，点击确定，并保存。</font></p>
<p><font face="Arial"><strong>四、部署Liferay应用</strong><br />
在部署以前，我们需要Liferay的ear或war包，可以直接从<a href="http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607">http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607</a>下载，当然也可以自己生成。这里，我选择的是自己生成。<br />
1. 建立Liferay开发环境并部署到tomcat（可参考：<a href="http://www.javaeye.com/post/369646">http://www.javaeye.com/post/369646</a>）<br />
2. 打开cmd，进入%TOMCAT_HOME%\webapps\ROOT，执行命令：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jar -cvf liferay_portal.war *.*<br />
以上命令将把该目录下的所有文件打包为liferay_portal.war<br />
3. 打包完成后，回到webshpere控制台，选择：应用程序--&gt;安装新的应用程序<br />
本地文件系统：选择刚才打包好的liferay_portal.war<br />
上下文根：输入&quot;/&quot;<br />
点击下一步。<br />
4. 一直点下一步，直到&ldquo;将资源引用映射至资源&rdquo;这一步<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标资源 JNDI 名称：mail/MailSession<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定认证方法：选择&quot;使用缺省方法（多到一映射）&quot;,选择&quot;*/lportal&quot;认证<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目标资源 JNDI 名称：liferaydatabasesource <br />
一直下一步，直到&ldquo;完成&rdquo;，然后等代websphere安装完成，并在点击页面下面的&ldquo;保存&rdquo;。<br />
注意：如果使用的是6.0，在本文第3步以后，可能是一个安全性警告，可忽略之。到本文第四步以后，会有一个选择，请选择&ldquo;所有认证用户&rdquo;。<br />
5. 完成了war包的安装以后，websphere还需要一些共用库来支持Liferay，需要拷贝%TOMCAT_HOME%\common\lib\ext下的所有jar到%WEBSPHERE%\lib\ext下。如果没有建立开发环境并成功生成自己的war文件，也可以到<a href="http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607">http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607</a>去下载一个liferay-portal-tomcat-4.2.2的绑定版，然后将里面的%TOMCAT_HOME%\common\lib\ext的东西拷过去也是可以的，不过一定注意版本问题。</font></p>
<p><font face="Arial">至此，迁移完成！<br />
重新启动websphere，让lib生效。<br />
打开cmd, 进入%WEBSPHERE%\bin目录下，执行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stopserver server1<br />
完成后，再执行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startserver server1<br />
在浏览器中输入：http://localhost:9080/, 应该可以看到登录画面并正常登录了。如果还有错，可以检查下：应用程序--&gt;企业应用程序，该页面的表中是所有已安装的应用，看看liferay_portal是否已经正常启动；其次是检查下是否有带含&ldquo;sample&rdquo;的应用，如果有的话，全部卸载吧，这样应该就没问题了。</font></p>
<p><font face="Arial">&nbsp;</font></p>
<p><font face="Arial"></font>&nbsp;</p>
</font></font>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/120953#comments" style="color:red;">已有 <strong>5</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Sep 2007 15:42:00 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/120953</link>
        <guid>http://helo.javaeye.com/blog/120953</guid>
      </item>
      <item>
        <title>Eclipse+DB2下Liferay 4.2.2扩展开发环境的建立</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/120179" style="color:red;">http://helo.javaeye.com/blog/120179</a>&nbsp;
          发表时间: 2007年09月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="Section1"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><o:p><font face="Arial">
<p><font size="2">Author:Helo<br />
Email:porbilo@gmail.com<br />
最近在一直看Portal的一些东西，以后会逐渐把一些相关的东西写上来，也算一个总结吧。</font></p>
<p><font size="2"></font><br />
<font size="2">一、环境： <br />
JDK： JDK 1.4<br />
Liferay： Liferay-portal-tomca-4.2.2.zip <br />
Liferay Src： liferay-portal-src-4.2.2.zip <br />
OS： Windows xp <br />
Tomcat: Tomcat-5.5.X (bundle with liferay JKD 1.4) <br />
Database：DB2 8.2<br />
Jikes： Jikes-1.22 <br />
Ant： Apace-ant-1.65 </font></p>
<font size="2">
<p dir="ltr" style="MARGIN-RIGHT: 0px"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在系统环境变量里面新建JAVA_HOME、JIKES_HOME、ANT_HOME，在PATH环境变量里面添加%JAVA_HOME%\bin;%JIKES_HOME%\bin;%ANT_HOME%\bin。这里的ANT_HOME和PATH也可以不用设置,使用eclipse中自带的就好，这里就顺便设置下。另：这里使用的是JDK1.4，若要使用1.5则需使用官网提供的tomcat的JDK1.5绑定版。</p>
<p><br />
<strong>二、Eclipse环境下的portal工程加载&nbsp;<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Liferay的源代码实际上是一个Eclipse工程文件（该项目名称叫portal）。在Eclipse工作目录(我的目录为D:\liferay_4.2，此后记为${WORKSPACE})下建立portal目录，然后把下载下来的源代码liferay-portal-src-4.2.2.zip解压缩portal目录下。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择File-&gt;New-&gt;Project-&gt;Java Project，输入项目名称为&ldquo;portal&rdquo;，保持默认的&ldquo;create new project in workspace&rdquo;，选择&ldquo;Finish&rdquo;结束。&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果上一步成功，那么已经可以在左侧栏看到源代码的目录结构了；并且右键点击项目的根目录，选&ldquo;Properties&rdquo;，选&ldquo;Java Build Path&rdquo;的&ldquo;Libraries&rdquo;标签，应该能够看到所有需要的jar格式库文件在里面了。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载了portal项目之后的Eclipse的Package Explorer栏。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择Windows showViewAnt在出现的Ant视图中单击Add build files,在弹出对话框中选择portal项目中根目录下build.xml文件。</p>
<p><br />
<strong>三、基于Tomcat的扩展开发环境建立</strong> <br />
修改portal下release.properties文件：</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="attribute">lp.source.dir</span><span>=</span><span class="attribute-value">D</span><span>:/liferay_4.2/portal &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="attribute">lp.ext.dir</span><span>=</span><span class="attribute-value">D</span><span>:/liferay_4.2/ext &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="attribute">lp.eclipse.dir</span><span>=</span><span class="attribute-value">D</span><span>:/liferay_4.2/eclipse &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="attribute">lp.eclipse.project.name</span><span>=</span><span class="attribute-value">ext</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑在${WORKSPACE}/portal\tools\ext_tmpl\ext-ejb\classes下的portal-ext.properties文件，修改#portal.release=enterprise为portal.release=professional。<br />
然后在最后加入下面的语句：</p>
<div class="dp-highlighter">
<div class="bar"><font size="2"></font></div>
<ol class="dp-xml">
    <li class="alt"><span><font size="2"><span class="attribute">hibernate.dialect</span><span>=</span><span class="attribute-value">org</span><span>.hibernate.dialect.DB2Dialect &nbsp;&nbsp;</span></font></span> </li>
    <li class=""><span></span><font size="2"><span class="attribute">custom.sql.function.isnull</span><span>=</span><span class="attribute-value">CAST</span><span>(?&nbsp;AS&nbsp;VARCHAR(32672))&nbsp;IS&nbsp;NULL&nbsp; &nbsp;&nbsp;</span></font> </li>
    <li class="alt"><span></span><font size="2"><span class="attribute">custom.sql.function.isnotnull</span><span>=</span><span class="attribute-value">CAST</span><span>(?&nbsp;AS&nbsp;VARCHAR(32672))&nbsp;IS&nbsp;NOT&nbsp;NULL&nbsp;&nbsp;</span></font> </li>
</ol>
</div>
<p><font size="2">liferay使用了hibernate做持久化，而liferay 4.3以前的所有版本在对DB2的支持上都有问题，所以这里需要手动配置hibernate.dialect和null的问题，否则无法启动或启动后出现莫名其妙的问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回到Eclipse中的Ant视图中，双击展开根节点Portal，双击打开根目录下的build.xml，应该可以在Outline看到很多Ant任务。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Outline下的ANT任务：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 顺序执行 clean, start, build-ext 。屏幕下方的命令行窗口会跳跃相关文字提示信息，如果一切正确，那么其中不应该有红色的错误信息（绝大多数此处可能出现的错误都是配置文件不正确所引起的）。特别注意的是，如果你已经正确设置了JIKES_HOME和PATH却仍然提示&ldquo;需要JIKES&rdquo;，则把你的PATH设置为绝对路径如：C:\jikes\bin（我曾被这个问题郁闷了N久!^0^!）。一切正常的话，那么${WORKSPACE}\ext 目录下应该生成了很多东西了。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压缩下载的liferay-portal-tomcat-4.2.2.zip（可运行的Liferay）到安装目录，以后假定此解压缩目录为${TOMCAT_HOME}。在${WORKSPACE}/ext目录下创建。<br />
app.server.${username}.properties配置文件，在其中添加如下内容： </font></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="attribute">lp.ext.dir</span><span>=${WORKSPACE}/ext&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="attribute">app.server.type</span><span>=</span><span class="attribute-value">tomcat</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="attribute">app.server.tomcat.dir</span><span>=${TOMCAT_HOME}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>仿照建立portal项目，选择File-&gt;New-&gt;Project-&gt;Java Project，输入项目名称为&ldquo;ext&rdquo;，保持默认的&ldquo;create new project in workspace&rdquo;，选择&ldquo;Finish&rdquo;结束。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果上一步成功，那么已经可以在左侧栏看到ext项目的目录结构了；并且右键点击项目的根目录，选&ldquo;Properties&rdquo;，选&ldquo;Java Build Path&rdquo;的&ldquo;Libraries&rdquo;标签，应该能够看到所有需要的jar格式库文件在里面了。&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装Tomcat插件支持(这里不在详述)。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后，在ant中点击deploy，即可完成部署。</p>
<p><font size="2"><strong>四、配置DB2数据库支持<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建liferay数据库lportal：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将${WORKSPACE}\sql下的build.xml加入ant试图，启动<font face="Arial">rebuild-db2即可（当然，你应该先装好DB2）。</font></font><font size="2"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改&nbsp;<font face="Arial">${TOMCAT_HOME}\conf\Catalina\localhost下的ROOT.xml文件：</font></font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Context</span><span>&nbsp;</span><span class="attribute">path</span><span>=</span><span class="attribute-value">&quot;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Resource</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jdbc/LiferayPool&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">auth</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;javax.sql.DataSource&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">driverClassName</span><span>=</span><span class="attribute-value">&quot;COM.ibm.db2.jdbc.app.DB2Driver&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">url</span><span>=</span><span class="attribute-value">&quot;jdbc:db2:lportal&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">username</span><span>=</span><span class="attribute-value">&quot;&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">password</span><span>=</span><span class="attribute-value">&quot;&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxActive</span><span>=</span><span class="attribute-value">&quot;100&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxIdle</span><span>=</span><span class="attribute-value">&quot;30&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxWait</span><span>=</span><span class="attribute-value">&quot;10000&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Resource</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mail/MailSession&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">auth</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;javax.mail.Session&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail.imap.host</span><span>=</span><span class="attribute-value">&quot;localhost&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail.pop3.host</span><span>=</span><span class="attribute-value">&quot;localhost&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail.smtp.host</span><span>=</span><span class="attribute-value">&quot;localhost&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail.store.protocol</span><span>=</span><span class="attribute-value">&quot;imap&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail.transport.protocol</span><span>=</span><span class="attribute-value">&quot;smtp&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Realm</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">className</span><span>=</span><span class="attribute-value">&quot;org.apache.catalina.realm.JAASRealm&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">appName</span><span>=</span><span class="attribute-value">&quot;PortalRealm&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">userClassNames</span><span>=</span><span class="attribute-value">&quot;com.liferay.portal.security.jaas.PortalPrincipal&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">roleClassNames</span><span>=</span><span class="attribute-value">&quot;com.liferay.portal.security.jaas.PortalRole&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">debug</span><span>=</span><span class="attribute-value">&quot;99&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">useContextClassLoader</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">Context</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后将db2java.jar拷贝到<font face="Arial">&nbsp;<font face="Arial">${TOMCAT_HOME}\</font>common\lib\ext下面即可。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此，扩展开发环境搭建完成！</p>
<p><font size="2">PS:</font><font size="2"><br />
</font>&nbsp;附件是本文的word文档，插入了一些图片可供参考。</p>
</font></font><font size="2">&nbsp;</font></o:p></font></span></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/120179#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 04 Sep 2007 12:13:00 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/120179</link>
        <guid>http://helo.javaeye.com/blog/120179</guid>
      </item>
      <item>
        <title>关于使用liferay+eclipse搭建开发环境的问题 </title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/105289" style="color:red;">http://helo.javaeye.com/blog/105289</a>&nbsp;
          发表时间: 2007年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在开始看Portal方面的东西，所以想拿liferay练练手。<br />然后，我参考网上的一些资料做liferay的环境搭配，但build源码的时候start不过.<br /><br />我改动的东西有： <br />1.将release.properties配置文件改名为release.user.properties,并改动其中的 <br />lp.ext.dir=D:/liferay/ext <br />2.将${WORKSPACE}/portal\tools\ext_tmpl\ext-ejb\classes下的 <br />portal-ext.properties文件，修改portal.release=enterprise为portal.release=professional。 <br />其余都没有动，然后开始执行clean,完成后执行start就报错了: <br /><pre name="code" class="java">
Buildfile: D:\liferay\portal\build.xml 
start: 
compile: 
compile: 
[mkdir] Created dir: D:\liferay\portal\portal-kernel\classes 
[javac] Compiling 48 source files to D:\liferay\portal\portal-kernel\classes

BUILD FAILED 
D:\liferay\portal\build.xml:11: The following error occurred while executing this line: 
D:\liferay\portal\build.xml:129: The following error occurred while executing this line: 
D:\liferay\portal\build-common-java.xml:29: Error running jikes compiler

Total time: 6 seconds 

</pre><br />开始的时候按照网上的资料改了不少配置文件，但build不过，就开始逐渐减少，后来到啥也不改（就把源码导入eclipse建立“portal”项目），在ant中start的时候还是这个错。不知道是不是我的环境配置或者版本的原因？<br /><br />环境： <br />jkd 1.5.06 <br />liferay4.1.3源码包 <br />eclipse3.1 <br />myeclipse4.1.1GA <br />tomcat5.5.12
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/105289#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jul 2007 08:40:52 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/105289</link>
        <guid>http://helo.javaeye.com/blog/105289</guid>
      </item>
      <item>
        <title>由框架中一个BUG引起的</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/91016" style="color:red;">http://helo.javaeye.com/blog/91016</a>&nbsp;
          发表时间: 2007年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天加班在给NEW GUYS做培训的时候，发生了一个莫名其妙的问题，几经周折，才发现是公司现有框架的一个BUG。</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">converter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">valueObject</span><span>&nbsp;</span><span class="attribute">objectID</span><span>=</span><span class="attribute-value">&quot;lib&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.icsc.tm.mscdao.tmjcs03VO&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;unique&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">converter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>正如XML中所描述的一样，框架应该保证在任何情况下都应该用一个com.icsc.tm.mscdao.tmjcs03VO对象去封装结果，但今天所发现的一个问题却是因为框架返回了一个莫名其妙的ArrayList造成的。在不同条件下我进一步确认了这个BUG。</p>
<p>本来这件事也没什么好说的，程序有BUG就跟天要下雨娘要嫁人一样，实非人力所能为。但联想到公司的现状，却也着实让人没了心情。想起当初那些在梦里都还想着程序的日子，想起一堆人拿着个满是残影的投影仪在一间堆满杂物的小房间大吵大闹的日子，几乎仿如隔世，谁还记得那也不过是1年前的日子啊。</p>
<p>走人看来是迟早的事了。只是眼看着自己曾经为之努力，还戏言要&ldquo;呆上10年的&rdquo;的公司，如今却上下不达，人心浮动，个中滋味实难以名状。旧人已去，新人还来，只不知，新人何时竟已成旧人？</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/91016#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 16 Jun 2007 20:03:00 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/91016</link>
        <guid>http://helo.javaeye.com/blog/91016</guid>
      </item>
      <item>
        <title>关于持久化</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/68651" style="color:red;">http://helo.javaeye.com/blog/68651</a>&nbsp;
          发表时间: 2007年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial"><strong>关于&ldquo;持久化&rdquo;<br />
</strong>J2EE程序访问数据库，这是一个无法避免的问题（否则也不算是J2EE了）。要将数据持久化到数据库，解决数据库中的规范数据和OO程序之间的交互是一个技巧性的问题，而O/R Mapping则为此提供了一种不错的解决方案。</font></p>
<p><font face="Arial"><strong>关于&ldquo;对象关系映射（O/R Mapping）&rdquo;<br />
</strong>这是当今最流行一种数据库持久化方案（另一种则是JDO，它基于字节码增强来实现持久化），如Hibernate，iBATIS。<br />
当我们从数据库中取出一条记录时，我们通常将其映射到持久化的java对象，即所谓只含getter和setter方法的类（这种没有任何行为的类被证明并不是十分正确，在类中恰当的提供某些行为或业务逻辑可以获得更好的效果）中，也称为领域模型。这样业务逻辑就可以表现为这些对象之间的交互，而不是直接操纵数据库里的字段。<br />
如何将数据库映射到领域模型呢？</font></p>
<p><font face="Arial"><strong>关于&ldquo;DAO&rdquo;</strong><br />
DAO(Data Access Object)数据访问对象，作为很早就出现的一种模式，至今仍然非常有用。他的作用是全权承担业务逻辑的持久化操作。<br />
</font><font face="Arial"></font></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessObject&nbsp;</span><span class="keyword">extends</span><span>&nbsp;BusinessHomeAction{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;insert(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BusinessObjectDAO&nbsp;businessObjectDAO&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BusinessObjectDAO(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;businessObjectDAO.insert(businessObjectModel); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(SQLException&nbsp;se){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(Exception&nbsp;e){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}finnaly{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessObjectDAO&nbsp;</span><span class="keyword">extends</span><span>&nbsp;BusinessHomeDAO{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;BusinessObjectModel&nbsp;findByPrimaryKey(BusinessObjectModel&nbsp;businessObjectModel)</span><span class="keyword">throws</span><span>&nbsp;SQLException,&nbsp;Exception{...}; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;insert(BusinessObjectModel&nbsp;businessObjectModel)</span><span class="keyword">throws</span><span>&nbsp;SQLException,&nbsp;Exception{...}; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;update(BusinessObjectModel&nbsp;businessObjectModel)</span><span class="keyword">throws</span><span>&nbsp;SQLException,&nbsp;Exception{...}; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;delete(BusinessObjectModel&nbsp;businessObjectModel)</span><span class="keyword">throws</span><span>&nbsp;SQLException,&nbsp;Exception{...}; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BusinessObjectModel&nbsp;</span><span class="keyword">extends</span><span>&nbsp;BusinessHomeModel{...}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这是一种简单DAO实现。也就是说，每一个领域模型就对应一个DAO操作（或者说每一个表就对应一个可操纵数据库的DAO对象）。DAO模式好处在于，将JDBC从业务逻辑中隐藏起来，业务逻辑不再关心象JDBC这样的底层操作，全权将其交给DAO处理,你可以很清楚的看到那些持久化对象被取出创建或者修改。而当你需要更改数据库或者栏位的时候，你只需要改掉DAO就好，而不需要重写你的业务逻辑。<br />
然而，这样的DAO实现其本质就是在JDBC之上实现了一层薄薄的封装，对于现在复杂而厚重的商业逻辑持久化来说，它看起来确实显得&ldquo;单薄&rdquo;了些。<br />
- 这是一种基于SQL组装的模型，但它不是自动的，我们必须自己去实现（事实上现在通常是使用代码自动生称的方式，即你可能要特制你的代码生成器，但对于业务逻辑中一些特殊的持久化操作，你仍然需要自己手动去实现SQL组装）。<br />
- 这样模型对于多表操作来说也是个问题。MODEL和DAO是一一对应的结果，使得将多个MODEL进行联合操作时，你将需要自己去实现对应的持久化逻辑，而怎么实现却是个问题（通常的实现就是选择某一个相关的DAO，直接在它后面追加一个多表操作的方法，即直接使用SQL语句，虽然这样看起来并不漂亮，但无疑它做起来是最简单的）。<br />
基于DAO这种简单的实现依然有很多问题，&ldquo;透明持久化&rdquo;概念提供了更优雅的解决方案。</p>
<p><font face="Arial"><strong>关于&ldquo;透明持久化&rdquo;</strong><br />
Transparent Persistence&ldquo;透明持久化&rdquo;，<br />
- 它是实现DAO的一种更好的方式（不要将其和上面谈到的那个并不漂亮的DAO实现搞混了）<br />
- 它通常是由框架来实现，而不是由应用本身来关心。它能完全剥离业务的持久化操作，仅仅只需提供一个接口供业务逻辑调用（如Hibernate的Session，JDO的PersistenceManger&mdash;&mdash;JDO并不是基于O/R映射，而是基于字节码增强来实现透明持久化的，iBATIS的SqlMap对象等）。它可能还有自己特殊的语意（如Hibernate的HQL，因为它必须自己实现真正的SQL，提供的HQL可以简化这一过程，同时也简化了业务逻辑持久化时的工作量）。<br />
- 它可以自动侦测所取出的对象的修改（当然，同时应该有提供缓存），并在事务提交时自动将修改后的状态持久化到数据库。<br />
- 它很复杂^-^<br />
虽然实现&ldquo;透明持久化&rdquo;方案非常复杂，但我们不需要重新发明轮子，多数情况下，Hibernate，iBATIS，JDO实现已经完全可以满足我们的持久化需求。</font></p>
<p><font face="Arial"><strong>关于Hibernate，iBATIS和JDO</strong><br />
Hibernate，iBATIS都是基于O/R映射的，但两者却非常的不同。<br />
iBATIS是SQL的映射，其设计理念为：将SQL语句在XML中定义，并预留占位符（可以指定参数的SQL类型和其他细节）。在执行时，占位符被指定的参数值所取代，参数来至参数映射表、JAVABEAN属性或者搜简单的参数对象。在执行SQL查询时，结果字段将被映射到对象，映射的方式与参数映射是一样的。<br />
而Hibernate则提供了更完善的透明持久化。它为应用程序追加了O/R映射的语意&mdash;&mdash;HQL。HQL查询语言让开发者可以在领域对象的层面来利用SQL的强大功能（即在一定程度是你不在需要自己组装SQL，或者说HQL让组装变得更简单了，而且也不再需要象上面那样，在大量的DAO面前不得不让特定的程序来生成笨重的代码）。<br />
JDO是一组规范，并定义了一系列API,它是除O/R映射以外，用另一种&mdash;&mdash;基于字节码增强的&mdash;&mdash;方式来实现透明持久化的。所谓的字节码增强，是指在做业务动作时，被增强的持久化对象实例如果被修改（即数据的变动通过字节码的变动而被侦测），就会通知JDO的状态管理器，从而做出相应的insert、update或delete动作持久化到数据库。<br />
但是，最终，这些透明持久化方案还得和我们自己的DAO策略集合起来。</font></p>
<p><font face="Arial">持久化的最终结果是要将数据存入数据库中，DAO模式提供了一种更优雅的持久化解决方案（比起业务代码直接使用JDBC来说）。而如何实现DAO是一个重要的问题。DAO模式的最终目的，是为了将&ldquo;与持久化相关的代码&rdquo;从业务逻辑中分离出来。所以，如果是自己使用JDBC，做一个DAO&mdash;&mdash;即使是很薄的那种&mdash;&mdash;也是很有必要的，如同上面提到的那个例子。但既然有了Hibernate，iBATIS和JDO等等这样一些优秀的&ldquo;透明持久化&rdquo;方案，自己再去发明轮子可算不上明智。在实现DAO时，如果用到了这些开源方案，针对不同的方案实现自己不同的DAO，仍然是个好主意（如当使用Hibernate的时将其封装到自己的DAO里）。</font></p>
<p><font color="#339966" face="Arial">注：以上这些都是已有的概念，我只是将其规整了下并加入了一点自己的理解。如有不对的地方，请不吝指教，十分感谢！</font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/68651#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Apr 2007 17:06:00 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/68651</link>
        <guid>http://helo.javaeye.com/blog/68651</guid>
      </item>
      <item>
        <title>小验下BigDecimal几种构造方法的效率及其他</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/56770" style="color:red;">http://helo.javaeye.com/blog/56770</a>&nbsp;
          发表时间: 2007年03月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>主要是想验证下不同的BigDecimal构造器的效率.</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;my.test.java; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.math.BigDecimal; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;目的：&nbsp;&nbsp;1.&nbsp;&nbsp;测试在循环中对Object付值效率； </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp;BigDecimal的几个构造类型的效率； </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp;关于new&nbsp;String()； </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;结论：&nbsp;&nbsp;1.&nbsp;&nbsp;在循环外生成一个变量句柄和在循环内生成一个变量的句柄， </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再付值，其效率相当；需要注意的是，在循环内，对象生命周期会随循环的结束而使其不可达 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而最终被GC回收，而循环外的对象将保留最后一次结果直到方法或类执行完成。 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp;new&nbsp;BigDecimal(double&nbsp;d)&nbsp;&nbsp;&nbsp;&nbsp;：50 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;BigDecimal(int&nbsp;d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;：1 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;BigDecimal(String&nbsp;d)&nbsp;&nbsp;&nbsp;&nbsp;：10 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这三种构造方式new&nbsp;BigDecimal(double&nbsp;d)效率最低，其 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;效率比int类型的慢50倍，new&nbsp;BigDecimal(String&nbsp;d)比int类型慢10倍； </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;&quot;XXX&quot;比new&nbsp;String(&quot;XXX&quot;)快上30倍。原因在于String此处有一个 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于内存的特殊分配方式及取值方式。String&nbsp;str&nbsp;=&nbsp;&quot;XXX&quot;的时候，会先查找内存中是否有相同 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值&quot;XXX&quot;,如果有，则将str指向&quot;XXX&quot;,否则才会执行new&nbsp;String(&quot;XXX&quot;)。 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;mingyong </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@date&nbsp;20070301 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestObjInLoop&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;</span><span class="number">10000000</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;temp&nbsp;=&nbsp;</span><span class="string">&quot;按时大家发射点发射点法&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;BigDecimal&nbsp;tempBig&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BigDecimal(</span><span class="number">2.045</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop&nbsp;TestObjInLoop&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;TestObjInLoop(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">long</span><span>&nbsp;start&nbsp;=&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop.newObj(2.045); </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;newObj():&quot;+(System.currentTimeMillis()-start)); </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;System.currentTimeMillis(); </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop.newObj(2); </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;newObj():&quot;+(System.currentTimeMillis()-start)); </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;System.currentTimeMillis(); </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop.newObj(&quot;2.0435&quot;); </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;newObj():&quot;+(System.currentTimeMillis()-start)); </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop.newString(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;newString():&quot;</span><span>+(System.currentTimeMillis()-start)); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObjInLoop.derectString(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;derectString():&quot;</span><span>+(System.currentTimeMillis()-start)); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;strIn(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//String&nbsp;str&nbsp;=&nbsp;this.temp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;bg&nbsp;=&nbsp;tempBig;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;srtOut(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//String&nbsp;str&nbsp;=&nbsp;&quot;&quot;; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;bg&nbsp;; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//str&nbsp;=&nbsp;this.temp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bg&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.tempBig; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;newObj(</span><span class="keyword">double</span><span>&nbsp;num){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;bg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BigDecimal(num); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;newObj(</span><span class="keyword">int</span><span>&nbsp;num){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;bg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BigDecimal(</span><span class="number">2</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;newObj(String&nbsp;num){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;bg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BigDecimal(num); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;newString(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;bg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String(</span><span class="string">&quot;士大夫ddddd大师傅&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;derectString(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;bg&nbsp;=&nbsp;</span><span class="string">&quot;士大夫ddddd大师傅&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/56770#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 01 Mar 2007 16:45:57 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/56770</link>
        <guid>http://helo.javaeye.com/blog/56770</guid>
      </item>
      <item>
        <title>开 始</title>
        <author>bilo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://helo.javaeye.com">bilo</a>&nbsp;
          链接：<a href="http://helo.javaeye.com/blog/56228" style="color:red;">http://helo.javaeye.com/blog/56228</a>&nbsp;
          发表时间: 2007年02月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>我是个健忘的人,老是会忘掉很多重要的事,后来也试图用记事本来弥补,但发现我终于连记事本也忘了.</p>
<p>这个事情让我很郁闷,最终导致我对自己的健忘症听之任之.</p>
<p>直到现在,我才知道或许是太纵容的缘故,我已经大概忘却了前26年来的大部分事情.</p>
<p>每当我想回忆下以前的种种,以便不要忘的太快时,发现自己已然忘却了.</p>
<p>想到这个,甚至让我突然间忘掉了我将要干什么.</p>
<p>最终,我发现真的应该记录点什么,起码让10年后的我知道自己是怎么来的吧.</p>
<p>这个地方很安静,也不会有人来打扰我,正好.</p>
<p>我一个人DE狂欢.</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://helo.javaeye.com/blog/56228#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 27 Feb 2007 13:52:33 +0800</pubDate>
        <link>http://helo.javaeye.com/blog/56228</link>
        <guid>http://helo.javaeye.com/blog/56228</guid>
      </item>
  </channel>
</rss>