﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-别昨非-随笔分类-java standard</title><link>http://www.blogjava.net/zuofei-bie/category/44379.html</link><description>java and php</description><language>zh-cn</language><lastBuildDate>Thu, 24 Mar 2011 17:01:35 GMT</lastBuildDate><pubDate>Thu, 24 Mar 2011 17:01:35 GMT</pubDate><ttl>60</ttl><item><title>在Linux上部署Apache James</title><link>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346980.html</link><dc:creator>别昨非</dc:creator><author>别昨非</author><pubDate>Thu, 24 Mar 2011 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346980.html</guid><wfw:comment>http://www.blogjava.net/zuofei-bie/comments/346980.html</wfw:comment><comments>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuofei-bie/comments/commentRss/346980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuofei-bie/services/trackbacks/346980.html</trackback:ping><description><![CDATA[<p>　　由于项目需要部署在Linux上，而又使用到Apache James作邮件服务器，因此总结了一下在Linux上部署Apache James的步骤，写得比较凌乱。</p>
<p>在Linux上部署Apache James</p>
<p>前提工作：</p>
<p>1）由于Apache James邮件服务需要用到1024以下的端口，因此请用root用户登录进行部署。</p>
<p>2）需要先安装JDK1.5或以上版本，部署前请确保您的JDK环境变量如JAVA_HOME等已经设置好。</p>
<p>3）James 启动时，其SMTP 服务默认在 25 端口启动，POP3 服务默认在 110 端口启动， NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。Linux下查过这些端口是否被占用的命令是：lsof -i:端口号，例如：</p>
<p>[root@nhslj-app ~]# lsof -i:25</p>
<p>COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE NODE NAME</p>
<p>sendmail 3268 root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv4&nbsp;&nbsp; 8650&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP nhslj-app:smtp (LISTEN)</p>
<p>这表示25端口正在被sendmail服务占用。</p>
<p>关闭SendMail服务：</p>
<p>一般RedHat的系统安装时都会默认安装了sendmail邮件服务，因此在部署Apache James时，需要把sendmail关闭。可以通过以下方法来关闭sendmail，以防止系统重启时又自动启动sendmail服务。</p>
<p>1）用chkconfig --list sendmail命令查看sendmail的情况：</p>
<p>[root@susun177 ~]# chkconfig --list sendmail</p>
<p>sendmail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:关闭&nbsp; 1:关闭&nbsp; 2:启用&nbsp; 3:关闭&nbsp; 4:启用&nbsp; 5:启用&nbsp; 6:关闭</p>
<p>2）通过chkconfig sendmail off命令来关闭sendmail的启动：</p>
<p>[root@susun177 ~]# chkconfig sendmail off</p>
<p>3）这时再用chkconfig --list sendmail命令可以查看到sendmail的所有启动级别都已经关闭了：</p>
<p>[root@susun177 ~]# chkconfig --list sendmail</p>
<p>sendmail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:关闭&nbsp; 1:关闭&nbsp; 2:关闭&nbsp; 3:关闭&nbsp; 4:关闭&nbsp; 5:关闭&nbsp; 6:关闭</p>
<p>这样，即使重新启动Linux系统，sendmail服务也不会自动启动了。</p>
<p>前期工作做完了，接下来就是部署Apache&nbsp; James了。</p>
<p>1）解压Apache James包（apache-james-2.3.2.tar.gz）：</p>
<p>[root@susun177 local]# tar zxvf apache-james-2.3.2.tar.gz</p>
<p>解压后，会多了一个目录james-2.3.2</p>
<p>2）进入james-2.3.2/bin目录，运行run.sh，生成james的配置文件config.xml：</p>
<p>[root@susun177 bin]# sh run.sh </p>
<p>run.sh: line 37: /usr/local/james-2.3.2/bin/phoenix.sh: 权限不够</p>
<p>权限不够（估计是解压后run.sh文件没有赋予执行权限），可以执行以下命令：</p>
<p>[root@susun177 bin]# chmod +x run.sh phoenix.sh</p>
<p>然后再次运行run.sh命令：</p>
<p>[root@susun177 bin]# sh run.sh</p>
<p>Using PHOENIX_HOME:&nbsp;&nbsp; /usr/local/james-2.3.2</p>
<p>Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp</p>
<p>Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/java/jdk1.5.0</p>
<p>Running Phoenix: </p>
<p>Phoenix 4.2</p>
<p>James Mail Server 2.3.2</p>
<p>Remote Manager Service started plain:4555</p>
<p>POP3 Service started plain:110</p>
<p>SMTP Service started plain:25</p>
<p>NNTP Service started plain:119</p>
<p>FetchMail Disabled</p>
<p>说明James启动成功。</p>
<p>3）按Ctrl +
C退出James，编辑config.xml文件。生成的config.xml放置在../james-2.3.2/apps/james/SAR-
INF目录下。关于James的config.xml的修改，网上很多资料，请自行查阅。在这里，只写关键的修改：</p>
<p>A）找到&lt;servernames autodetect="true" autodetectIP="true"&gt; 设成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autodetect="false" autodetectIP="false" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autodetct设为true会自动侦测你的主机名,设成false会用你指定的server name。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autodetectIP设为true会为你的servername加上ip。</p>
<p>B）设置servername 将默认的为localhost改成你的server名字 如king.cn： </p>
<p>&lt;servername&gt;king.cn&lt;/servername&gt;</p>
<p>然后修改Linux的hosts主机设置文件：</p>
<p>[root@susun177 SAR-INF]# vi /etc/hosts</p>
<p>在打开的文件添加一行，然后保存：</p>
<p>192.168.1.177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; king.cn&nbsp;&nbsp; king</p>
<p>注意：第一个为IP地址&nbsp; 第二个为主机域名&nbsp; 第三个为主机名称</p>
<p>提示：名字后面应该要加上.com或者.cn这样163等邮件服务器才不会拒绝的。</p>
<p>C）注释掉</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;processor&gt; relay-denied &lt;/processor&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;notice&gt;550 - Requested action not taken: relaying denied&lt;/notice&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mailet&gt;</p>
<p>D）配置DNS Server，先通过netstat命令查看dns配置</p>
<p>[root@susun177 SAR-INF]# netstat -rn</p>
<p>Kernel IP routing table</p>
<p>Destination&nbsp;&nbsp;&nbsp;&nbsp; Gateway&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Genmask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags&nbsp;&nbsp; MSS Window&nbsp; irtt Iface</p>
<p>192.168.1.0&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 255.255.255.0&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth0</p>
<p>169.254.0.0&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 255.255.0.0&nbsp;&nbsp;&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 eth0</p>
<p>找到&lt;dnsserver&gt;，在&lt;servers&gt;里最前面添加一行： &lt;server&gt;192.168.1.0&lt;/server&gt; ，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时设置autodiscover为false。</p>
<p>&nbsp;&nbsp; &lt;dnsserver&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servers&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Enter ip address of your DNS server, one IP address per server --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- element. --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server&gt;127.0.0.1&lt;/server&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server&gt;10.168.0.10&lt;/server&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servers&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Change autodiscover to false if you would like to turn off autodiscovery --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- and set the DNS servers manually in the &lt;servers&gt; section --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;autodiscover&gt;false&lt;/autodiscover&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;authoritative&gt;false&lt;/authoritative&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Maximum number of entries to maintain in the DNS cache --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;maxcachesize&gt;50000&lt;/maxcachesize&gt;</p>
<p>&nbsp;&nbsp; &lt;/dnsserver&gt;</p>
<p>E）修改James数据库连接字符串：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;driver&gt;oracle.jdbc.driver.OracleDriver&lt;/driver&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dburl&gt;jdbc:oracle:thin:@192.168.1.17:1521:hello&lt;/dburl&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user&gt;hello&lt;/user&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;kitty&lt;/password&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keep-alive&gt;select 1 from dual&lt;/keep-alive&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;testOnBorrow&gt;true&lt;/testOnBorrow&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;testOnReturn&gt;true&lt;/testOnReturn&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max&gt;50&lt;/max&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/data-source&gt;</p>
<p>以上用的是oracle数据库，如果是其他数据库，则需要修改为对应的数据库连接驱动，以及数据库用户信息。</p>
<p>注意：一定要记得配置&lt;keep-alive&gt;，该参数的意思是，在使用连接池的连接之前，是否需要验证该连接是否有效。之前，我没有设置该参数，结果总是出现收不到邮件的问题。</p>
<p>4）优化一下James内存，在../james-2.3.2/bi/phoenix.sh加入：</p>
<p># Set Heap Size 2007-0818,fix OutOfMemory bug while transporting big mail</p>
<p>PHOENIX_JVM_OPTS="$PHOENIX_JVM_OPTS -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M"</p>
<p>修改../james-2.3.2/conf/wrapper.conf的jvm配置，设置初始内存128M,最大内存512M </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Initial Java Heap Size (in MB) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #wrapper.java.initmemory=16 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wrapper.java.initmemory=128 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Maximum Java Heap Size (in MB) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #wrapper.java.maxmemory=64 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wrapper.java.maxmemory=512</p>
<p>5） 复制数据库驱动到../james-2.3.2/lib目录下，我用的是oracle数据库，驱动包为：ojdbc14.jar</p>
<p>6）重启Apache James服务。</p>
<p>7）最后，进入邮件系统全局管理，将系统的域名改为上述的server name。</p>
<p>8）如无意外一切OK。</p>
<img src ="http://www.blogjava.net/zuofei-bie/aggbug/346980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuofei-bie/" target="_blank">别昨非</a> 2011-03-24 20:35 <a href="http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最简单的Map遍历的写法</title><link>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346922.html</link><dc:creator>别昨非</dc:creator><author>别昨非</author><pubDate>Thu, 24 Mar 2011 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346922.html</guid><wfw:comment>http://www.blogjava.net/zuofei-bie/comments/346922.html</wfw:comment><comments>http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuofei-bie/comments/commentRss/346922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuofei-bie/services/trackbacks/346922.html</trackback:ping><description><![CDATA[<ol class="dp-j" start="1">
    <li><span><span>Map&lt;String,String&gt;&nbsp;map&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashMap&lt;String,String&gt;();&nbsp;&nbsp;</span></span></li>
    <li><span><span class="keyword">for</span><span>(Map.Entry&lt;String,&nbsp;String&gt;&nbsp;entry&nbsp;:&nbsp;map.entrySet()){&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;=&nbsp;entry.getValue();&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;entry.getKey();&nbsp;&nbsp;</span></li>
    <li><span>}</span></li>
</ol>
<img src ="http://www.blogjava.net/zuofei-bie/aggbug/346922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuofei-bie/" target="_blank">别昨非</a> 2011-03-24 11:08 <a href="http://www.blogjava.net/zuofei-bie/archive/2011/03/24/346922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] 常用 JPA annotation 参考 </title><link>http://www.blogjava.net/zuofei-bie/archive/2010/03/24/316474.html</link><dc:creator>别昨非</dc:creator><author>别昨非</author><pubDate>Wed, 24 Mar 2010 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/zuofei-bie/archive/2010/03/24/316474.html</guid><wfw:comment>http://www.blogjava.net/zuofei-bie/comments/316474.html</wfw:comment><comments>http://www.blogjava.net/zuofei-bie/archive/2010/03/24/316474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuofei-bie/comments/commentRss/316474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuofei-bie/services/trackbacks/316474.html</trackback:ping><description><![CDATA[<p><strong>Table <br />
</strong>Table用来定义entity主表的name，catalog，schema等属性。 <br />
元数据属性说明： <br />
&#183;&nbsp;name: 表名 <br />
&#183;&nbsp;catalog: 对应关系数据库中的catalog <br />
&#183;&nbsp;schema：对应关系数据库中的schema <br />
&#183;&nbsp;UniqueConstraints:定义一个UniqueConstraint数组，指定需要建唯一约束的列 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@Table(name="CUST")<br />
public class Customer { ... }<br />
　　<br />
<strong>SecondaryTable</strong> <br />
一个entity class可以映射到多表，SecondaryTable用来定义单个从表的名字，主键名字等属性。 <br />
元数据属性说明： <br />
&#183;&nbsp;name: 表名 <br />
&#183;&nbsp;catalog: 对应关系数据库中的catalog <br />
&#183;&nbsp;schema：对应关系数据库中的schema <br />
&#183;&nbsp;pkJoin: 定义一个PrimaryKeyJoinColumn数组，指定从表的主键列 <br />
&#183;&nbsp;UniqueConstraints:定义一个UniqueConstraint数组，指定需要建唯一约束的列 <br />
下面的代码说明Customer类映射到两个表，主表名是CUSTOMER，从表名是CUST_DETAIL，从表的主键列和主表的主键列类型相同，列名为CUST_ID。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@Table(name="CUSTOMER")<br />
@SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID"))<br />
public class Customer { ... }</p>
<p><strong>SecondaryTables </strong><br />
当一个entity class映射到一个主表和多个从表时，用SecondaryTables来定义各个从表的属性。 <br />
元数据属性说明： <br />
&#183;&nbsp;value： 定义一个SecondaryTable数组，指定每个从表的属性。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Table(name = "CUSTOMER")<br />
@SecondaryTables( value = {<br />
@SecondaryTable(name = "CUST_NAME", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }),<br />
@SecondaryTable(name = "CUST_ADDRESS", pkJoin = { @PrimaryKeyJoinColumn(name = "STMO_ID", referencedColumnName = "id") }) })<br />
public class Customer {}</p>
<p>UniqueConstraint <br />
UniqueConstraint定义在Table或SecondaryTable元数据里，用来指定建表时需要建唯一约束的列。 <br />
元数据属性说明： <br />
&#183;&nbsp;columnNames:定义一个字符串数组，指定要建唯一约束的列名。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@Table(name="EMPLOYEE",<br />
uniqueConstraints={@UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})}<br />
)<br />
public class Employee { ... }</p>
<p><strong>Column <br />
</strong>Column元数据定义了映射到数据库的列的所有属性：列名，是否唯一，是否允许为空，是否允许更新等。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:列名。 <br />
&#183;&nbsp;unique: 是否唯一 <br />
&#183;&nbsp;nullable: 是否允许为空 <br />
&#183;&nbsp;insertable: 是否允许插入 <br />
&#183;&nbsp;updatable: 是否允许更新 <br />
&#183;&nbsp;columnDefinition: 定义建表时创建此列的DDL <br />
&#183;&nbsp;secondaryTable: 从表名。如果此列不建在主表上（默认建在主表），该属性定义该列所在从表的名字。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
public class Person {<br />
@Column(name = "PERSONNAME", unique = true, nullable = false, updatable = true)<br />
private String name;<br />
@Column(name = "PHOTO", columnDefinition = "BLOB NOT NULL", secondaryTable="PER_PHOTO")<br />
private byte[] picture;</p>
<p><strong>JoinColumn <br />
</strong>如果在entity class的field上定义了关系（one2one或one2many等），我们通过JoinColumn来定义关系的属性。JoinColumn的大部分属性和Column类似。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:列名。 <br />
&#183;&nbsp;referencedColumnName:该列指向列的列名（建表时该列作为外键列指向关系另一端的指定列） <br />
&#183;&nbsp;unique: 是否唯一 <br />
&#183;&nbsp;nullable: 是否允许为空 <br />
&#183;&nbsp;insertable: 是否允许插入 <br />
&#183;&nbsp;updatable: 是否允许更新 <br />
&#183;&nbsp;columnDefinition: 定义建表时创建此列的DDL <br />
&#183;&nbsp;secondaryTable: 从表名。如果此列不建在主表上（默认建在主表），该属性定义该列所在从表的名字。 <br />
下面的代码说明Custom和Order是一对一关系。在Order对应的映射表建一个名为CUST_ID的列，该列作为外键指向Custom对应表中名为ID的列。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
public class Custom {<br />
@OneToOne<br />
@JoinColumn(<br />
name="CUST_ID", referencedColumnName="ID", unique=true, nullable=true, updatable=true)<br />
public Order getOrder() {<br />
return order;<br />
}</p>
<p><strong>JoinColumns</strong> <br />
如果在entity class的field上定义了关系（one2one或one2many等），并且关系存在多个JoinColumn，用JoinColumns定义多个JoinColumn的属性。 <br />
元数据属性说明： <br />
&#183;&nbsp;value: 定义JoinColumn数组，指定每个JoinColumn的属性。 <br />
下面的代码说明Custom和Order是一对一关系。在Order对应的映射表建两列，一列名为CUST_ID，该列作为外键指向Custom对应表中名为ID的列,另一列名为CUST_NAME，该列作为外键指向Custom对应表中名为NAME的列。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
public class Custom {<br />
@OneToOne<br />
@JoinColumns({<br />
@JoinColumn(name="CUST_ID", referencedColumnName="ID"),<br />
@JoinColumn(name="CUST_NAME", referencedColumnName="NAME")<br />
})<br />
public Order getOrder() {<br />
return order;<br />
}</p>
<p><strong>Id </strong><br />
声明当前field为映射表中的主键列。id值的获取方式有五种：TABLE, SEQUENCE, IDENTITY, AUTO, NONE。Oracle和DB2支持SEQUENCE，SQL Server和Sybase支持IDENTITY,mysql支持AUTO。所有的数据库都可以指定为AUTO，我们会根据不同数据库做转换。NONE (默认)需要用户自己指定Id的值。元数据属性说明： <br />
&#183;&nbsp;generate():主键值的获取类型 <br />
&#183;&nbsp;generator():TableGenerator的名字（当generate=GeneratorType.TABLE才需要指定该属性） <br />
下面的代码声明Task的主键列id是自动增长的。(Oracle和DB2从默认的SEQUENCE取值，SQL Server和Sybase该列建成IDENTITY，mysql该列建成auto increment。) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@Table(name = "OTASK")<br />
public class Task {<br />
@Id(generate = GeneratorType.AUTO)<br />
public Integer getId() {<br />
return id;<br />
}<br />
}</p>
<p><strong>IdClass</strong> <br />
当entity class使用复合主键时，需要定义一个类作为id class。id class必须符合以下要求:类必须声明为public，并提供一个声明为public的空构造函数。必须实现Serializable接，覆写 equals()和hashCode（）方法。entity class的所有id field在id class都要定义，且类型一样。 <br />
元数据属性说明： <br />
&#183;&nbsp;value: id class的类名 <br />
&nbsp;&nbsp; public class EmployeePK implements <a title="Java爱好者" href="http://www.blogjava.net/rain1102">Java</a>.io.Serializable{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String empName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer empAge;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public EmployeePK(){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean equals(Object obj){ ......}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int hashCode(){......}<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; @IdClass(value=com.acme.EmployeePK.class)<br />
&nbsp;&nbsp;&nbsp; @Entity(access=FIELD)<br />
&nbsp;&nbsp;&nbsp; public class Employee {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Id String empName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Id Integer empAge;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<strong>MapKey</strong> <br />
在一对多，多对多关系中，我们可以用Map来保存集合对象。默认用主键值做key，如果使用复合主键，则用id class的实例做key，如果指定了name属性，就用指定的field的值做key。 <br />
元数据属性说明： <br />
&#183;&nbsp;name: 用来做key的field名字 <br />
下面的代码说明Person和Book之间是一对多关系。Person的books字段是Map类型，用Book的isbn字段的值作为Map的key。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>@Table(name = "PERSON")<br />
public class Person {<br />
@OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")<br />
@MapKey(name = "isbn")<br />
private Map books = new HashMap();<br />
}</p>
<p><br />
<strong>OrderBy <br />
</strong>在一对多，多对多关系中，有时我们希望从数据库加载出来的集合对象是按一定方式排序的，这可以通过OrderBy来实现，默认是按对象的主键升序排列。 <br />
元数据属性说明： <br />
&#183;&nbsp;value: 字符串类型，指定排序方式。格式为"fieldName1 [ASC|DESC],fieldName2 [ASC|DESC],......",排序类型可以不指定，默认是ASC。 <br />
下面的代码说明Person和Book之间是一对多关系。集合books按照Book的isbn升序，name降序排列。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>@Table(name = "MAPKEY_PERSON")<br />
public class Person {<br />
@OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")<br />
@OrderBy(name = "isbn ASC, name DESC")<br />
private List books = new ArrayList();<br />
}</p>
<p><br />
<strong>PrimaryKeyJoinColumn</strong> <br />
在三种情况下会用到PrimaryKeyJoinColumn。 <br />
&#183;&nbsp;继承。 <br />
&#183;&nbsp;entity class映射到一个或多个从表。从表根据主表的主键列（列名为referencedColumnName值的列），建立一个类型一样的主键列，列名由name属性定义。 <br />
&#183;&nbsp;one2one关系，关系维护端的主键作为外键指向关系被维护端的主键，不再新建一个外键列。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:列名。 <br />
&#183;&nbsp;referencedColumnName:该列引用列的列名 <br />
&#183;&nbsp;columnDefinition: 定义建表时创建此列的DDL <br />
下面的代码说明Customer映射到两个表，主表CUSTOMER,从表CUST_DETAIL，从表需要建立主键列CUST_ID，该列和主表的主键列id除了列名不同，其他定义一样。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Entity<br />
@Table(name="CUSTOMER")<br />
@SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID"，referencedColumnName="id"))<br />
public class Customer {<br />
@Id(generate = GeneratorType.AUTO)<br />
public Integer getId() {<br />
return id;<br />
}<br />
}</p>
<p>下面的代码说明Employee和EmployeeInfo是一对一关系，Employee的主键列id作为外键指向EmployeeInfo的主键列INFO_ID。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Table(name = "Employee")<br />
public class Employee {<br />
@OneToOne<br />
@PrimaryKeyJoinColumn(name = "id", referencedColumnName="INFO_ID")<br />
EmployeeInfo info;<br />
}</p>
<p><strong>PrimaryKeyJoinColumns</strong> <br />
如果entity class使用了复合主键，指定单个PrimaryKeyJoinColumn不能满足要求时，可以用PrimaryKeyJoinColumns来定义多个PrimaryKeyJoinColumn。 <br />
元数据属性说明： <br />
&#183;&nbsp;value: 一个PrimaryKeyJoinColumn数组，包含所有PrimaryKeyJoinColumn。 <br />
下面的代码说明了Employee和EmployeeInfo是一对一关系。他们都使用复合主键，建表时需要在Employee表建立一个外键，从Employee的主键列id,name指向EmployeeInfo的主键列INFO_ID和INFO_NAME. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@IdClass(EmpPK.class)<br />
@Table(name = "EMPLOYEE")<br />
public class Employee {<br />
private int id;<br />
private String name;<br />
private String address;<br />
@OneToOne(cascade = CascadeType.ALL)<br />
@PrimaryKeyJoinColumns({<br />
@PrimaryKeyJoinColumn(name="id", referencedColumnName="INFO_ID"),<br />
@PrimaryKeyJoinColumn(name="name" , referencedColumnName="INFO_NAME")})<br />
EmployeeInfo info;<br />
}<br />
@Entity<br />
@IdClass(EmpPK.class)<br />
@Table(name = "EMPLOYEE_INFO")<br />
public class EmployeeInfo {<br />
@Id<br />
@Column(name = "INFO_ID")<br />
private int id;<br />
@Id<br />
@Column(name = "INFO_NAME")<br />
private String name;<br />
}</p>
<p><strong>Transient <br />
</strong>Transient用来注释entity的属性，指定的这些属性不会被持久化，也不会为这些属性建表。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Transient<br />
private String name;</p>
<p><strong>Version </strong><br />
Version指定实体类在乐观事务中的version属性。在实体类重新由EntityManager管理并且加入到乐观事务中时，保证完整性。每一个类只能有一个属性被指定为version，version属性应该映射到实体类的主表上。 <br />
下面的代码说明versionNum属性作为这个类的version，映射到数据库中主表的列名是OPTLOCK。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Version<br />
@Column("OPTLOCK")<br />
protected int getVersionNum() { return versionNum; }</p>
<p><strong>Lob</strong> <br />
Lob指定一个属性作为数据库支持的大对象类型在数据库中存储。使用LobType这个枚举来定义Lob是二进制类型还是字符类型。 <br />
LobType枚举类型说明： <br />
&#183;&nbsp;BLOB 二进制大对象，Byte[]或者Serializable的类型可以指定为BLOB。 <br />
&#183;&nbsp;CLOB 字符型大对象，char[]、Character[]或String类型可以指定为CLOB。 <br />
元数据属性说明： <br />
&#183;&nbsp;fetch： 定义这个字段是lazy loaded还是eagerly fetched。数据类型是FetchType枚举，默认为LAZY,即lazy loaded. <br />
&#183;&nbsp;type： 定义这个字段在数据库中的JDBC数据类型。数据类型是LobType枚举，默认为BLOB。 <br />
下面的代码定义了一个BLOB类型的属性和一个CLOB类型的属性。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Lob<br />
@Column(name="PHOTO" columnDefinition="BLOB NOT NULL")<br />
protected JPEGImage picture;<br />
@Lob(fetch=EAGER, type=CLOB)<br />
@Column(name="REPORT")<br />
protected String report;</p>
<p><strong>JoinTable</strong> <br />
JoinTable在many-to-many关系的所有者一边定义。如果没有定义JoinTable，使用JoinTable的默认值。 <br />
元数据属性说明： <br />
&#183;&nbsp;table:这个join table的Table定义。 <br />
&#183;&nbsp;joinColumns:定义指向所有者主表的外键列，数据类型是JoinColumn数组。 <br />
&#183;&nbsp;inverseJoinColumns:定义指向非所有者主表的外键列，数据类型是JoinColumn数组。 <br />
下面的代码定义了一个连接表CUST和PHONE的join table。join table的表名是CUST_PHONE，包含两个外键，一个外键是CUST_ID，指向表CUST的主键ID，另一个外键是PHONE_ID，指向表PHONE的主键ID。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@JoinTable(<br />
table=@Table(name=CUST_PHONE),<br />
joinColumns=@JoinColumn(name="CUST_ID", referencedColumnName="ID"),<br />
inverseJoinColumns=@JoinColumn(name="PHONE_ID", referencedColumnName="ID")<br />
)</p>
<p><strong>TableGenerator</strong> <br />
TableGenerator定义一个主键值生成器，在Id这个元数据的generate＝TABLE时，generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。 <br />
生成器是为多个实体类提供连续的ID值的表，每一行为一个类提供ID值，ID值通常是整数。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:生成器的唯一名字，可以被Id元数据使用。 <br />
&#183;&nbsp;table:生成器用来存储id值的Table定义。 <br />
&#183;&nbsp;pkColumnName:生成器表的主键名称。 <br />
&#183;&nbsp;valueColumnName:生成器表的ID值的列名称。 <br />
&#183;&nbsp;pkColumnValue:生成器表中的一行数据的主键值。 <br />
&#183;&nbsp;initialValue:id值的初始值。 <br />
&#183;&nbsp;allocationSize:id值的增量。 <br />
下面的代码定义了两个生成器empGen和addressGen，生成器的表是ID_GEN。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity public class Employee {<br />
...<br />
@TableGenerator(name="empGen",<br />
table=@Table(name="ID_GEN"),<br />
pkColumnName="GEN_KEY",<br />
valueColumnName="GEN_VALUE",<br />
pkColumnValue="EMP_ID",<br />
allocationSize=1)<br />
@Id(generate=TABLE, generator="empGen")<br />
public int id;<br />
...<br />
}<br />
@Entity public class Address {<br />
...<br />
@TableGenerator(name="addressGen",<br />
table=@Table(name="ID_GEN"),<br />
pkColumnValue="ADDR_ID")<br />
@Id(generate=TABLE, generator="addressGen")<br />
public int id;<br />
...<br />
}</p>
<p><strong>SequenceGenerator</strong> <br />
SequenceGenerator定义一个主键值生成器，在Id这个元数据的generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。生成器是数据库支持的sequence对象。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:生成器的唯一名字，可以被Id元数据使用。 <br />
&#183;&nbsp;sequenceName:数据库中，sequence对象的名称。如果不指定，会使用提供商指定的默认名称。 <br />
&#183;&nbsp;initialValue:id值的初始值。 <br />
&#183;&nbsp;allocationSize:id值的增量。 <br />
下面的代码定义了一个使用提供商默认名称的sequence生成器。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@SequenceGenerator(name="EMP_SEQ", allocationSize=25)</p>
<p><strong>DiscriminatorColumn </strong><br />
DiscriminatorColumn定义在使用SINGLE_TABLE或JOINED继承策略的表中区别不继承层次的列。 <br />
元数据属性说明： <br />
&#183;&nbsp;name:column的名字。默认值为TYPE。 <br />
&#183;&nbsp;columnDefinition:生成DDL的sql片断。 <br />
&#183;&nbsp;length:String类型的column的长度，其他类型使用默认值10。 <br />
下面的代码定义了一个列名为DISC，长度为20的String类型的区别列。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
@Entity<br />
@Table(name="CUST")<br />
@Inheritance(strategy=SINGLE_TABLE,<br />
discriminatorType=STRING,<br />
discriminatorValue="CUSTOMER")<br />
@DiscriminatorColumn(name="DISC", length=20)<br />
public class Customer { ... }</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/zuofei-bie/aggbug/316474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuofei-bie/" target="_blank">别昨非</a> 2010-03-24 21:07 <a href="http://www.blogjava.net/zuofei-bie/archive/2010/03/24/316474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>List and  ArrayList and LinkList 区别与用法</title><link>http://www.blogjava.net/zuofei-bie/archive/2010/03/22/316159.html</link><dc:creator>别昨非</dc:creator><author>别昨非</author><pubDate>Mon, 22 Mar 2010 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/zuofei-bie/archive/2010/03/22/316159.html</guid><wfw:comment>http://www.blogjava.net/zuofei-bie/comments/316159.html</wfw:comment><comments>http://www.blogjava.net/zuofei-bie/archive/2010/03/22/316159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zuofei-bie/comments/commentRss/316159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zuofei-bie/services/trackbacks/316159.html</trackback:ping><description><![CDATA[List and&nbsp; ArrayList: <br />
1、List是一个接口，ArrayList是一个实现了List接口的具体类。 他们是父子关系，我们常用的是ArrayList,但常用List的引用去操作ArrayList 这是一个简单的面向接口编程的一种，如：List myList = new ArrayList(); <br />
2、他们主要是用来保存对象的集合，记得是保存对象的哦，你可别传个int进去啊 <br />
3、要取出它里面保存的对象可以用下标，如：Object aaa = myList.get(0); 这样我们就把保存在myList里的第一个对象取出来给了 aaa 啦。<br />
<br />
&nbsp;ArrayList:<br />
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">ArrayList其实是包装了一个<font color="#800000"><span style="background-color: rgb(255,255,255)">数组</font></span>Object[]，当实例化一个ArrayList时，一个数组也被实例化，当向ArrayList中添加对象是，数组的大小也相应的改变。这样就带来以下有特点：</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong>快速随即访问</strong> 你可以随即访问每个元素而不用考虑性能问题，通过调用get(i)方法来访问下标为i的数组元素。</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong>向其中添加对象速度慢</strong> 当你创建数组是并不能确定其容量，所以当改变这个数组时就必须在内存中做很多事情。</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong>操作其中对象的速度慢</strong> 当你要想数组中任意两个元素中间添加对象时，数组需要移动所有后面的对象。 <br />
<br />
LinkList:<br />
</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">LinkedList是通过<font color="#ff0000">节点直接彼此连接</font>来实现的。每一个节点都包含前一个节点的引用，后一个节点的引用和节点存储的值。当一个新节点插入时，只需要修改其中保持先后关系的节点的引用即可，当删除记录时也一样。这样就带来以下有特点：</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong>操作其中对象的速度快 </strong>只需要改变连接，新的节点可以在内存中的任何地方</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong>不能随即访问</strong> 虽然存在get()方法，但是这个方法是通过遍历接点来定位的所以速度慢。<br />
<br />
<strong><span>一些结论：</span></strong><br />
<span>当一些被定义好的数据需要放到与数组对应的</span><span lang="EN-US">List</span><span>中，</span><span lang="EN-US"><span class="hilite1">ArrayList</span></span><span>是很好的选择，因为它可以动态变化，但是不要在整个应用程序中频繁的使用。<br />
你要很方便的操作其中的数据而不用随即访问时;<span lang="EN-US">LinkList</span><span>是很好的选择。如果你要频繁随机访问建议使用ArrayList。</span></span></p>
<br />
<img src ="http://www.blogjava.net/zuofei-bie/aggbug/316159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zuofei-bie/" target="_blank">别昨非</a> 2010-03-22 14:46 <a href="http://www.blogjava.net/zuofei-bie/archive/2010/03/22/316159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>