??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
在axis中有4中服务类?br />
RPC服务采用soap rpc的标准,and also the SOAP "section 5" encoding.
Document 服务没有采用M~码Q所以你在组装时不会看到复杂对象的序列化以及soap-style数组Q,但是仍然作了xml和java对象的互映射?br />
Wrapped服务和Document服务cM
Message 服务接受和返回soap Envelope中的L的xml而不需要mapping/data得榜定。如果你惛_理来自外部的原始的xmlQ可以采用Message 服务?/p>
RPC服务
q个服务是axis默认的服务。我们在前面的例子中写的是rpc服务?lt;service ... provider="java:RPC"> 。rpc服务遵从soap rpc规范和编码规则,意味着来自rpc服务的xml类g面例子中?#8220;echoString”--每个rpc调用被模块化Z个外部元素,匚w操作名称Qƈ包含了很多内部元素,每一个都是操作的一个参数。axis把q些xml转化为java对象Q配送给你得服务Qƈ序列化来自服务的java对象为xml.因ؓrpc服务默认采用soap section 5规则Q对象将会通过"multi-ref" 序列化来~码?br />
Document / Wrapped 服务
q?个服务很cMQ都不需要用soap~码来处理数据。他是一个普通的xml格式。无论哪U情况,axisq是对他们做了xml到java得榜定,所以你最l处理的q是java对象Q而不是xmll构的字W串?br />
下面的例子来说明他们2个之间的区别?br />
<soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<soap:Body>
<myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO">
<item>SK001</item>
<quantity>1</quantity>
<description>Sushi Knife</description>
</myNS:PurchaseOrder>
</soap:Body>
</soap:Envelope>
相关的PurchaseOrdercd定义如下Q?/p>
<schema targetNamespace="http://commerce.com/PO">
<complexType name="POType">
<sequence>
<element name="item" type="xsd:string"/>
<element name="quantity" type="xsd:int"/>
<element name="description" type="xsd:string"/>
</sequence>
</complexType>
<element name="PurchaseOrder" type="POType"/>
</schema>
对于一个document服务来说Q他对应到q样的方?br /> public void method(PurchaseOrder po)
换句话说Q整个PurchaseOrder元素被处理Z个单一的对象,包含3个属性?br />
而对于wrapped服务来说Q他对应于下面的Ҏ
public void purchaseOrder(String item, int quantity, String description)
注意刎ͼ在wrapped中,PurchaseOrder元素被映ؓ代表了一个方法。他的参数就是他的那些元素?br />
他们在wsdd得用如?br />
<service ... style="document"> for document style
<service ... style="wrapped"> for wrapped style
Message 服务
当你需要处理纯xml而不是java对象Ӟ你将会用到这U服务?br />
message服务的方法有4中签?br />
public Element [] method(Element [] bodies);
public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
public Document method(Document body);
public void method(SOAPEnvelope req, SOAPEnvelope resp);
<!-- define the service, using the log handler we just defined -->
<service name="LogTestService" provider="java:RPC">
<requestFlow>
<handler type="track"/>
</requestFlow>
<parameter name="className" value="samples.userguide.example4.Service"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
q个例子会在客户端掉用LogTestService的时候,先调用samples.userguide.example4.LogHandler作记录操?br />
q程理
默认状态下Qaxis只允许在axis部v的机器上使用理hQ如果希望在其他的机器上q行理操作可以参照下面的例?/p>
<service name="AdminService" provider="java:MSG">
<parameter name="className" value="org.apache.axis.util.Admin"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="enableRemoteAdmin" value="true"/>
</service>
注意Q这样配|需要作必要的安全配|?/p>
word.CommandBars("File").Controls(6).Enabled= false;
word.CommandBars("File").Controls(6).visible= false;
word.visible = true;
// word.activate();
try{
//打开文g
doc=word.Documents.Open(" //痕迹保留
word.ActiveDocument.TrackRevisions =true;
//切换成web视图
word.ActiveDocument.ActiveWindow.View.Type=3
}catch(e){
alert(e.message);
};
}
function myfinalize(){
//文保存
doc.save();
//文关闭
doc.close();
//把屏蔽的功能打开
word.CommandBars("File").Controls(5).Enabled= true;
word.CommandBars("File").Controls(5).visible= true;
//word退?br> word.quit();
}
//参考文?br> http://bbs.hidotnet.com/712/ShowPost.aspx
window得resizeto和resizebyҎҎ式窗口无效?/p>
Java开发者年鉴一书的在线版本. 要想快速查到某UJava技巧的用法及示例代? q是一个不错的d.
O'Reilly的Java|站. 每周都有新文?/p>
官方的Java开发者网?- 每周都有新文章发?/p>
由Gamelan.com l护的Java技术文章网?/p>
Sun公司l护的一个JavaC|站
Cnet的Builder.com|站 - 所有的技术文? 以JavaZ.
http://www.ibm.com/developerworks/java
IBM的Developerworks技术网? q是其中的Java技术主?/p>
最早的一个Java站点. 每周更新Java技术文?/p>
DevXl护的一个Java技术文章网?/p>
http://www.fawcette.com/javapro
JavaPro在线杂志|站.
Java Developers Journal的在U杂志网?
位于Java.net的一个Java桌面技术社区网?
q是一个讨论所有Java服务器端技术的|站.
提供Java评论服务. 包括各种framework和应用程?/p>
一个非常棒的采用Q&A形式的Java技术资源社?
一个论坛,得到Java问题{案的地方,初学者的好去处?/p>
http://www.ibiblio.org/javafaq/javafaq.html
comp.lang.java的FAQ站点 - 攉了来自comp.lang.java新闻l的问题和答案的分类目录.
http://java.sun.com/docs/books/tutorial/
来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助.
互联|上最z跃的一个Java Blog|站.
http://java.about.com/
转自51cto
让我们来x下面的话Q?br> “?JTA 界定事务Q那么就需要有一个实?javax.sql.XADataSource ?javax.sql.XAConnection ?javax.sql.XAResource 接口?JDBC 驱动E序。一个实Cq些接口的驱动程序将可以参与 JTA 事务。一?XADataSource 对象是一?XAConnection 对象的工厂?XAConnection s 是参?JTA 事务?JDBC q接?#8221;
要用JTA事务Q必M用XADataSource来生数据库q接Q生的q接Z个XAq接?br> XAq接Qjavax.sql.XAConnectionQ和非XAQjava.sql.ConnectionQ连接的区别在于QXA可以参与JTA的事务,而且不支持自动提交?br> Note:
Oracle, Sybase, DB2, SQL Server{大型数据库才支持XA, 支持分布事务?
My SQL q本地都支持不好Q更别说分布事务了?br>JTA方式的实现过E?/font>Q?br> 用XADataSource产生的XAConnection它扩展了一个getXAResource()Ҏ,事务通过q个Ҏ把它加入C务容器中q行理.对于调用者来?Ҏ看不C务是如果理?你只要声明开始事?告诉容器我下面的操作要求事务参与?最后告诉事务说到这儿可以提交或回滚?别的都是黑箱操作?br> 在用JTA之前Q你必须首先实现一个Xidcȝ来标识事务(在普通情况下q将׃务管理程序来处理Q。Xid包含三个元素QformatID、gtridQ全局事务标识W)和bqualQ分支修饰词标识W)?br> 下面的例子说明Xid的实玎ͼ
import javax.transaction.xa.*;
public class MyXid implements Xid
{
protected int formatId;
protected byte gtrid[];
protected byte bqual[];
public MyXid()
{
}
public MyXid(int formatId, byte gtrid[], byte bqual[])
{
this.formatId = formatId;
this.gtrid = gtrid;
this.bqual = bqual;
}
public int getFormatId()
{
return formatId;
}
public byte[] getBranchQualifier()
{
return bqual;
}
public byte[] getGlobalTransactionId()
{
return gtrid;
}
}
其次Q你需要创Z个你要用的数据库的数据源:
public DataSource getDataSource()
throws SQLException
{
SQLServerDataSource xaDS = new
com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();
xaDS.setDataSourceName("SQLServer");
xaDS.setServerName("server");
xaDS.setPortNumber(1433);
xaDS.setSelectMethod("cursor");
return xaDS;
}
??q个例子是用“两步提交协议”来提交一个事务分支:
XADataSource xaDS;
XAConnection xaCon;
XAResource xaRes;
Xid xid;
Connection con;
Statement stmt;
int ret;
xaDS = getDataSource();
xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes = xaCon.getXAResource();
con = xaCon.getConnection();
stmt = con.createStatement();
xid = new MyXid(100, new byte[]{0x01}, new byte[]{0x02});
try {
xaRes.start(xid, XAResource.TMNOFLAGS);
stmt.executeUpdate("insert into test_table values (100)");
xaRes.end(xid, XAResource.TMSUCCESS);
ret = xaRes.prepare(xid);
if (ret == XAResource.XA_OK) {
xaRes.commit(xid, false);
}
}
catch (XAException e) {
e.printStackTrace();
}
finally {
stmt.close();
con.close();
xaCon.close();
}
当然Q实际过E中Q我们不需要写q些代码Q这些代码是JTA最l的实现代码?br>关于“两步提交协议”Q可以参看下面的文章Q?br>http://www.jspcn.net/htmlnews/11049371131251752.html
http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html
选择最好的方式
?JDBC API q事务界定来构徏 DAO cȝ。这?DAO cd以ȝ如下Q?/p>
事务界定代码嵌入?DAO cM?
DAO cM?JDBC API q行事务界定?
调用者不能界定事务?
事务范围局限于单个 JDBC q接?
JDBC 事务q不L适合复杂的企业应用程序。如果您的事务要跨越多个 DAO 或者多个数据库Q那么下列实现策略也许更合适:
事务?JTA 界定?
事务界定代码?DAO 中分d来?
调用者负责界定事务?
DAO 加入一个全局事务?
JDBC 方式׃其简单性而具有吸引力QJTA 方式提供了更大的灉|性。您所选择的实现将取决于应用程序的特定需求?br>XADataSource例子Q?br><?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- Thanks to Horia Muntean <horia@bvb.ro> -->
<!-- ===================================================================== -->
<!-- $Id: db2-xa-ds.xml,v 1.1.2.1 2003/05/30 18:25:57 d_jencks Exp $ -->
<datasources>
<!--
XADatasource for DB2 V8.1 (app driver)
copy $db2_install_dir/java/db2java.zip into $jboss_install_dir/server/default/lib
-->
<xa-datasource>
<jndi-name>DB2XADS</jndi-name>
<xa-datasource-class>COM.ibm.db2.jdbc.DB2XADataSource</xa-datasource-class>
<xa-datasource-property name="DatabaseName">yout_database_name</xa-datasource-property>
<xa-datasource-property name="User">your_user</xa-datasource-property>
<xa-datasource-property name="Password">your_password</xa-datasource-property>
</xa-datasource>
</datasources>
引用Q?br> http://www.jspcn.net/htmlnews/11049371131251752.html
http://www-128.ibm.com/developerworks/cn/java/j-dao/
http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html