21.6. 配置 WS-RM Persistence
概述
本章中已描述的 Apache CXF WS-RM 功能为网络故障(如网络故障)提供了可靠性。WS-RM 持久性提供其它类型故障的可靠性,如 RM 源或 RM 目标崩溃。
WS-RM 持久性涉及将各种 RM 端点的状态存储在持久存储中。这可让端点在被重试时继续发送和接收信息。
Apache CXF 在配置文件中启用 WS-RM 持久性。默认的 WS-RM 持久存储基于 JDBC。为方便起见,Apache CXF 包括 Derby 用于开箱即用的部署。此外,持久存储也使用 Java API 进行公开。要实现自己的持久性机制,您可以使用这个 API 与首选 DB 来实施。
WS-RM 持久性只支持单向调用,默认是禁用的。
如何使用
Apache CXF WS-RM 持久性的工作方式如下:
- 在 RM 源端点中,传出的消息会在传输前保留。在收到确认后,它将从持久性存储中驱除。
- 在从崩溃中恢复后,它会恢复永久性的消息并重新传输,直到所有消息都已确认。此时,RM 序列是关闭的。
- 在 RM 目标端点中,传入的信息会被保留,并在成功存储后发送确认。当成功分配消息时,它将从持久性存储中驱除。
- 在从崩溃中恢复后,它会恢复保留的消息并分配它们。它还会使 RM 序列进入接受、确认和发送新消息的状态。
启用 WS-persistence
要启用 WS-RM 持久性,您必须指定为 WS-RM 实施持久性存储的对象。您可以自行开发,也可以使用 Apache CXF 附带的基于 JDBC 的存储。
例 21.14 “配置默认 WS-RM Persistence 存储” 中显示的配置可启用基于 JDBC 的存储,该存储带有 Apache CXF。
例 21.14. 配置默认 WS-RM Persistence 存储
<bean id="RMTxStore" class="org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore"/> <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager"> <property name="store" ref="RMTxStore"/> </wsrm-mgr:rmManager>
配置 WS-persistence
Apache CXF 附带的基于 JDBC 的存储支持 表 21.4 “JDBC 存储属性” 中显示的属性。
属性名称 | 类型 | 默认设置 |
---|---|---|
|
| |
| null | |
| null | |
| jdbc:derby:rmdb;create=true |
例 21.15 “为 WS-RM Persistence 配置 JDBC 存储” 中显示的配置可启用与 Apache CXF 附带的基于 JDBC 的存储,同时将 driverClassName
和 url
设置为非默认值。
例 21.15. 为 WS-RM Persistence 配置 JDBC 存储
<bean id="RMTxStore" class="org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore"> <property name="driverClassName" value="com.acme.jdbc.Driver"/> <property name="url" value="jdbc:acme:rmdb;create=true"/> </bean>