Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions JAX-WS和WS事务_Transactions_Websphere_Jax Ws_Ibm Rad - Fatal编程技术网

Transactions JAX-WS和WS事务

Transactions JAX-WS和WS事务,transactions,websphere,jax-ws,ibm-rad,Transactions,Websphere,Jax Ws,Ibm Rad,员额:53 今天下午1:48:38发布0 我正在RAD8.0.4中开发一个jax ws web服务概念验证,并在WebSphere7中运行。我们的应用程序使用Spring和Hibernate,但我们在这两方面都不是专家。我们需要使用我们的web服务启用全局事务,以便它能够处理客户端应用程序的事务。我遵循了我在各种网站上找到的指令,包括IBM,我认为我配置了所有东西,但它不起作用。每个事务(客户机和服务)都可以独立工作,但我在客户机中提交之前强制执行了一个异常。这将回滚客户端事务,但不会回滚服务事

员额:53 今天下午1:48:38发布0
我正在RAD8.0.4中开发一个jax ws web服务概念验证,并在WebSphere7中运行。我们的应用程序使用Spring和Hibernate,但我们在这两方面都不是专家。我们需要使用我们的web服务启用全局事务,以便它能够处理客户端应用程序的事务。我遵循了我在各种网站上找到的指令,包括IBM,我认为我配置了所有东西,但它不起作用。每个事务(客户机和服务)都可以独立工作,但我在客户机中提交之前强制执行了一个异常。这将回滚客户端事务,但不会回滚服务事务。此外,在websphere上的登录(而不是简单的systemout…来自管理控制台的跟踪)会抛出一些胡言乱语,这对我来说意味着客户端没有提供任何事务上下文

我最初在RAD的服务视图和管理控制台中都设置了策略,但后来我读到,如果您同时设置这两个,它就不起作用了。但从那以后,我只试了其中一种,而另一种都没用。以下是我所做的:

在我的wsdl中,我添加了:

<wsp:Policy wsu:Id="ATPolicy">   
  <wsp:ExactlyOne>   
      <wsat11:ATAssertion/>   
      <wsat10:ATAssertion/>   
      <!-- omitted assertions -->   
  </wsp:ExactlyOne>   
</wsp:Policy>  

以及wsp:政策参考线

<binding name="TxPortBinding" type="tns:TxDelegate">   
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>   
<operation name="insertDBTrans">   
 <wsp:PolicyReference URI="#ATPolicy" required="true"/>         
  <soap:operation soapAction=""/>   
  <input>   
    <soap:body use="literal"/>   
  </input>   
  <output>   
    <soap:body use="literal"/>   
  </output>   
</operation>   
</binding>  

在管理控制台版本中,导入WS-Transaction策略后,我导航到服务->服务提供者->TxService,并选中所有三个级别的复选框:TxService、TxPort和insertDBTrans。选择附加策略集->WSTransaction。单击服务上已禁用的链接,并选择“导出的WSDL”。确定并保存

然后转到服务->服务客户端->TxService。检查客户端,附加客户端策略集->WSTransaction。已选择客户端和提供程序策略

但那没用。所以我删除了它们,转而进入RAD的服务视图。右键单击服务,管理策略集。将WSTransaction放在第一页,附带提供程序示例作为绑定。它一直设置到操作名insertDbTrans

在服务视图中的客户机下,我将客户机设置为用户提供程序策略,第二页,选择WSTransaction作为默认条目,并将其设置为“客户机和提供程序”

实际上我尝试了比这更多的排列。但没有一个成功


你知道我做错了什么吗?或者至少缩小一般问题的范围?我接近正确吗?

当您提到insertDbTrans时,我觉得您实际上是在服务器代码中进行数据库调用。问题:您使用的是什么数据库?您是否将数据源配置为使用XA驱动程序?DB29.5。是的,我正在使用通过管理控制台的数据源配置的和XA数据源。然后,XA提供程序指向驱动程序。它指向db2jcc4.jar,类是com.ibm.db2.jcc.DB2XADataSource.DB2XADataSource,我在这里的路径正确吗?我接近了吗?有什么我没有提到的重要内容我应该有吗?@Marcosmia-我们通过spring使用事务注释来管理我们的事务。事务管理器就是这样定义的:@marcosmaia-没有新的信息,只是想知道我是否做错了@,这可能就是为什么我没有得到进一步的跟进。