﻿<?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-拾贝壳-随笔分类-J2EE</title><link>http://www.blogjava.net/huabingl/category/11665.html</link><description>走过的路</description><language>zh-cn</language><lastBuildDate>Tue, 19 Feb 2008 12:52:51 GMT</lastBuildDate><pubDate>Tue, 19 Feb 2008 12:52:51 GMT</pubDate><ttl>60</ttl><item><title>System.getProperty()参数大全</title><link>http://www.blogjava.net/huabingl/archive/2008/02/18/180504.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Mon, 18 Feb 2008 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/18/180504.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180504.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/18/180504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180504.html</trackback:ping><description><![CDATA[<span class="hilite1">System</span>.<span class="hilite2">getProperty</span>()参数大全&nbsp;&nbsp;
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>java.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Runtime&nbsp;Environment&nbsp;version&nbsp;&nbsp;</span>
<li class=""><span>java.vendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Runtime&nbsp;Environment&nbsp;vendor&nbsp;&nbsp;</span>
<li class="alt"><span>java.vendor.url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;vendor&nbsp;URL&nbsp;&nbsp;</span>
<li class=""><span>java.home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;installation&nbsp;directory&nbsp;&nbsp;</span>
<li class="alt"><span>java.vm.specification.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;specification&nbsp;version&nbsp;&nbsp;</span>
<li class=""><span>java.vm.specification.vendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;specification&nbsp;vendor&nbsp;&nbsp;</span>
<li class="alt"><span>java.vm.specification.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;specification&nbsp;name&nbsp;&nbsp;</span>
<li class=""><span>java.vm.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;implementation&nbsp;version&nbsp;&nbsp;</span>
<li class="alt"><span>java.vm.vendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;implementation&nbsp;vendor&nbsp;&nbsp;</span>
<li class=""><span>java.vm.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Virtual&nbsp;Machine&nbsp;implementation&nbsp;name&nbsp;&nbsp;</span>
<li class="alt"><span>java.specification.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Runtime&nbsp;Environment&nbsp;specification&nbsp;version&nbsp;&nbsp;</span>
<li class=""><span>java.specification.vendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Runtime&nbsp;Environment&nbsp;specification&nbsp;vendor&nbsp;&nbsp;</span>
<li class="alt"><span>java.specification.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;Runtime&nbsp;Environment&nbsp;specification&nbsp;name&nbsp;&nbsp;</span>
<li class=""><span>java.<span class="keyword">class</span><span>.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;</span><span class="keyword">class</span><span>&nbsp;format&nbsp;version&nbsp;number&nbsp;&nbsp;</span></span>
<li class="alt"><span>java.<span class="keyword">class</span><span>.path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;</span><span class="keyword">class</span><span>&nbsp;path&nbsp;&nbsp;</span></span>
<li class=""><span>java.library.path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;of&nbsp;paths&nbsp;to&nbsp;search&nbsp;when&nbsp;loading&nbsp;libraries&nbsp;&nbsp;</span>
<li class="alt"><span>java.io.tmpdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default&nbsp;temp&nbsp;file&nbsp;path&nbsp;&nbsp;</span>
<li class=""><span>java.compiler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;of&nbsp;JIT&nbsp;compiler&nbsp;to&nbsp;use&nbsp;&nbsp;</span>
<li class="alt"><span>java.ext.dirs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path&nbsp;of&nbsp;extension&nbsp;directory&nbsp;or&nbsp;directories&nbsp;&nbsp;</span>
<li class=""><span>os.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operating&nbsp;<span class="hilite1">system</span>&nbsp;name&nbsp;&nbsp;</span>
<li class="alt"><span>os.arch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operating&nbsp;<span class="hilite1">system</span>&nbsp;architecture&nbsp;&nbsp;</span>
<li class=""><span>os.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Operating&nbsp;<span class="hilite1">system</span>&nbsp;version&nbsp;&nbsp;</span>
<li class="alt"><span>file.separator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;separator&nbsp;(<span class="string">"/"</span><span>&nbsp;on&nbsp;UNIX)&nbsp;&nbsp;</span></span>
<li class=""><span>path.separator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path&nbsp;separator&nbsp;(<span class="string">":"</span><span>&nbsp;on&nbsp;UNIX)&nbsp;&nbsp;</span></span>
<li class="alt"><span>line.separator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Line&nbsp;separator&nbsp;(<span class="string">"\n"</span><span>&nbsp;on&nbsp;UNIX)&nbsp;&nbsp;</span></span>
<li class=""><span>user.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User's&nbsp;account&nbsp;name&nbsp;&nbsp;</span>
<li class="alt"><span>user.home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User's&nbsp;home&nbsp;directory&nbsp;&nbsp;</span>
<li class=""><span>user.dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User's&nbsp;current&nbsp;working&nbsp;directory&nbsp;</span></li>
<img src ="http://www.blogjava.net/huabingl/aggbug/180504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-18 17:43 <a href="http://www.blogjava.net/huabingl/archive/2008/02/18/180504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis userguide(3)</title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180348.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180348.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180348.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180348.html</trackback:ping><description><![CDATA[<p>服务类型</p>
<p>在axis中有4中服务类型<br />
RPC服务采用soap rpc的标准，and also the SOAP "section 5" encoding.<br />
Document 服务没有采用任何编码（所以你在组装时不会看到复杂对象的序列化以及soap-style数组），但是仍然作了xml和java对象的互映射。<br />
Wrapped服务和Document服务类似<br />
Message 服务接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想处理来自外部的原始的xml，可以采用Message 服务。</p>
<p>RPC服务<br />
&nbsp;&nbsp; 这个服务是axis默认的服务。我们在前面的例子中写的就是rpc服务。&lt;service ... provider="java:RPC"&gt; 。rpc服务遵从soap rpc规范和编码规则，意味着来自rpc服务的xml将类似上面例子中的&#8220;echoString&#8221;--每个rpc调用被模块化为一个外部元素，匹配操作名称，并包含了很多内部元素，每一个都是操作的一个参数。axis将把这些xml转化为java对象，配送给你得服务，并将序列化来自服务的java对象为xml.因为rpc服务默认采用soap section 5规则，对象将会通过"multi-ref" 序列化来编码。<br />
Document / Wrapped 服务<br />
&nbsp;这2个服务很类似，都不需要用soap编码来处理数据。他就是一个普通的xml格式。无论哪种情况，axis还是对他们做了xml到java得榜定，所以你最终处理的还是java对象，而不是xml结构的字符串。<br />
&nbsp;下面的例子来说明他们2个之间的区别。<br />
&nbsp;&lt;soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/"<br />
&nbsp;&nbsp;&nbsp; xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br />
&nbsp; &lt;soap:Body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;SK001&lt;/item&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;quantity&gt;1&lt;/quantity&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Sushi Knife&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/myNS:PurchaseOrder&gt;<br />
&nbsp; &lt;/soap:Body&gt;<br />
&lt;/soap:Envelope&gt;</p>
<p>相关的PurchaseOrder类型定义如下：</p>
<p>&lt;schema targetNamespace="http://commerce.com/PO"&gt;<br />
&nbsp; &lt;complexType name="POType"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name="item" type="xsd:string"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name="quantity" type="xsd:int"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name="description" type="xsd:string"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/sequence&gt;<br />
&nbsp; &lt;/complexType&gt;<br />
&nbsp; &lt;element name="PurchaseOrder" type="POType"/&gt;<br />
&lt;/schema&gt;</p>
<p>对于一个document服务来说，他将对应到这样的方法<br />
public void method(PurchaseOrder po) </p>
<p>换句话说，整个PurchaseOrder元素将被处理为一个单一的对象，包含3个属性。<br />
而对于wrapped服务来说，他对应于下面的方法<br />
public void purchaseOrder(String item, int quantity, String description) <br />
注意到，在wrapped中，PurchaseOrder元素被映射为代表了一个方法。他的参数就是他的那些元素。<br />
他们在wsdd得使用如下<br />
&lt;service ... style="document"&gt; for document style<br />
&lt;service ... style="wrapped"&gt; for wrapped style<br />
Message 服务<br />
&nbsp; 当你需要处理纯xml而不是java对象时，你将会用到这种服务。<br />
&nbsp; message服务的方法有4中签名<br />
public Element [] method(Element [] bodies); <br />
public SOAPBodyElement [] method (SOAPBodyElement [] bodies); <br />
public Document method(Document body); <br />
public void method(SOAPEnvelope req, SOAPEnvelope resp); </p>
<img src ="http://www.blogjava.net/huabingl/aggbug/180348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 20:31 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis userguide(2)</title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180248.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180248.html</trackback:ping><description><![CDATA[<p>发布service<br />
有2种发布方式，一种是实例发布，一种是描述符发布<br />
实例发布很简单<br />
&nbsp; 把我们的java源文件拷贝到axis目录下，改扩展名为jws<br />
&nbsp; 然后就可以直接访问了，例如：<br />
java samples.userguide.example2.CalcClient -p8080 add 2 5<br />
&nbsp;他将调用add方法，传递的2个变量分别为2和5。<br />
很显然，第一种方法有很多弊端，比如需要源文件，不能有包路径等等<br />
描述符发布<br />
一个最简单的例子如下：<br />
&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />
&nbsp;&nbsp;&nbsp; xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br />
&nbsp; &lt;service name="MyService" provider="java:RPC"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="className" value="samples.userguide.example3.MyService"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;/service&gt;<br />
&lt;/deployment&gt;<br />
一个服务是一个targeted chain ,可能包含下面的一些或者全部：请求Handler，pivot Handler 支点Handler，响应Handler。支点hander在服务中叫做provider,在例子中我们的provider是java:RPC，他被axis内嵌，代表了Java RPC service，具体的类是org.apache.axis.providers.java.RPCProvider.<br />
我们告诉RPCProvider 我们要调用的服务MyService，并以参数的形式告诉他具体的目标以及可以被调用的方法。<br />
我们也可以给我们要调用的对象设置作用范围scope,和servlet的scope一样，有request,session,application.<br />
我们需要把这个描述符定义的内容告诉应用服务器才能真正提供我们需要的服务。<br />
如果已经部署axis到tomcat,我们可以这样发布<br />
org.apache.axis.client.AdminClient deploy.wsdd<br />
这样我们的服务就可以通过soap来访问了<br />
测试一下<br />
java samples.userguide.example3.Client<br />
&nbsp; -lhttp://localhost:8080/axis/services/MyService "test me!"<br />
可以通过下面来查看所有已经部署的服务<br />
java org.apache.axis.client.AdminClient list<br />
来看看更进一步的应用，使用一下request handler<br />
&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />
&nbsp;&nbsp;&nbsp; xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br />
&nbsp; &lt;!-- define the logging handler configuration --&gt;<br />
&nbsp; &lt;handler name="track" type="java:samples.userguide.example4.LogHandler"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="filename" value="MyService.log"/&gt;<br />
&nbsp;&nbsp; &lt;/handler&gt;</p>
<p>&nbsp; &lt;!-- define the service, using the log handler we just defined --&gt;<br />
&nbsp; &lt;service name="LogTestService" provider="java:RPC"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;requestFlow&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;handler type="track"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/requestFlow&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;parameter name="className" value="samples.userguide.example4.Service"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;/service&gt;<br />
&lt;/deployment&gt;<br />
这个例子会在客户端掉用LogTestService的时候，先调用samples.userguide.example4.LogHandler作记录操作<br />
远程管理<br />
默认状态下，axis只允许在axis部署的机器上使用管理请求，如果希望在其他的机器上进行管理操作可以参照下面的例子</p>
<p>&lt;service name="AdminService" provider="java:MSG"&gt;<br />
&nbsp; &lt;parameter name="className" value="org.apache.axis.util.Admin"/&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;parameter name="enableRemoteAdmin" value="true"/&gt;<br />
&lt;/service&gt;<br />
注意，这样配置需要作必要的安全配置</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/180248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 12:17 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript操作word控件</title><link>http://www.blogjava.net/huabingl/archive/2007/07/25/132228.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 25 Jul 2007 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2007/07/25/132228.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/132228.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2007/07/25/132228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/132228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/132228.html</trackback:ping><description><![CDATA[<p>&lt;script language="javascript"&gt;<br>//定义全局变量，用于清理工作<br>var word; <br>var doc;<br>function editFile(){<br>//调用word控件<br>&nbsp;word= new ActiveXObject("Word.Application"); <br>//屏蔽&#8220;另存为&#8221;按钮<br>&nbsp;word.CommandBars("File").Controls(5).Enabled= false;<br>&nbsp; word.CommandBars("File").Controls(5).visible= false;<br>//屏蔽"另存为网页"按钮</p>
<p>&nbsp;word.CommandBars("File").Controls(6).Enabled= false;<br>&nbsp;word.CommandBars("File").Controls(6).visible= false;</p>
<p>&nbsp;word.visible = true;<br>&nbsp;// word.activate(); <br>try{ <br>//打开文件<br>&nbsp; doc=word.Documents.Open("<a href="http://212312.doc/">http://212312.doc</a>");<br>&nbsp; //痕迹保留<br>&nbsp; word.ActiveDocument.TrackRevisions&nbsp;&nbsp; =true;&nbsp; <br>//切换成web视图<br>&nbsp; word.ActiveDocument.ActiveWindow.View.Type=3<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;alert(e.message); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };&nbsp;&nbsp; <br>}<br>function myfinalize(){<br>//文档保存<br>&nbsp;&nbsp;&nbsp; doc.save();<br>//文档关闭<br>&nbsp;&nbsp; doc.close();<br>//把屏蔽的功能打开<br>&nbsp;&nbsp; word.CommandBars("File").Controls(5).Enabled= true;<br>&nbsp; word.CommandBars("File").Controls(5).visible= true;<br>//word退出<br>&nbsp;word.quit();<br>&nbsp;<br>}<br>//参考文档<br>&nbsp;&nbsp; <a href="http://bbs.hidotnet.com/712/ShowPost.aspx">http://bbs.hidotnet.com/712/ShowPost.aspx</a></p>
<img src ="http://www.blogjava.net/huabingl/aggbug/132228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2007-07-25 10:54 <a href="http://www.blogjava.net/huabingl/archive/2007/07/25/132228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AXIS User Guide(1)</title><link>http://www.blogjava.net/huabingl/archive/2007/01/03/87359.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 03 Jan 2007 12:54:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2007/01/03/87359.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/87359.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2007/01/03/87359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/87359.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/87359.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: AXIS User Guide(1)&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2007/01/03/87359.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/87359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2007-01-03 20:54 <a href="http://www.blogjava.net/huabingl/archive/2007/01/03/87359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sliding into WebDAV</title><link>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 03 Jan 2007 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/91624.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/91624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/91624.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Sliding into WebDAV&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/91624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2007-01-03 20:49 <a href="http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小心对js函数命名,避免和它的内置函数重名</title><link>http://www.blogjava.net/huabingl/archive/2006/12/10/86671.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 10 Dec 2006 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/12/10/86671.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/86671.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/12/10/86671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/86671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/86671.html</trackback:ping><description><![CDATA[<p>最近又遇到个对js取名不帅导致错误的问题,特开此贴,以示警戒:<br>不要把自己的js函数取成close(),open(),start()之类的名字!!</p>
<p>window得resizeto和resizeby方法对模式窗口无效。</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/86671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-12-10 13:25 <a href="http://www.blogjava.net/huabingl/archive/2006/12/10/86671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j/common log和各种服务器集成的问题</title><link>http://www.blogjava.net/huabingl/archive/2006/09/05/67854.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Tue, 05 Sep 2006 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/09/05/67854.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/67854.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/09/05/67854.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/67854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/67854.html</trackback:ping><description><![CDATA[  目前的很多商业和非商业的服务器中间件都默认集成了common-log甚至是log4j.因此当我门把我们的应用发布在上面的时候,都会遇到关于log方面的问题.<br />  1.webshpere下面集成log4j.<br />  "WebSphere的类装入器方式有两种方式：PARENT_FIRST和PARENT_LAST。默认值是PARENT_FIRST，这种方式在载入当前classpath的类之前先载入其上一级classloader能够装入的类。这是标准的JVM classloader的默认策略。如果采用PARENT_LAST，则过程正好相反，即先载入当前classpath的类，再载入其上一级classloader能够装入的类，这样可以用当前classpath中更新的类覆盖其上一级classloader的相同类。受类装入器方式影响的classloader包括application classloader、WAR classloader以及共享类库的classloader。"<br /> 因为websphere在共享类库的classloader中有一套common logging,但是确没有合适配置文件.如果我们把配置正确的log4j.properties文件放在共享类库下,我们会发现log4j可以运行.但还有另外一个很通用的方式--改变webshpere的类库加载顺序.我们让他先加载我们web应用所需的类库.即我们把web应用的加栽方式改为PARENT_LAST.<br />  哎,尽管我小心的提防,今天还是中招了,在我的配置里,log4j的配置文件只能读取一次,不能一个应用一个配置文件.为了让它加载自己的配置,可以自己写(或者用spring的)servlet/listener去手动加载这个配置文件.<br /> 2.jboss下面的集成log4j<br />  大家可能都曾在为jboss下面配置log4j郁闷过.jboss比webshpere走的还远.无论你的项目是否使用了log4j,jboss在自己启动的时候就已经运行他了.也就是说在jboss加载自己共享类库的时候,已经读取了自己log4j.xml文件配置.这个文件在conf中可以找到.如果你需要为你的应用单独配置一个catagory,你需要直接在这里配置．<br />   在webloader装载应用的时候,如果应用中有log4j的包,似乎总出现appender已被占用的问题.笔者把log4j的包连带应用中的log4j配置文件一并移去,世界清净了.<br />关于为了让应用自带的log4j配置文件生效,有人建议修改<br /> &lt;attribute name="Java2ClassLoadingCompliance"&gt;false&lt;/attribute&gt;<br />和<br /> &lt;attribute name="UseJBossWebLoader"&gt;false&lt;/attribute&gt;<br />这两个属性．<br />　３．sunone下面集成log4j<br />    距离上次用SunOne服务器已经好长时间了,似乎sunOne的log有些类似jboss,也是一个服务器的log集中管理.由于使用的不是很多,暂且在这里站个位子.<br />随手贴点关于log的信息:<br /><a href="http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions">http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions</a><br /><a href="http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html">http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html</a><br /><br />  <img src ="http://www.blogjava.net/huabingl/aggbug/67854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-09-05 17:23 <a href="http://www.blogjava.net/huabingl/archive/2006/09/05/67854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PicoContainer源码导读</title><link>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 23 Jul 2006 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/59646.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/59646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/59646.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、简介   感谢“简易java框架”分享的学习心得。循着他的足迹，我把picocontainer读了一遍。源代码的版本是1.2-RC-2。   pico的官方站点：http://www.picocontainer.org/   由于它是一个专门的ioc容器，所以使用起来没有spring那么麻烦。关于他的文档，在官方站点上有一篇《5分钟搞定pico》的文章。国人似乎也有很多的翻译版本。讲解得很详细...&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/59646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-07-23 14:30 <a href="http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA开发者应该去的20个英文网站</title><link>http://www.blogjava.net/huabingl/archive/2006/06/16/53292.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Fri, 16 Jun 2006 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/06/16/53292.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/53292.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/06/16/53292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/53292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/53292.html</trackback:ping><description><![CDATA[
		<p>
				<a href="http://www.javaalmanac.com">http://www.javaalmanac.com</a>
		</p>
		<p>    Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.</p>
		<p>
				<a href="http://www.onjava.com">http://www.onjava.com</a>
		</p>
		<p>    O'Reilly的Java网站. 每周都有新文章</p>
		<p>
				<a href="http://java.sun.com">http://java.sun.com</a>
		</p>
		<p>    官方的Java开发者网站 - 每周都有新文章发表</p>
		<p>
				<a href="http://www.developer.com/java">http://www.developer.com/java</a>
		</p>
		<p>    由Gamelan.com 维护的Java技术文章网站</p>
		<p>
				<a href="http://www.java.net">http://www.java.net</a>
		</p>
		<p>    Sun公司维护的一个Java社区网站</p>
		<p>
				<a href="http://www.builder.com">http://www.builder.com</a>
		</p>
		<p>    Cnet的Builder.com网站 - 所有的技术文章, 以Java为主.</p>
		<p>
				<a href="http://www.ibm.com/developerworks/java">http://www.ibm.com/developerworks/java</a>
		</p>
		<p>    IBM的Developerworks技术网站; 这是其中的Java技术主页</p>
		<p>
				<a href="http://www.javaworld.com">http://www.javaworld.com</a>
		</p>
		<p>    最早的一个Java站点. 每周更新Java技术文章</p>
		<p>
				<a href="http://www.devx.com/java">http://www.devx.com/java</a>
		</p>
		<p>    DevX维护的一个Java技术文章网站</p>
		<p>
				<a href="http://www.fawcette.com/javapro">http://www.fawcette.com/javapro</a>
		</p>
		<p>    JavaPro在线杂志网站.</p>
		<p>
				<a href="http://www.sys-con.com/java">http://www.sys-con.com/java</a>
		</p>
		<p>    Java Developers Journal的在线杂志网站.</p>
		<p>
				<a href="http://www.javadesktop.org">http://www.javadesktop.org</a>
		</p>
		<p>    位于Java.net的一个Java桌面技术社区网站.</p>
		<p>
				<a href="http://www.theserverside.com">http://www.theserverside.com</a>
		</p>
		<p>    这是一个讨论所有Java服务器端技术的网站.</p>
		<p>
				<a href="http://www.jars.com">http://www.jars.com</a>
		</p>
		<p>    提供Java评论服务. 包括各种framework和应用程序</p>
		<p>
				<a href="http://www.jguru.com">http://www.jguru.com</a>
		</p>
		<p>    一个非常棒的采用Q&amp;A形式的Java技术资源社区.</p>
		<p>
				<a href="http://www.javaranch.com">http://www.javaranch.com</a>
		</p>
		<p>     一个论坛，得到Java问题答案的地方，初学者的好去处。</p>
		<p>
				<a href="http://www.ibiblio.org/javafaq/javafaq.html">http://www.ibiblio.org/javafaq/javafaq.html</a>
		</p>
		<p>    comp.lang.java的FAQ站点 - 收集了来自comp.lang.java新闻组的问题和答案的分类目录.</p>
		<p>
				<a href="http://java.sun.com/docs/books/tutorial/">http://java.sun.com/docs/books/tutorial/</a>
		</p>
		<p>    来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助.</p>
		<p>
				<a href="http://www.javablogs.com">http://www.javablogs.com</a>
		</p>
		<p>    互联网上最活跃的一个Java Blog网站.</p>
		<p>
				<a href="http://java.about.com/">http://java.about.com/</a>
				<br />
				<br />转自51cto</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/53292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-06-16 14:11 <a href="http://www.blogjava.net/huabingl/archive/2006/06/16/53292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTA和JDBC事务</title><link>http://www.blogjava.net/huabingl/archive/2006/06/15/53011.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Thu, 15 Jun 2006 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/06/15/53011.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/53011.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/06/15/53011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/53011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/53011.html</trackback:ping><description><![CDATA[<p>&nbsp;一般情况下，J2EE应用服务器支持JDBC事务、JTA事务、容器管理事务。这里讨论JTA和JDBC事务的区别。这2个是常用的DAO模式事务界定方式。<br><font color=#ff1493>JDBC 事务</font><br>&nbsp;JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式：自动提交和手工提交。<br>★&nbsp;在jdbc中，事务操作缺省是自动提交。也就是说，一条对数据库的更新表达式代表一项事务操作，操作成功后，系统将自动调用commit()来提交，否则将调用rollback()来回滚。<br>★&nbsp;在jdbc中，可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务，在操作完成后调用commit()来进行整体提交，倘若其中一个表达式操作失败，都不会执行到commit()，并且将产生响应的异常；此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后，相关数据的一致性，示例如下：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br><br>conn&nbsp;=&nbsp;<br><br>DriverManager.getConnection&nbsp;&nbsp;&nbsp;&nbsp;<br><br>(&amp;quot;jdbc:oracle:thin:@host:1521:SID&amp;quot;,&amp;quot;username&amp;quot;,&amp;quot;userpwd&amp;quot;&#59;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setAutoCommit(false)&#59;//禁止自动提交，设置回滚点<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt&nbsp;=&nbsp;conn.createStatement()&#59;<br><br>stmt.executeUpdate(&#8220;alter&nbsp;table&nbsp;&#8230;&#8221;)&#59;&nbsp;//数据库更新操作1<br><br>stmt.executeUpdate(&#8220;insert&nbsp;into&nbsp;table&nbsp;&#8230;&#8221;)&#59;&nbsp;//数据库更新操作2<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit()&#59;&nbsp;//事务提交<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;ex)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace()&#59;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.rollback()&#59;&nbsp;//操作不成功则回滚<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e)&nbsp;{<br><br>e.printStackTrace()&#59;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>}<br><br>&nbsp;JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。<br><font color=#ff1493>JTA事务<br></font>&nbsp;JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。<br>&nbsp;要用 JTA 进行事务界定，应用程序要调用 javax.transaction.UserTransaction 接口中的方法。例如：<br>&nbsp;utx.begin();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSource ds = obtainXADataSource();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = ds.getConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt = conn.prepareStatement("UPDATE MOVIES ...");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt.setString(1, "Spinal Tap");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt.executeUpdate();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; utx.commit();</p>
<p>&nbsp;让我们来关注下面的话：<br>&nbsp;&#8220;用 JTA 界定事务，那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。&#8221;<br>&nbsp;要使用JTA事务，必须使用XADataSource来产生数据库连接，产生的连接为一个XA连接。<br>&nbsp;XA连接（javax.sql.XAConnection）和非XA（java.sql.Connection）连接的区别在于：XA可以参与JTA的事务，而且不支持自动提交。<br>&nbsp;&nbsp;&nbsp;&nbsp; Note:<br>Oracle, Sybase, DB2, SQL Server等大型数据库才支持XA, 支持分布事务。 <br>My SQL 连本地都支持不好，更别说分布事务了。<br><font color=#ff1493>JTA方式的实现过程</font>：<br>&nbsp;&nbsp; 用XADataSource产生的XAConnection它扩展了一个getXAResource()方法,事务通过这个方法把它加入到事务容器中进行管理.对于调用者来说,根本看不到事务是如果管理的,你只要声明开始事务,告诉容器我下面的操作要求事务参与了,最后告诉事务说到这儿可以提交或回滚了,别的都是黑箱操作。<br>&nbsp;在使用JTA之前，你必须首先实现一个Xid类用来标识事务（在普通情况下这将由事务管理程序来处理）。Xid包含三个元素：formatID、gtrid（全局事务标识符）和bqual（分支修饰词标识符）。<br>&nbsp;下面的例子说明Xid的实现：</p>
<p>import javax.transaction.xa.*; <br>public class MyXid implements Xid <br>{ <br>　protected int formatId; <br>　protected byte gtrid[]; <br>　protected byte bqual[]; <br>　public MyXid() <br>　{ <br>　} <br>　public MyXid(int formatId, byte gtrid[], byte bqual[]) <br>　{ <br>　　this.formatId = formatId; <br>　　this.gtrid = gtrid; <br>　　this.bqual = bqual; <br>　} </p>
<p>　public int getFormatId() <br>　{ <br>　　return formatId; <br>　} </p>
<p>　public byte[] getBranchQualifier() <br>　{ <br>　　return bqual; <br>　} </p>
<p>　public byte[] getGlobalTransactionId() <br>　{ <br>　　return gtrid; <br>　} </p>
<p>}<br>&nbsp;其次，你需要创建一个你要使用的数据库的数据源：</p>
<p>public DataSource getDataSource() <br>　throws SQLException <br>　{ <br>　　SQLServerDataSource xaDS = new <br>　　com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource(); <br>　　xaDS.setDataSourceName("SQLServer"); <br>　　xaDS.setServerName("server"); <br>　　xaDS.setPortNumber(1433); <br>　　xaDS.setSelectMethod("cursor"); <br>　　return xaDS; <br>} </p>
<p>　　例1?这个例子是用&#8220;两步提交协议&#8221;来提交一个事务分支：</p>
<p>XADataSource xaDS; <br>XAConnection xaCon; <br>XAResource xaRes; <br>Xid xid; <br>Connection con; <br>Statement stmt; <br>int ret; <br>xaDS = getDataSource(); <br>xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password"); <br>xaRes = xaCon.getXAResource(); <br>con = xaCon.getConnection(); <br>stmt = con.createStatement(); <br>xid = new MyXid(100, new byte[]{0x01}, new byte[]{0x02}); <br>try { <br>　　xaRes.start(xid, XAResource.TMNOFLAGS); <br>　　stmt.executeUpdate("insert into test_table values (100)"); <br>　　xaRes.end(xid, XAResource.TMSUCCESS); <br>　　ret = xaRes.prepare(xid); <br>　　if (ret == XAResource.XA_OK) { <br>　　　　xaRes.commit(xid, false); <br>　　　} <br>} <br>catch (XAException e) { <br>　e.printStackTrace(); <br>} <br>finally { <br>　stmt.close(); <br>　con.close(); <br>　xaCon.close(); <br>}<br>&nbsp;当然，实际过程中，我们不需要写这些代码，这些代码是JTA最终的实现代码。<br>关于&#8220;两步提交协议&#8221;，可以参看下面的文章：<br><a href="http://www.jspcn.net/htmlnews/11049371131251752.html">http://www.jspcn.net/htmlnews/11049371131251752.html</a></p>
<p>&nbsp;<a href="http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html">http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html</a></p>
<p><br><font color=#ff1493>选择最好的方式<br></font>用 JDBC API 进事务界定来构建 DAO 类的。这些 DAO 类可以总结如下：</p>
<p>事务界定代码嵌入在 DAO 类中。 <br>DAO 类使用 JDBC API 进行事务界定。 <br>调用者不能界定事务。 <br>事务范围局限于单个 JDBC 连接。 <br>JDBC 事务并不总是适合复杂的企业应用程序。如果您的事务要跨越多个 DAO 或者多个数据库，那么下列实现策略也许更合适：</p>
<p>事务用 JTA 界定。 <br>事务界定代码从 DAO 中分离出来。 <br>调用者负责界定事务。 <br>DAO 加入一个全局事务。 <br>JDBC 方式由于其简单性而具有吸引力，JTA　方式提供了更大的灵活性。您所选择的实现将取决于应用程序的特定需求。<br>XADataSource例子：<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p>&lt;!-- ===================================================================== --&gt;<br>&lt;!--&nbsp;&nbsp;&nbsp; --&gt;<br>&lt;!--&nbsp; JBoss Server Configuration&nbsp;&nbsp;&nbsp; --&gt;<br>&lt;!-- Thanks to Horia Muntean &lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#104;&#111;&#114;&#105;&#97;&#64;&#98;&#118;&#98;&#46;&#114;&#111;">horia@bvb.ro</a>&gt;&nbsp;&nbsp; --&gt;<br>&lt;!-- ===================================================================== --&gt;</p>
<p>&lt;!-- $Id: db2-xa-ds.xml,v 1.1.2.1 2003/05/30 18:25:57 d_jencks Exp $ --&gt;</p>
<p><br>&lt;datasources&gt;<br>&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XADatasource for DB2 V8.1 (app driver)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; copy $db2_install_dir/java/db2java.zip into $jboss_install_dir/server/default/lib<br>&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp; &lt;xa-datasource&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;jndi-name&gt;DB2XADS&lt;/jndi-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;xa-datasource-class&gt;COM.ibm.db2.jdbc.DB2XADataSource&lt;/xa-datasource-class&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;xa-datasource-property name="DatabaseName"&gt;yout_database_name&lt;/xa-datasource-property&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;xa-datasource-property name="User"&gt;your_user&lt;/xa-datasource-property&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;xa-datasource-property name="Password"&gt;your_password&lt;/xa-datasource-property&gt;<br>&nbsp;&nbsp; &lt;/xa-datasource&gt;<br>&lt;/datasources&gt;<br><br>引用：<br>&nbsp;<a href="http://www.jspcn.net/htmlnews/11049371131251752.html">http://www.jspcn.net/htmlnews/11049371131251752.html</a><br><a href="http://www-128.ibm.com/developerworks/cn/java/j-dao/">http://www-128.ibm.com/developerworks/cn/java/j-dao/</a><br><a href="http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html">http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html</a></p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/53011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-06-15 15:53 <a href="http://www.blogjava.net/huabingl/archive/2006/06/15/53011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;J2EE 1.4标准教材&gt;JMS初读</title><link>http://www.blogjava.net/huabingl/archive/2006/05/31/49346.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 31 May 2006 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/05/31/49346.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/49346.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/05/31/49346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/49346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/49346.html</trackback:ping><description><![CDATA[
		<div>33.2 基本的jms api概念</div>
		<div>   33.2.1 jms api体系结构</div>
		<div>     jms应用程序组成部分:</div>
		<div>    a. jms提供者--------j2ee平台.</div>
		<div>    b.jms客户端--------需要用户完成的应用程序.</div>
		<div>    c.消息----在客户端之间传递信息的对象</div>
		<div>   d.管理的对象----连接工厂和目的地</div>
		<div> 33.2.2 消息域</div>
		<div>   分为"点到点消息传递域"和"发表/订阅小心传递域"</div>
		<div> 33.2.3 消费消息</div>
		<div>   两种方式:同步和异步.同步直接用receive方法提取消息.异步需要可湖段为消费者注册一个见听器.通过调用见听器的onMessage方法来分发消息.</div>
		<div>33.3 jms api编程模型</div>
		<div>  33.3.1 管理的对象</div>
		<div>   a.连接工厂</div>
		<div>    通常是执行jndi查找获得连接工厂.eg:</div>
		<div>  Context ctx= new InitialContext();</div>
		<div>  ConnectionFactory cf=(ConnectionFactory ) ctx.lookup("jms/QueueConnectionFactory");</div>
		<div>ConnectionFactory cf=(ConnectionFactory ) ctx.lookup("jms/TopicConnectionFactory");</div>
		<div> b.目的地</div>
		<div>   在ptp中,目的地是"队列".在发表/订阅中,目的地是"主题".</div>
		<div>  eg:</div>
		<div>Destination mydest=(Topic)ctx.lookup("jms/mytopic");</div>
		<div>33.3.2 连接</div>
		<div> 连接由连接工厂来创建.eg:</div>
		<div>Connection conn=ConnectionFactory .createConnection();</div>
		<div>33.3.3 会话</div>
		<div>会话 由 Connection来创建</div>
		<div>Session session=Connection.createSession(false,Session.AUTO_ACKOWLEDGE);</div>
		<div>事务性的会话</div>
		<div>Session session=Connection.createSession(true,0);</div>
		<div>33.3.4 消息生产者</div>
		<div>由session 来创建,实现MessageProducer接口.</div>
		<div>   MessageProducer mp=session.createProducer(myQueue);</div>
		<div>发送动作</div>
		<div>mp.send(message);</div>
		<div>33.3.5 消息消费者</div>
		<div> 由session创建,实现MessageConsumer接口.</div>
		<div>eg:</div>
		<div>MessageConsumer mc=session.createConsumer(myQueue);</div>
		<div>bwt:</div>
		<div>利用session.createDurableSubscriber可以创建长期的订阅者.</div>
		<div>  ========获得消息==</div>
		<div>同步方式.</div>
		<div>connection.start();</div>
		<div>Message m=consumer.receive();</div>
		<div>connection.start();</div>
		<div>Message m=consumer.receive(1000); //time out afer a second</div>
		<div>异步方式.</div>
		<div>构造一个消息舰艇器,用setMessageListener方法向具体的MessageConsumer中注册.eg:</div>
		<div>  Listener myListener= new Listener ();</div>
		<div>consumer.setMessageListener (myListener );</div>
		<div>33.3.6 消息</div>
		<div>分为消息头,消息属性和消息体,只有消息头是必须的.</div>
		<div>消息头存放了可护短和提供者用来识别和路由消息的值.</div>
		<div>常见的消息体的格式(消息类型)有5种.</div>
		<div> </div>
		<div> </div>
<img src ="http://www.blogjava.net/huabingl/aggbug/49346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-05-31 22:25 <a href="http://www.blogjava.net/huabingl/archive/2006/05/31/49346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>