Apache CXF의 Cryostat 관리 기능을 사용하여 WS-RM의 여러 측면을 모니터링하고 제어할 수도 있습니다. Cryostat 작업의 전체 목록은 org.apache.cxf.ws.rm.ManagedRMManager 및 org.apache.cxf.ws.rm.ManagedRMEndpoint 에 의해 정의되지만 이러한 작업에는 현재 RM 상태를 개별 메시지 수준으로 보는 작업이 포함됩니다. JXM을 사용하여 WS-RM 시퀀스를 종료하거나 종료하고, 원격 RM 엔드포인트에서 이전에 메시지를 승인할 때 알림을 받을 수도 있습니다.
예를 들어 클라이언트 구성에 Cryostat 서버가 활성화된 경우 다음 코드를 사용하여 수신된 마지막 승인 번호를 추적할 수 있습니다.
// Java
private static class AcknowledgementListener implements NotificationListener {
private volatile long lastAcknowledgement;
@Override
public void handleNotification(Notification notification, Object handback) {
if (notification instanceof AcknowledgementNotification) {
AcknowledgementNotification ack = (AcknowledgementNotification)notification;
lastAcknowledgement = ack.getMessageNumber();
}
}
// initialize client
...
// attach to JMX bean for notifications
// NOTE: you must have sent at least one message to initialize RM before executing this code
Endpoint ep = ClientProxy.getClient(client).getEndpoint();
InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
MBeanServer mbs = im.getMBeanServer();
RMManager clientManager = bus.getExtension(RMManager.class);
ObjectName name = RMUtils.getManagedObjectName(clientManager, ep);
System.out.println("Looking for endpoint name " + name);
AcknowledgementListener listener = new AcknowledgementListener();
mbs.addNotificationListener(name, listener, null, null);
// send messages using RM with acknowledgement status reported to listener
...
// Java
private static class AcknowledgementListener implements NotificationListener {
private volatile long lastAcknowledgement;
@Override
public void handleNotification(Notification notification, Object handback) {
if (notification instanceof AcknowledgementNotification) {
AcknowledgementNotification ack = (AcknowledgementNotification)notification;
lastAcknowledgement = ack.getMessageNumber();
}
}
// initialize client
...
// attach to JMX bean for notifications
// NOTE: you must have sent at least one message to initialize RM before executing this code
Endpoint ep = ClientProxy.getClient(client).getEndpoint();
InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
MBeanServer mbs = im.getMBeanServer();
RMManager clientManager = bus.getExtension(RMManager.class);
ObjectName name = RMUtils.getManagedObjectName(clientManager, ep);
System.out.println("Looking for endpoint name " + name);
AcknowledgementListener listener = new AcknowledgementListener();
mbs.addNotificationListener(name, listener, null, null);
// send messages using RM with acknowledgement status reported to listener
...
Copy to ClipboardCopied!Toggle word wrapToggle overflow