Hi

We are using CXF 2.4.4. for RM of one special operation. Due to
technical issues (firewalling, loadbalancer, etc) we
decided to use the synchronous approach.

Unfortunately, we have several problems with sync. RM:

Client must(!)  send an offer, if we do not send one, the server
generates a Fault in the second response:
 It is not possible to send a create sequence request to the anonymous address

This offered id is ignored by the Destination, instead the response
for createSourceSequence includes
a new/other id (Although this looks ok, the source still keeps the
offered Sequence... since in some
cases the source wants a final SeqAck for this Sequence, startind with
req/res Id 4).

The other Problem is marking the lastMessage, When we use:
SequenceTerminationPolicyType stp = new SequenceTerminationPolicyType();
stp.setTerminateOnShutdown(true);
stp.setMaxLength(1);

The server/destination tries to send the TerminateSequence (ID:5) to
www.w3.org, which
results in a java.net.UnknownHostException:

The req/res pair is as follows

ID: 1 Req: createSequence with Offer 123
ID: 1 Res: CreateSequenceResponse with generated SeqID 456
ID: 2 Req: Sequence with 456 and content
ID: 2 Res: SequenceAcknowledgement for 456and content
ID: 3 Req: TerminateSequence for 456
ID: 3 Res: looks like an ACK (occurance of <RelatesTo
xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing";>http://www.w3.org/2005/08/addressing/unspecified</RelatesTo>)
ID: 4 Req: SequenceAcknowledgement for 456
ID: 5 Req: Server tries to send a TerminateSequence to
http://www.w3.org/2005/08/addressing/anonymous

If we skip the mastMessage (setMaxLength=0) there is no error in
communication but there is also
no terminateSequence.

Hence the question if it is possible to use RM with cxf 2.4.4. in sync
mode (and without offer and with markation of lastMessage)?

Our config is straigh forward (server):
            <wsrm-mgr:reliableMessaging>
                <wsrm-policy:RMAssertion>
                    <wsrm-policy:BaseRetransmissionInterval
Milliseconds="40000"/>
                    <wsrm-policy:AcknowledgementInterval Milliseconds="0"/>
                </wsrm-policy:RMAssertion>
                <wsrm-mgr:sourcePolicy>
                <!--
                    <wsrm-mgr:sequenceTerminationPolicy maxLength="1"/>
                     -->
                </wsrm-mgr:sourcePolicy>
                <wsrm-mgr:destinationPolicy >
                    <wsrm-mgr:acksPolicy intraMessageThreshold="10" />
                </wsrm-mgr:destinationPolicy>
            </wsrm-mgr:reliableMessaging>

We generate the client RM Bus programmatically (initially by spring)
with those features:
                <property name="features">
                        <list>
                                <bean 
class="org.apache.cxf.ws.addressing.WSAddressingFeature"/>
                                <bean 
class="org.apache.cxf.feature.LoggingFeature"/>
                                <bean 
class="org.apache.cxf.ws.rm.feature.RMFeature">
                        </list>
                </property>

public class RMBusFactory extends SpringBusFactory {
...
ExtensionManagerBus originBus = (ExtensionManagerBus) super.createBus();
....
for (AbstractFeature feature : features) {
        feature.initialize(originBus);
}
originBus.setFeatures(features);

any ideas?

tnx & greetings
Ben

Reply via email to