Websphere、JAXWS、WS事务-WTRN0127E:操作被策略类型配置阻止

Websphere、JAXWS、WS事务-WTRN0127E:操作被策略类型配置阻止,websphere,jax-ws,websphere-8,ws-transaction,Websphere,Jax Ws,Websphere 8,Ws Transaction,我们以前从未在Websphere中使用WS-Transaction策略,因此我正在开发一个原型来评估它 这就是原型的结构。 我已经使用eclipse开发了两个应用程序,APP_A和APP_B APP_A包含两个JAXWS web服务,service_X和service_Y service_X接受最少的数据,将其写入oracle数据库的表中,然后在响应中返回主键 service_y接受service_X返回的主键和其他一些最小数据,将其写入同一oracle数据库上的不同表,然后在响应中返回主键

我们以前从未在Websphere中使用WS-Transaction策略,因此我正在开发一个原型来评估它

这就是原型的结构。 我已经使用eclipse开发了两个应用程序,APP_A和APP_B

  • APP_A包含两个JAXWS web服务,service_X和service_Y
  • service_X接受最少的数据,将其写入oracle数据库的表中,然后在响应中返回主键
  • service_y接受service_X返回的主键和其他一些最小数据,将其写入同一oracle数据库上的不同表,然后在响应中返回主键
  • APP_B包含一个JAXWS web服务,service_Z
  • service_z接受将请求发布到service_x和service_y所需的所有数据,并在其响应中返回service_x和service_y返回的主键
APP_A和APP_B都已部署到websphere8.5.5.9,并已成功测试

然后通过Websphere管理控制台,我创建了一个新的应用程序策略集,并包含了ws事务策略。然后,我将此策略附加到APP_A中的提供者策略和APP_B中的客户端策略,然后重新启动Websphere

然后,我向APP_B提交了一个请求,从日志文件中我可以看到该请求正被APP_B中的service_z成功接收,但当它试图向APP_a中的service_x发布请求时,报告了以下错误:

[02/06/16 11:53:43:040 BST] 00000076 AxisEngine    E org.apache.axis2.engine.AxisEngine receive WTRN0127E: Operation blocked by policy type configuration.
我已经阅读了IBM developer works的几篇在线文章,这些文章都暗示,只要通过管理控制台应用策略,一切都应该工作,但不幸的是,我仍然遇到这个错误

我怀疑我可能需要在服务调用的头中包含一些内容,但我不确定这是什么或如何实现

其中一篇文章建议使用IBMRationalApplicationDeveloper工具,从管理控制台导出策略,然后在部署之前将它们导入到项目中。我按照说明使用IBMRAD9.11进行了尝试,但仍然无法解决问题


任何帮助/建议都将不胜感激,提前感谢您的帮助。

我认为您已经指定了强制WS-AT策略,但线程上没有JTA事务。假设您希望在APP_B中启动一个事务,并使用WS-AT在对service_X和service_Y的请求上传播该事务,以便在单个事务下协调所有工作。如果service_Z是一个POJO,那么您可以使用UserTransaction来开始/提交事务,或者您可以只使用对带有CMT的EJB的单个请求将多个web服务请求包装到后端服务。请注意,策略集不会自动为您启动JTA事务-考虑WS-AT最简单的方法是,它对于Web服务的作用与JTS/OTS对于CORBA/IIOP(即EJB请求)的作用相同-因此,事务生命周期是通过J2EE应用服务器中的JTA实现的,而对于Web服务,事务传播和2PC协调是通过WS-AT实现的。考虑WS-AT PolicySet配置的方法是,在请求方,它确定线程上的现有JTA事务是否在请求上传播(以及是否应该监控必须存在的事务)-在提供者端,它确定是否应在WS-AT事务上下文(如果存在)下导入和执行,以及在不存在事务上下文的情况下调用服务是否有效。
希望这有帮助。

我认为您已经指定了强制的WS-AT策略,但线程上没有JTA事务。假设您希望在APP_B中启动一个事务,并使用WS-AT在对service_X和service_Y的请求上传播该事务,以便在单个事务下协调所有工作。如果service_Z是一个POJO,那么您可以使用UserTransaction来开始/提交事务,或者您可以只使用对带有CMT的EJB的单个请求将多个web服务请求包装到后端服务。请注意,策略集不会自动为您启动JTA事务-考虑WS-AT最简单的方法是,它对于Web服务的作用与JTS/OTS对于CORBA/IIOP(即EJB请求)的作用相同-因此,事务生命周期是通过J2EE应用服务器中的JTA实现的,而对于Web服务,事务传播和2PC协调是通过WS-AT实现的。考虑WS-AT PolicySet配置的方法是,在请求方,它确定线程上的现有JTA事务是否在请求上传播(以及是否应该监控必须存在的事务)-在提供者端,它确定是否应在WS-AT事务上下文(如果存在)下导入和执行,以及在不存在事务上下文的情况下调用服务是否有效。
希望这有帮助。

不确定您指的是spring类WebSphereUowTransactionManager还是WebSphere的UOWManager。如果您想要一个所有web服务都在其下执行的事务,那么您需要在service_Z中启动它-因为我们似乎在谈论POJO/mock servlet,那么在标准J2EE中,您只需在jndi中查找UserTransaction接口并调用begin/commit(如果您使用的是Spring,那么它们的接口将在幕后做同样的事情——在应用服务器中,与当前线程相关联的JTA事务才是最重要的)。 通过为强制WS-AT配置策略集,该事务将在JAX-WS请求上传播,并且目标服务将在该事务下执行,因此您不需要(或希望)在这些服务中与JTA事务管理器(普通JTA或Spring)进行任何显式交互。
另一方面,如果您只是希望PolicySet配置将在service_X和service_Y中创建单独的事务,如Required/Requires