﻿<?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-断点-随笔分类-EJB3.0</title><link>http://www.blogjava.net/tfzhu/category/43562.html</link><description>每天进步一点点！</description><language>zh-cn</language><lastBuildDate>Thu, 14 Jan 2010 20:19:14 GMT</lastBuildDate><pubDate>Thu, 14 Jan 2010 20:19:14 GMT</pubDate><ttl>60</ttl><item><title>如何进行WEB应用打包 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309382.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309382.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309382.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309382.html</trackback:ping><description><![CDATA[<p><font face="Verdana">一个Web 应用发布到Jboss 服务器时需要打成war包。<br />
下面介绍<span style="color: red">jar命令行</span>及<span style="color: red">Ant任务</span>两种war文件的打包方式。</font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font style="color: #0000ff" face="Verdana">1.命令行下进行war 文件打包。<br />
</font></span>在Dos 窗口中进入到WEB 应用根目录下(WebRoot下)，执行如下命令，如：<br />
<span style="color: #008000">jar cvf <font face="Verdana">EJBClient</font>.war *，</span>再把打包的<font face="Verdana">EJBClient</font>.war拷贝到C:\jboss-5.0.0.GA\server\default\deploy发布。</font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">2.在Ant 任务中进行war文件打包。</font></span><br />
build.xml文件如下：<br />
<span style="color: #008000">&nbsp;<font face="Verdana">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;project name="EJBClient" default="war" basedir="."&gt;<br />
&nbsp;&lt;property environment="env" /&gt;<br />
&nbsp;&lt;property name="jboss.home" value="${env.JBOSS_HOME}" /&gt;<br />
&nbsp;&lt;property name="jboss.server.config" value="default" /&gt;<br />
&nbsp;&lt;target name="war" description="创建WEB 发布包"&gt;<br />
&nbsp;&nbsp;&lt;war warfile="${basedir}/${ant.project.name}.war" webxml="${basedir}/WebRoot/WEB-INF/web.xml"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;classes dir="${basedir}/WebRoot/WEB-INF/classes"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="**/*.class" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/classes&gt;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&lt;lib dir="${basedir}/WebRoot/WEB-INF/lib"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="*.jar" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/lib&gt;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&lt;webinf dir="${basedir}/WebRoot"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="*.*" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/webinf&gt;<br />
&nbsp;&nbsp;&lt;/war&gt;<br />
&nbsp;&lt;/target&gt;<br />
&nbsp;<br />
&nbsp;&lt;target name="deploy" depends="war" description="发布WAR"&gt;<br />
&nbsp;&nbsp;&lt;copy file="${basedir}\${ant.project.name}.war" todir="${jboss.home}\server\${jboss.server.config}\deploy"/&gt;<br />
&nbsp;&lt;/target&gt;<br />
&nbsp;<br />
&nbsp;&lt;target name="undeploy"&nbsp; description="卸载WAR"&gt;<br />
&nbsp;&nbsp;&lt;delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.war"/&gt;<br />
&nbsp;&lt;/target&gt;<br />
&lt;/project&gt;</font></span></font></p>
<br />
posted @ 2009-03-30 18:15 断点 阅读(145) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 23:11 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJBTHREE-1337: do not get WebServiceContext property from stateless bean context。</title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309381.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309381.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309381.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309381.html</trackback:ping><description><![CDATA[<p><span style="color: #ff0000"><span style="color: #ff0000">do not get WebServiceContext property from stateless bean context, it should already have been injected</span></span></p>
<p><font face="Verdana">这个主要原因就在stateless bean的实现类。</font></p>
<p><font face="Verdana">仔细查看后发现，原来我在实现类的每个方法前加入了 @WebMethod(指定暴露给外界的方法)，因此去掉就可以了。</font></p>
<p><font face="Verdana"><br />
</font><span style="color: #008000"><span style="color: #008000">13:41:39,168 WARN&nbsp; [StatelessBeanContext] </span></span><span style="color: #008000"><span style="color: #008000"><span style="color: #ff0000">EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected<br />
</span>13:41:39,215 WARN&nbsp; [InterceptorsFactory] EJBTHREE-1246: Do not use InterceptorsFactory with a ManagedObjectAdvisor, InterceptorRegistry should be used via the bean container<br />
13:41:39,215 WARN&nbsp; [InterceptorsFactory] EJBTHREE-1246: Do not use InterceptorsFactory with a ManagedObjectAdvisor, InterceptorRegistry should be used via the bean container<br />
13:41:39,230 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public cn.ztf.bean.Order cn.ztf.service.impl.OrderServiceBean.getOrder(java.lang.String)<br />
13:41:39,246 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public java.lang.String </span></span><span style="color: #008000"><span style="color: #008000">cn.ztf.service.impl.OrderServiceBean.getUserName(java.lang.String)<br />
13:41:39,246 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public java.util.List </span></span><span style="color: #008000"><span style="color: #008000">cn.ztf.service.impl.OrderServiceBean.getOrders()<br />
13:41:39,246 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public cn.ztf.bean.Order cn.ztf.service.impl.OrderServiceBean.getOrder(java.lang.String)<br />
13:41:39,261 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public java.lang.String </span></span><span style="color: #008000"><span style="color: #008000">cn.ztf.service.impl.OrderServiceBean.getUserName(java.lang.String)<br />
13:41:39,261 WARN&nbsp; [InterceptorRegistry] applicable interceptors is non-existent for public java.util.List </span></span><span style="color: #008000"><span style="color: #008000">cn.ztf.service.impl.OrderServiceBean.getOrders()<br />
13:41:39,293 WARN&nbsp; [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected<br />
13:46:27,043 WARN&nbsp; [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected<br />
13:46:27,043 WARN&nbsp; [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected</span></span></p>
<p>&nbsp;<br />
posted @ 2009-03-30 14:33 断点 阅读(647) | 评论 (0) <br />
</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/309381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:50 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3.0容器模型的WEB服务 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309380.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309380.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309380.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309380.html</trackback:ping><description><![CDATA[<p><font face="Verdana">Web服务也是一种分布式技术，属于行业规范，可以跨平台及语言。<br />
EJB属于java平台规范，尽管理论上可以跨平台，但实现起来比较麻烦，所以其应用范围局限在java平台。</font></p>
<p><font face="Verdana">二者偏重点不同：<br />
<span style="color: #008000"><font style="color: #0000ff" face="Verdana">Web服务偏重的是这个系统对外提供什么功能；<br />
EJB偏重的是如何使用一个个组件组装这些功能。</font></span></font></p>
<p><font face="Verdana"></font><font face="Verdana">例如：一个硬盘，它对外提供的是存储服务，这是web服务的关注点；对于怎样组装这个硬盘，web服务并不关心，而这些是EJB所关注的。</font></p>
<p><font face="Verdana">JavaEE为web service提供了两种不同的编程模型：<span style="color: #0000ff">EJB容器模型、Web容器模型</span>。<br />
下面以最新的JAX-WS2.x规范(Java API for XML-based Web Services)介绍Webservice的开发。<br />
<span style="color: #008000"><font face="Verdana">注：JAX-WS的下载路径为<a href="https://jax-ws.dev.java.net/servlets/ProjectDocumentList?folderID=7796&amp;expandFolder=7796&amp;folderID=11088">https://jax-ws.dev.java.net/servlets/ProjectDocumentList?folderID=7796&amp;expandFolder=7796&amp;folderID=11088</a></font></span></font></p>
<p><font face="Verdana"></font><font face="Verdana">EJB容器模型的WEB服务的客户端开发：<br />
注：首先我们需要建立一个无状态SessionBean，然后把此无状态SessionBean发布为web service。</font></p>
<p><font face="Verdana">1.在应用的类路径下放入JAX-WS的全部jar文件，并且把引进的jar文件添加到类路径上，即右击项目名--&gt;Properties--&gt;Java Build Path--</font><font face="Verdana">&gt;Add JARS。<br />
如果你使用的是JDK6，这一步可以省略，因为JDK6已经绑定了JAX-WS。目前JDK6绑定的JAX-WS版本是2.0。</font></p>
<p><font face="Verdana">2.把JAX-WS产品lib目录中找到jaxws-api.jar和jaxb-api.jar，把这两个文件copy到JDK_HOME/jre/lib/endorsed目录下。</font></p>
<p><font face="Verdana">3.利用Web Service客户端生成工具(wsimport工具的Ant任务类)生成辅助类。<br />
build.xml文件内容如下：<br />
<span style="color: #008000">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;project name="WSClient" default="wsclientgen" basedir="."&gt;<br />
&nbsp;&lt;property name="src.dir" value="${basedir}/src" /&gt;<br />
&nbsp;<br />
&nbsp;&lt;path id="build.classpath" description="设置类路径"&gt;<br />
&nbsp;&nbsp;&lt;fileset dir="${basedir}/lib"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;include name="*.jar"&gt;&lt;/include&gt;<br />
&nbsp;&nbsp;&lt;/fileset&gt;<br />
&nbsp;&lt;/path&gt;<br />
&nbsp;<br />
&nbsp;&lt;target name="wsclientgen" description="生成webservice客户端辅助代码，执行后请刷新项目"&gt;<br />
&nbsp;&nbsp;&lt;taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" <br />
&nbsp;&nbsp;&nbsp;classpathref="build.classpath"/&gt;<br />
&nbsp;&nbsp;&lt;wsimport wsdl="http://localhost:8090/WebService/OrderServiceBean?wsdl"<br />
&nbsp;&nbsp;&nbsp;sourcedestdir="${src.dir}"&nbsp; package="cn.ztf.ws.client" keep="true"<br />
&nbsp;&nbsp; &nbsp;verbose="true" destdir="${basedir}/bin"/&gt;<br />
&nbsp;&lt;/target&gt;<br />
&lt;/project&gt;</span></font></p>
<p><font face="Verdana">4.借助辅助类调用Web Service。<br />
</font></p>
<br />
posted @ 2009-03-30 14:22 断点 阅读(169) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:48 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3.0中的MessageDrivenBean </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309379.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309379.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309379.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309379.html</trackback:ping><description><![CDATA[<p><font face="Verdana"><font face="Verdana">EJB3.0中MessageDrivenBean：</font></font></p>
<p><font face="Verdana">1.java消息驱动bean属于Java消息服务(Java Message Service，简称JMS)。</font></p>
<p><font face="Verdana">2.JMS是用于访问企业消息系统的开发商中心的API。企业消息系统可以协助应用软件通过网络进行</font><font face="Verdana">消息交互。</font></p>
<p><font face="Verdana">3.JMS的编程过程简单概括为：应用程序A--&gt;(消息)--&gt;Jboss JMS--&gt;(消息)--&gt;应用程序B。应用程</font><font face="Verdana">序A和应用程序B没有直接的代码关联，两者实现了解耦。消息传递系统的中心就是消息。</font></p>
<p><font face="Verdana">消息驱动Bean(MDB)是设计用来专门处理基于消息请求的组件，它和无状态Session Bean一样也使用</font><font face="Verdana">了实例池技术，容器可以使用一定数量的bean实例并发处理成百上千个JMS消息。正因为MDB具有处</font><font face="Verdana">理大量并发消息的能力，所以非常适合应用在一些消息网关产品。如果一个业务执行的时间很长，</font><font face="Verdana">而执行结果无需实时向用户反馈时，也很适合使用MDB。如订单成功后给用户发送一封电子邮件或发</font><font face="Verdana">送一条短信等。</font></p>
<p><font face="Verdana">消息有下面几种类型，他们都是派生自Message接口。<br />
StreamMessage：一种主体中包含Java基本值流的消息。其填充和读取均按顺序进行。<br />
MapMessage：一种主体中包含一组名-值对的消息。(没有定义条目顺序)<br />
TextMessage：一种主体中包含Java字符串的消息(例如：XML消息)<br />
ObjectMessage：一种主体中包含序列化Java对象的消息。<br />
BytesMessage：一种主体中包含连续字节流的消息。</font></p>
<p><font face="Verdana">消息的传递模型：<br />
JMS支持两种消息传递模型：点对点(point-to-point，简称PTP)和发布/订阅(publish/subscribe，</font><font face="Verdana">简称pub/sub)。<br />
二者有以下区别：<br />
<span style="color: red">1.PTP 消息传递模型规定了一条消息只能传递给一个接收方。采用javax.jms.Queue表示。<br />
2.Pub/sub 消息传递模型允许一条消息传递给多个接收方。采用javax.jms.Topic表示。</span><br />
注意：每种模型都通过扩展公用基类来实现。例如，javax.jms.Queue 和javax.jms.Topic都扩展自</font><font face="Verdana">javax.jms.Destination 类。</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">开发步骤如下：<br />
<span style="color: #0000ff">一、配置destinations-service.xml文件。<br />
</span>JBOSS使用一个XML文件配置队列地址，文件的取名格式应遵循*-service.xml，我取名为</font><font face="Verdana">destinations-service.xml。<br />
jboss默认的全局JNDI名称组成为<span style="color: red">："queue"+"/"+"目标地址"。</span><br />
开始JMS编程前，我们需要先配置消息到达的目标地址(Destination)，因为只有目标地址存在了，</font><font face="Verdana">我们才能发送消息到这个地址。由于每个应用服务器关于目标地址的配置方式都有所不同，下面以</font><font face="Verdana">jboss为例，配置一个queue类型的目标地址。<br />
</font><span style="color: #008000">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;server&gt;<br />
&nbsp;&nbsp; &lt;mbean code="org.jboss.mq.server.jmx.Queue"&nbsp; </span></p>
<p><span style="color: #008000">name="<span style="color: red">jboss.mq.destination:service=Queue,name=ztfQueue</span>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute name="JNDIName"&gt;<span style="color: red">queue/ztfQueue</span>&lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;depends optional-attribute-</span></p>
<p><span style="color: #008000">name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mbean&gt;<br />
&nbsp;&nbsp; &lt;mbean code="org.jboss.mq.server.jmx.Topic"&nbsp; </span></p>
<p><span style="color: #008000">name="<span style="color: red">jboss.mq.destination:service=Topic,name=ztfTopic</span>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute name="JNDIName"&gt;<span style="color: red">topic/ztfTopic</span>&lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;depends optional-attribute-</span></p>
<p><font face="Verdana"><span style="color: #008000">name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mbean&gt;<br />
&lt;/server&gt;<br />
</span>注意：任何队列或主题被部署之前，应用服务器必须先部署Destination Manager Mbean，所有我们</font><font face="Verdana">通过&lt;depends&gt;节点声明这一依赖。</font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">二、在java类中发送消息(用到jndi.properties)。<br />
</font></span>一般发送消息有以下步骤：<br />
1.得到一个JNDI初始化上下文(Context)<br />
<span style="color: #008000">InitialContext ctx = new InitialContext();</span></font></p>
<p><font face="Verdana">2.根据上下文查找一个连接工厂ConnectionFactory，改连接工厂是由JMS提供的，不需我们自己创</font><font face="Verdana">建，每个厂商都为它绑定了一个全局JNDI，我们通过它的全局JNDI便获取它；<br />
</font><span style="color: #008000">QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup</span><font face="Verdana"><span style="color: #008000">("ConnectionFactory");</span></font></p>
<p><font face="Verdana">3.从连接工厂得到一个连接QueueConnection。<br />
<span style="color: #008000">QueueConnection conn = factory.createQueueConnection();</span></font></p>
<p><font face="Verdana">4.通过连接来建立一个会话(Session);<br />
<span style="color: #008000">QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);<br />
</span>这句代码意思是：建立不需要事务的并且能自动确立消息已接收的会话。</font></p>
<p><font face="Verdana">5.查找目标地址：<br />
<span style="color: #008000">Destination destination=(Destination)ctx.lookup("queue/ztfQueue");</span></font></p>
<p><font face="Verdana">6.根据会话以及目标地址来建立消息生产者MessageProducer(QueueSender和TopicPublisher都扩展</font><font face="Verdana">自MessageProducer接口)：<br />
<span style="color: #008000">MessageProducer producer = session.createProducer(destination);<br />
TextMessage msg = session.createTextMessage("您好：荆州，这是我的第一个消息驱动Bean");<br />
producer.send(msg);</span></font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">三、采用MessageDrivenBean接收消息。</font></span><br />
当容器检测到bean守候的目标地址有消息到达时，容器调用onMessage()方法，将消息作为参数传入</font><font face="Verdana">MDB。MDB在onMessage()中决定如何处理改消息。你可以使用注解指定MDB监听哪一个目标地址</font><font face="Verdana">(Destination)。当MDB部署时，容器将读取其中的配置信息。</font></p>
<p><font face="Verdana">一个MDB通常要实现MessageListener接口，在接口定义了onMessage()方法。Bean通过它来处理收到</font><font face="Verdana">的JMS消息。</font><font face="Verdana"><br />
</font><span style="color: #008000"><span style="color: #008000">@MessageDriven(activationConfig=<br />
{<br />
&nbsp;@ActivationConfigProperty</span></span></p>
<p><span style="color: #008000"><span style="color: #008000">(propertyName="destinationType",propertyValue="javax.jms.Queue"),<br />
&nbsp;@ActivationConfigProperty</span></span></p>
<p><span style="color: #008000"><span style="color: #008000">(propertyName="destination",propertyValue="queue/ztfQueue"),<br />
&nbsp;@ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-</span></span></p>
<p><span style="color: #008000"><span style="color: #008000">acknowledge")<br />
})<br />
public class MessageDrivenBean implements MessageListener{<br />
&nbsp;public void onMessage(Message message) {<br />
&nbsp;&nbsp;TextMessage msg = (TextMessage)message;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;System.out.println(msg.getText());<br />
&nbsp;&nbsp;} catch (JMSException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</span></span></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">四、把工程src下的文件打成jar包(用到build.xml)，在C:\jboss-</font><font face="Verdana">5.0.0.GA\server\default\deploy进行部署。</font></span></font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">五、运行发送消息的java类，此时在console中就可看见结果了。</font></span></font></p>
<p><font face="Verdana"><span style="color: #0000ff"><font face="Verdana">六、至此，一个MessageDrivenBean开发就成功了。</font></span></font></p>
<br />
posted @ 2009-03-27 17:43 断点 阅读(158) | 评论 (0)&nbsp; 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:47 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3.0中的Entitybean </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309378.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309378.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309378.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309378.html</trackback:ping><description><![CDATA[<p><font face="Verdana">实体bean：<br />
1.它属于java持久化规范(简称JPA)里的技术，Entitybean通过元数据在javabean和数据库表之间建立起映射关系，然后Java程序员就可以使用</font><font face="Verdana">面向对象的编程思想来操纵数据库。</font></p>
<p><font face="Verdana">2.通过注解使实体bean与数据库表相映射。</font></p>
<p><font face="Verdana">3.当客户端远程调用EJB时，数据在传送工程中是需要序列化的&nbsp;，业务方法是要返回Entitybean对象到客户端，显然Entitybean对象是要进行</font><font face="Verdana">序列化的过程，所以要实现序列化接口，即对象在交互时需要实现序列化。</font></p>
<p><font face="Verdana">4.Entitybean主键值的生成方式。<br />
@GeneratedValue(strategy = GenerationType.IDENTITY)针对Mysql，<br />
@GeneratedValue(strategy = GenerationType.SEQUENCE)针对Oracle,<br />
@GeneratedValue(strategy = GenerationType.AUTO)自动匹配数据库。</font></p>
<p><font face="Verdana">5.需要保留一个无参的构造函数，是JPA规范要求的，如果没有，在运行时是要报错的。</font></p>
<p><font face="Verdana">6.对象之间的比较，通常采用对象标志属性来进行比较，也就是ID进行比较，因此现在重载hashCode、equals两个方法。</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术，目前实现的JPA规范的主流产品有Hibernate、Toplink和OpenJPA，在jboss中</font><font face="Verdana">采用了Hibernate作为其持久化实现产品。 </font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana">根据JPA规范的要求：在实体bean应用中，我们需要在应用的类路径下的META-INF目录加入持久化配置文件persistence.xml。<br />
persistence.xml文件用于指定Entitybean使用的数据源及EntityManager对象的默认行为。 <br />
persistence.xml的配置说明如下： <br />
<span style="color: #008000"><font style="color: #008000" face="Verdana">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/persistence <br />
&nbsp;http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"&gt;<br />
&nbsp;<br />
&nbsp;&lt;!--&nbsp; 一个持久化单元是一个Entitybean的集合，JTA代表全局事物。--&gt;<br />
&nbsp;&lt;persistence-unit name="ztf" transaction-type="JTA"&gt;<br />
&nbsp;&nbsp;&lt;jta-data-source&gt;java:/ztfDS&lt;/jta-data-source&gt;<br />
&nbsp;&nbsp;&lt;properties&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 根据元数据生成数据库的表结构。 --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 显示执行的SQL。 --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="hibernate.show_sql" value="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 格式化显示的SQL&nbsp;。 --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="hibernate.format_sql" value="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- SQL方言。 --&gt;<br />
&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">&lt;property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/&gt;<br />
</span>&nbsp;&nbsp;&lt;/properties&gt;<br />
&nbsp;&lt;/persistence-unit&gt;<br />
&lt;/persistence&gt;</font></span></font></p>
<p><font face="Verdana"></font><font face="Verdana">注意：因为jboss 采用Hibernate，Hibernate 有一项属性hibernate.hbm2ddl.auto，该属性指定实体Bean发布时是否同步数据库结构。</font></p>
<p><font face="Verdana">1.如果hibernate.hbm2ddl.auto的值设为create-drop，在实体Bean发布及卸载时将自动创建及删除相应数据库表(注意：Jboss 服务器启动或</font><font face="Verdana">关闭时也会引发实体Bean 的发布及卸载)。</font></p>
<p><font face="Verdana">2.如果hibernate.hbm2ddl.auto的值设为update,以后为了实体bean的改动能反应到数据表，建议使用update，这样实体Bean 添加一个属性时</font><font face="Verdana">能同时在数据表增加相应字段。</font></p>
<br />
posted @ 2009-03-26 12:35 断点 阅读(166) | 评论 (0)
<img src ="http://www.blogjava.net/tfzhu/aggbug/309378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:45 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>本地接口与远程接口的无状态SessionBean的实现 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309377.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309377.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309377.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309377.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">远程接口调用ejb的过程：</span><br />
首先客户端需要与ejb建立起socket通信，在通信管道上他们之间需要来回发送IIOP协议消息，因为数据要在网络进行传输，存放数据的java对象必须要进行序列化。这个过程中，有网络通信的开销、协议解析的开销、对象序列化的开销。因为ejb是分布式技术，它允许客户端与ejb应用在不同一机器上面，所以这些开销也是必然的。</p>
<p><span style="color: #0000ff">本地接口调用ejb的过程：</span><br />
通过本地接口调用ejb，直接在内存交互，这样就可以避免因网络通信所造成的各种性能开销。<br />
注意：<br />
<span style="color: #008000">1.只有客户端与EJB应用都在同一个JVM内运行的时候，我们才能调用本地接口，否则只能调用远程接口。<br />
2.只要客户端与ejb发布在同一个jboss内，我们就认为它们在同一个JVM。<br />
3.客户端可以调用本地接口；也可调用远程接口；当本地接口与远程接口都有同一个方法时，优先调用本地接口中的方法。</span></p>
<p><span style="color: #0000ff">开发一个自己的远程接口的无状态会话bean：</span><br />
1.需要自己开发的EJB的组件.jar包。<br />
注意：在实现类中加入注解，绑定接口。<br />
@Stateless、@Remote(HelloWorld.class) //为接口。<br />
2.需要自己开发出的EJB的客户端，并把客户端工程打成.war文件。<br />
注意：客户端所要知道的JNDI名称，下面的HelloWorld 为远程接口。<br />
InitialContext ctx = new InitialContext();<br />
HelloWorld helloWorld = (HelloWorld)ctx.lookup("HelloWorldBean/remote");<br />
out.println(helloWorld.sayHello("荆州"));<br />
3.把.jar和.war文件拷贝到jboss的deploy区。<br />
4.打开浏览器，输入自己开发出的EJB客户端的.jsp页面，即可。</p>
<p><span style="color: #0000ff">开发一个自己的本地接口的无状态会话bean：<br />
</span>1.需要自己开发的EJB的组件.jar包。<br />
注意：在实现类中加入注解，绑定接口。<br />
@Stateless、@Local(HelloWorldLocal.class)//接口。<br />
2.需要自己开发出的EJB的客户端，并把客户端工程打成.war文件。<br />
注意：客户端所要知道的JNDI名称，下面的HelloWorldLocal 为本地接口。<br />
InitialContext ctx = new InitialContext();<br />
HelloWorldLocal helloWorld = (HelloWorldLocal)ctx.lookup("HelloWorldLocalBean/local");<br />
out.println(helloWorld.sayHello("荆州")); <br />
3.把.jar和.war文件拷贝到jboss的deploy区。<br />
4.打开浏览器，输入自己开发出的EJB客户端的.jsp页面，即可。</p>
<p>Bean实例的两种管理技术：<br />
1.无状态bean使用实例池技术管理bean；<br />
2.有状态bean使用激活(activation)管理bean。</p>
<p><span style="color: #0000ff">Jboss生成的JNDI名称，默认命名规则如下：<br />
</span>如果把EJB应用打包成后题为.jar的模块文件，默认的全局JNDI名称是<br />
<span style="color: #008000">本地接口：EJB-CLASS-NAME/local<br />
远程接口：EJB-CLASS-NAME/remote<br />
</span>例如：把EJB-HelloWorld(里面包含接口HelloWorld和实现类HelloWorldBean)应用打包成EJB-HelloWorld.jar文件，它的远程接口的JNDI名称是：HelloWorldBean/remote。</p>
<p><font face="Verdana"><span style="color: #0000ff"><font style="color: #0000ff" face="Verdana">jndi.properties的配置：<br />
</font></span><span style="color: #008000">java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory<br />
java.naming.provider.url=localhost:1099<br />
<br />
</span></font></p>
<br />
posted @ 2009-03-26 09:56 断点 阅读(255) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:42 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何进行EJB 打包 </title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309376.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309376.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309376.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309376.html</trackback:ping><description><![CDATA[<p>要发布EJB 时必须把她打成*.jar 文件，一个EJB 打包后的目录结构如下：<br />
EJB 应用根目录:<br />
| -- com (你的.class 文件)<br />
| -- META-INF<br />
| -- MANIFEST.MF (如果使用工具打包，该文件由工具自动生成)<br />
打包的方式有很多，如：jar 命令行、集成开发环境的打包向导和Ant 任务。</p>
<p>下面介绍Elispse 打包向导和Ant 打包任务。<br />
1. Elispse 打包向导<br />
在Elispse 开发环境下，可以通过向导进行打包。右击项目名称，在跳出的菜单中选择Export--&gt;Java--&gt;JAR file，在"选择要导出的资源"时，选择源目录和用到的资源然，后选择一个存放目录及文件名，点"完成"就结束了打包。</p>
<p>2. Ant 打包任务<br />
主要是在Eclipse下，通过配置build.xml进行ANT 打包，来提高开发效率,也是推荐的打包方式。<br />
下面我们看一个简单的打包任务。<br />
<span style="color: #008000">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;project name="EJB-HelloWorld" basedir="."&gt;<br />
&lt;property name="src.dir" value="${basedir}\src" /&gt;<br />
&lt;property environment="env" /&gt;<br />
&lt;property name="jboss.home" value="${env.JBOSS_HOME}" /&gt;<br />
&lt;property name="jboss.server.config" value="default" /&gt;<br />
&lt;property name="build.dir" value="${basedir}\build" /&gt;<br />
<br />
&lt;path id="build.classpath"&gt;<br />
&lt;fileset dir="${jboss.home}\client"&gt;<br />
&lt;include name="*.jar"&gt;&lt;/include&gt;<br />
&lt;/fileset&gt;<br />
&lt;pathelement location="${build.dir}"/&gt;<br />
&lt;/path&gt;<br />
<br />
&lt;target name="prepare"&gt;<br />
&lt;delete dir="${build.dir}"/&gt;<br />
&lt;mkdir dir="${build.dir}"/&gt;<br />
&lt;/target&gt;<br />
<br />
&lt;target name="compile" depends="prepare" description="编译 "&gt;<br />
&lt;javac srcdir="${src.dir}" destdir="${build.dir}"&gt;<br />
&lt;classpath refid="build.classpath" /&gt;<br />
&lt;/javac&gt;<br />
&lt;/target&gt;<br />
<br />
&lt;target name="ejbjar" depends="compile" description="创建EJB发布包"&gt;<br />
&lt;jar jarfile="${basedir}\${ant.project.name}.jar" &gt;<br />
&lt;fileset dir="${build.dir}" &gt;<br />
&lt;include name="**/*.class"&gt;&lt;/include&gt;<br />
&lt;/fileset&gt;<br />
&lt;/jar&gt;<br />
&lt;/target&gt;<br />
<br />
&lt;target name="deploy" depends="ejbjar" description="发布EJB"&gt;<br />
&lt;copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/&gt;<br />
&lt;/target&gt;<br />
<br />
&lt;target name="undeploy" description="卸载EJB"&gt;<br />
&lt;delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/&gt;<br />
&lt;/target&gt;<br />
&lt;/project&gt;</span></p>
<p>再右健点击此配置文件build.xml，选择Run As--&gt;Ant Build即可！</p>
<br />
posted @ 2009-03-26 09:51 断点 阅读(158) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:39 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3.0 基础</title><link>http://www.blogjava.net/tfzhu/archive/2010/01/13/309375.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 13 Jan 2010 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/13/309375.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/309375.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/13/309375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/309375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/309375.html</trackback:ping><description><![CDATA[<p><font face="Verdana">EJB(Enterprise JavaBeans)在JavaEE体系中，通常用来完成商务逻辑层的功能，EJB是一种组件结构。EJB组件要按照EJB规范编写，然后部署到应用服务器上，具体讲是运行在J2EE应用服务器的EJB容器中，该部分软件不单为EJB提供运行时的环境，更重要的是提供事务、会话管理、持久性、安全等服务。EJB容器通过查看EJB描述符(配置文件)确定EJB需要那些服务。客户机要访问EJB组件需要通过JNDI和RMI定位EJB的对外接口。</font></p>
<p><span style="color: #008000"><span style="color: #008000">采用EJB开发基于MVC（包含显示层、控制层和业务层）结构的应用，那么EJB就是用于开发应用的业务层。</span></span></p>
<p><font face="Verdana">开发EJB遵循如下步骤进行：<br />
1.开发构成EJB组件的Java源文件，比如：组件接口、Home接口、企业Bean类、所需的辅助类等。<br />
2.手工完成部署描述符，或者借助与IDE。<br />
3.编译步骤1开发的java源文件.<br />
4.借助于JDK自带的jar使用工具，来创建含有部署描述符和.class文件的EJB-jar文件。<br />
5.通过具体EJb容器提供的部署建议，来完成Ejb-jar文件的部署。<br />
6.配置EJB服务器，使得Ejb-jar含有的Ejb组件能够正常运作。<br />
7.启动EJB服务器。此时，开发者可以验证EJB组件是否部署成功,并运行。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
EJB3.0规范定义了如下3种EJB组件类型：<br />
1、会话Bean(SessionBean)：无状态会话Bean(Stateless SessionBean)、有状态会话Bean(Stateful SessionBean)。<br />
会话Bean通常有以下属性：<br />
（1）代表单个客户机执行。<br />
（2）可以是事务的。<br />
（3）可以更新共享数据库中的数据。<br />
（4）生存期相对较短。<br />
（5）其生存期通常就是客户机的生存期。<br />
（6）任何持久性数据都有Bean管理。<br />
（7）可以依容器的判断予以删除。<br />
（8）会在EJB服务器失败时被删除。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB容器管理无状态会话Bean的生存周期，其方式是通过创建足够多数量的此种Bean适应客户机工作负荷,并在不需要它们的时候将其删除或者将闲置的Bean写到磁盘上。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果会话Bean在方法调用之前需要保留状态信息，则必须使用有状态的会话Bean(Stateful SessionBean)。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 会话Bean在J2EE应用程序中被用来完成一些服务器端的业务操作，例如访问数据库、调用其他EJB组件。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">总之，会话Bean代表一种操作：它检索或者存储数据以满足用户的请求。</span></font></p>
<p><font face="Verdana">2、实体Bean(EntityBean)，通常有以下属性:<br />
（1）代表数据库的数据。<br />
（2）是事务性的。<br />
（3）允许多个用户共同访问。<br />
（4）可以长期存在。<br />
（5）持久性数据可以由容器管理。<br />
（6）在EJB服务器失败后能继续生存。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体Bean被用来代表应用数据库中用到的数据。例如在一个电子商务系统中，实体Bean可以被用来代表产品、雇员、信用卡、订单数据等数据对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 持久性是实体Bean的一个基本属性。EJB规范允许两种形式的实体持久性:Bean管理的持久性(BMP)和容器管理的持久性(CMP)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体Bean支持多个用户并发的访问数据。EJB规范说明，维护数据的完整性是容器的责任。容器完成这个任务通常的做法是，锁定数据库中的数据，并使访问串行化，或者通过创建多个实体Bean的实例，并允许在基础数据存储中使用并发控制，来管理访问。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">总之，实体Bean代表一种数据集：可以访问这些数据集以满足用户的请求。</span></font></p>
<p><font face="Verdana">3、消息驱动bean(Message DrivenBean)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 消息驱动Bean要与JMS结合使用，以提供消息驱动的异步处理功能。例如电子商务系统的交易确认就可以用消息驱动Bean来实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 消息驱动Bean作为JMS队列和主题的监听器部署，当有JMS消息到达，系统就会调用消息驱动Bean去完成业务逻辑方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000"><font face="Verdana">总之，客户机不能直接调用消息驱动Bean，客户通过发送JMS消息调用消息驱动Bean。</font></span></font></p>
<br />
posted @ 2009-03-13 15:11 断点 阅读(122) | 评论 (0) 
<img src ="http://www.blogjava.net/tfzhu/aggbug/309375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-13 22:36 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/13/309375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>