Websphere,JAXWS,WS-Transaction-WTRN0127E:操作被策略类型配置阻止



我们以前从未在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都已部署到Websphere 8.5.5.9,并已成功测试。

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

然后,我向APP_B提交了一个请求,从日志文件中,我可以看到该请求被APP_B中的service_z成功接收,但当它试图向APP_a中的services_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开发人员工作的在线文章,这些文章都暗示一切都应该通过管理控制台应用策略来实现,但不幸的是,我仍然遇到了这个错误。

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

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

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

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

不确定您指的是spring类WebSphereUowTransactionManager还是WebSphere的UOWManager。如果您想要一个所有web服务都在其下执行的单个事务,那么您需要在service_Z中启动它——因为我们似乎在谈论POJOs/mock servlet,那么在标准J2EE中,您只需在jndi中查找UserTransaction接口并调用begin/commit(如果您使用的是Spring,那么他们的接口将在后台做同样的事情——在应用程序服务器中,这只是一个与当前线程相关联的JTA事务)。通过为强制WS-AT配置PolicySets,该事务将在JAX-WS请求上传播,目标服务将在该事务下执行,因此您不需要(或不希望)与这些服务中的JTA事务管理器(普通JTA或Spring)进行任何显式交互
另一方面,如果您只是希望PolicySet配置将在service_X和service_Y中创建单独的事务,例如为CMT EJB创建Required/RequiresNew,这样您就不需要显式代码来确定事务的范围,那么恐怕没有等效的WS-AT策略集。它基本上是用于事务作用域的JTA和用于传播的WS-AT/2PC,策略集配置允许在传播过程中进行一些配置。

最新更新