﻿<?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-SIMONE-随笔分类-rmi</title><link>http://www.blogjava.net/wangxinsh55/category/30592.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 03 Apr 2008 07:00:58 GMT</lastBuildDate><pubDate>Thu, 03 Apr 2008 07:00:58 GMT</pubDate><ttl>60</ttl><item><title>java RMI 相关</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190605.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 03 Apr 2008 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190605.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/190605.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/190605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/190605.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一 .RMI概述RMI（Remote Method Invocation）&nbsp;&nbsp;&nbsp; RMI是分布式对象软件包，它简化了在多台计算机上的JAVA应用之间的通信。必须在jdk1.1以上RMI用到的类&nbsp;&nbsp;&nbsp;&nbsp; java.rmi.Remote&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190605.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/190605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-04-03 13:32 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA-RMI学习心得</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190600.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 03 Apr 2008 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190600.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/190600.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/190600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/190600.html</trackback:ping><description><![CDATA[<p>学习java tutorial中的rmi章节，读书笔记</p>
<br />
<p>JAVA-RMI 所采用的机制：</p>
<p>1. 某Object需要remote call ，则它所有的方法都放在一个新声明的接口中，该接口必须extends&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remote接口</p>
<p>&nbsp;&nbsp; Compute接口中存放所有需要进行远程调用的方法，让实现该接口的类来实现这些被远程调用的方法</p>
<p>package compute;</p>
<p>import java.rmi.Remote;<br />
import java.rmi.RemoteException;</p>
<p>public interface Compute extends Remote {<br />
&nbsp;&nbsp;&nbsp; Object executeTask(Task t) throws RemoteException;<br />
}</p>
<p><br />
2.采用远程调用的方法同样有一些参数和返回值，对于这些参数和返回值，在不同JAVA虚拟机间传输，RM&nbsp; I采取的是值传递，所以所有的参数和返回值必须extends Serializable </p>
<p>package compute;</p>
<p>import java.io.Serializable;</p>
<p>public interface Task extends Serializable {<br />
&nbsp;&nbsp;&nbsp; Object execute();<br />
}</p>
<p><br />
/*******************************************************************************************<br />
上面为第一部分，在这当中，我们设计了一个接口，其中包含需要远程调用的方法，然后让该接口的实现者（即远程对象的owner）来实现这些方法<br />
*******************************************************************************************/</p>
<p><br />
3. 现在我们为了得到远程对象，就来实现一下上面定义的接口：<br />
&nbsp;&nbsp; main函数中，新建一个远程对象engine,并将它与名字name邦定：Naming.rebind(name, engine);</p>
<p>注：The superclass UnicastRemoteObject supplies implementations for a number of&nbsp;&nbsp;&nbsp;&nbsp; java.lang.Object methods (equals, hashCode, toString) so that they are defined&nbsp;&nbsp;&nbsp;&nbsp; appropriately for remote objects. UnicastRemoteObjectalso includes constructors and&nbsp;&nbsp;&nbsp;&nbsp; static methods used to export a remote object, that is, make the remote object available&nbsp;&nbsp;&nbsp;&nbsp; to receive incoming calls from clients. </p>
<p>package engine;</p>
<p>import java.rmi.*;<br />
import java.rmi.server.*;<br />
import compute.*;</p>
<p>public class ComputeEngine extends UnicastRemoteObject<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; implements Compute<br />
{<br />
&nbsp;&nbsp;&nbsp; public ComputeEngine() throws RemoteException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public Object executeTask(Task t) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.execute();<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (System.getSecurityManager() == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(new RMISecurityManager());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = "//host/Compute";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compute engine = new ComputeEngine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Naming.rebind(name, engine);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("ComputeEngine bound");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("ComputeEngine exception: " + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.getMessage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>/*******************************************************************************************<br />
上面为第二部分，在这当中，我们得到了一个实现了Compute接口的远程对象engine，注意：engine中只有那些Compute接口中的方法能够被远程调用，其他方法只能本地调用。现在，将远程对象engine邦定到RMI Registry 。 client可以从registry那里得到engine的引用，实际上是一个stub，相当于一个engine的代理，远程方法被client调用以后，可以改变engine的状态<br />
*******************************************************************************************/<br />
&nbsp;&nbsp; <br />
4. 下面我们实现那些远程方法调用时所要用到的参数：Task</p>
<p>package client;</p>
<p>import compute.*;<br />
import java.math.*;</p>
<p>public class Pi implements Task {</p>
<p>&nbsp;&nbsp;&nbsp; /** constants used in pi computation */<br />
&nbsp;&nbsp;&nbsp; private static final BigDecimal ZERO = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.valueOf(0);<br />
&nbsp;&nbsp;&nbsp; private static final BigDecimal&nbsp; ONE = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.valueOf(1);<br />
&nbsp;&nbsp;&nbsp; private static final BigDecimal FOUR = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.valueOf(4);</p>
<p>&nbsp;&nbsp;&nbsp; /** rounding mode to use during pi computation */<br />
&nbsp;&nbsp;&nbsp; private static final int roundingMode = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.ROUND_HALF_EVEN;</p>
<p>&nbsp;&nbsp;&nbsp; /** digits of precision after the decimal point */<br />
&nbsp;&nbsp;&nbsp; private int digits;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Construct a task to calculate pi to the specified<br />
&nbsp;&nbsp;&nbsp;&nbsp; * precision.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Pi(int digits) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.digits = digits;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Calculate pi.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Object execute() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return computePi(digits);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Compute the value of pi to the specified number of <br />
&nbsp;&nbsp;&nbsp;&nbsp; * digits after the decimal point.&nbsp; The value is <br />
&nbsp;&nbsp;&nbsp;&nbsp; * computed using Machin's formula:<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pi/4 = 4*arctan(1/5) - arctan(1/239)<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * and a power series expansion of arctan(x) to <br />
&nbsp;&nbsp;&nbsp;&nbsp; * sufficient precision.<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static BigDecimal computePi(int digits) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int scale = digits + 5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal arctan1_5 = arctan(5, scale);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal arctan1_239 = arctan(239, scale);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal pi = arctan1_5.multiply(FOUR).subtract(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arctan1_239).multiply(FOUR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return pi.setScale(digits, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.ROUND_HALF_UP);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Compute the value, in radians, of the arctangent of <br />
&nbsp;&nbsp;&nbsp;&nbsp; * the inverse of the supplied integer to the speficied<br />
&nbsp;&nbsp;&nbsp;&nbsp; * number of digits after the decimal point.&nbsp; The value<br />
&nbsp;&nbsp;&nbsp;&nbsp; * is computed using the power series expansion for the<br />
&nbsp;&nbsp;&nbsp;&nbsp; * arc tangent:<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 + <br />
&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; (x^9)/9 ...<br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static BigDecimal arctan(int inverseX, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int scale) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal result, numer, term;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal invX = BigDecimal.valueOf(inverseX);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal invX2 = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal.valueOf(inverseX * inverseX);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numer = ONE.divide(invX, scale, roundingMode);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = numer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numer = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numer.divide(invX2, scale, roundingMode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int denom = 2 * i + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; term = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numer.divide(BigDecimal.valueOf(denom),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scale, roundingMode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((i % 2) != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = result.subtract(term);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = result.add(term);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } while (term.compareTo(ZERO) != 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>5. 最后我们实现client对象<br />
&nbsp;&nbsp; 远程对象comp是通过RMI的注册表来查找到的</p>
<p>package client;</p>
<p>import java.rmi.*;<br />
import java.math.*;<br />
import compute.*;</p>
<p>public class ComputePi {<br />
&nbsp;&nbsp;&nbsp; public static void main(String args[]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (System.getSecurityManager() == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(new RMISecurityManager());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = "//" + args[0] + "/Compute";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compute comp = (Compute) Naming.lookup(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pi task = new Pi(Integer.parseInt(args[1]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BigDecimal pi = (BigDecimal) (comp.executeTask(task));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(pi);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("ComputePi exception: " + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.getMessage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/190600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-04-03 13:25 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>