You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by eg...@apache.org on 2009/10/20 14:30:01 UTC

svn commit: r827050 - in /cxf/trunk/rt/management/src: main/java/org/apache/cxf/management/interceptor/ test/java/org/apache/cxf/management/interceptor/

Author: eglynn
Date: Tue Oct 20 12:30:00 2009
New Revision: 827050

URL: http://svn.apache.org/viewvc?rev=827050&view=rev
Log:
Fix for for [CXF-2305] PerformanceCounter.Client reports incorrect response times for oneway invocations

Modified:
    cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptor.java
    cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInvokerInterceptor.java
    cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptor.java
    cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptorTest.java
    cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptorTest.java

Modified: cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptor.java?rev=827050&r1=827049&r2=827050&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptor.java (original)
+++ cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptor.java Tue Oct 20 12:30:00 2009
@@ -35,7 +35,9 @@
         
         Exchange ex = message.getExchange();        
         if (isClient(message)) {
-            endHandlingMessage(ex);
+            if (!ex.isOneWay()) {
+                endHandlingMessage(ex);
+            }
         } else {            
             beginHandlingMessage(ex);            
         }

Modified: cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInvokerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInvokerInterceptor.java?rev=827050&r1=827049&r2=827050&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInvokerInterceptor.java (original)
+++ cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInvokerInterceptor.java Tue Oct 20 12:30:00 2009
@@ -40,7 +40,7 @@
     
     public void handleMessage(Message message) throws Fault {
         Exchange ex = message.getExchange();
-        if (ex.isOneWay()) {
+        if (ex.isOneWay() && !isClient(message)) {
             setOneWayMessage(ex);
         }
     }
@@ -49,7 +49,7 @@
     public void handleFault(Message message) {
         Exchange ex = message.getExchange();
         ex.put(FaultMode.class, message.get(FaultMode.class));
-        if (ex.isOneWay()) {
+        if (ex.isOneWay() && !isClient(message)) {
             endHandlingMessage(ex);
         }
     }

Modified: cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptor.java?rev=827050&r1=827049&r2=827050&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptor.java (original)
+++ cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptor.java Tue Oct 20 12:30:00 2009
@@ -22,10 +22,12 @@
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 
 public class ResponseTimeMessageOutInterceptor extends AbstractMessageResponseTimeInterceptor {
-    
+    private EndingInterceptor ending = new EndingInterceptor(); 
+
     public ResponseTimeMessageOutInterceptor() {
         super(Phase.SEND);
     }
@@ -34,10 +36,9 @@
         Exchange ex = message.getExchange();
         if (isClient(message)) {
             if (ex.isOneWay()) {
-                setOneWayMessage(ex);
-            } else {
-                beginHandlingMessage(ex);
-            }
+                message.getInterceptorChain().add(ending);
+            } 
+            beginHandlingMessage(ex);
         } else { // the message is handled by server
             endHandlingMessage(ex);
         }
@@ -58,4 +59,24 @@
             endHandlingMessage(ex);
         }
     }
+
+    EndingInterceptor getEndingInterceptor() {
+        return ending;
+    }
+    
+    public class EndingInterceptor extends AbstractPhaseInterceptor<Message> {
+        public EndingInterceptor() {
+            super(Phase.PREPARE_SEND_ENDING);
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            Exchange ex = message.getExchange();
+            endHandlingMessage(ex);
+        }
+
+        public void handleFault(Message message) throws Fault {
+            Exchange ex = message.getExchange();
+            endHandlingMessage(ex);
+        }
+    }
 }

Modified: cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptorTest.java?rev=827050&r1=827049&r2=827050&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptorTest.java (original)
+++ cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageInInterceptorTest.java Tue Oct 20 12:30:00 2009
@@ -39,6 +39,7 @@
         EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(Boolean.TRUE).anyTimes();
         EasyMock.expect(exchange.getOutMessage()).andReturn(message);
         EasyMock.expect(exchange.get(FaultMode.class)).andReturn(null);
+        EasyMock.expect(exchange.isOneWay()).andReturn(false);
         MessageHandlingTimeRecorder mhtr = EasyMock.createMock(MessageHandlingTimeRecorder.class);
         mhtr.endHandling();
         EasyMock.expectLastCall();        

Modified: cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptorTest.java?rev=827050&r1=827049&r2=827050&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptorTest.java (original)
+++ cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/interceptor/ResponseTimeMessageOutInterceptorTest.java Tue Oct 20 12:30:00 2009
@@ -18,6 +18,8 @@
  */
 
 package org.apache.cxf.management.interceptor;
+
+import org.apache.cxf.interceptor.InterceptorChain;
 import org.apache.cxf.management.counters.MessageHandlingTimeRecorder;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
@@ -113,23 +115,28 @@
         //need to increase the counter and is a client
         setupCounterRepository(true, true);
         setupExchangeForMessage();
-        EasyMock.expect(message.getExchange()).andReturn(exchange);
+        EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
         EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(Boolean.TRUE).anyTimes(); 
         EasyMock.expect(exchange.getOutMessage()).andReturn(message);
+        EasyMock.expect(exchange.get(FaultMode.class)).andReturn(null);
         //MessageHandlingTimeRecorder mhtr = EasyMock.createMock(MessageHandlingTimeRecorder.class);
         //mhtr.setOneWay(true);
         //EasyMock.expectLastCall();
          
         //EasyMock.replay(mhtr);
-        EasyMock.expect(exchange.isOneWay()).andReturn(true);
-        EasyMock.expect(exchange.get(MessageHandlingTimeRecorder.class)).andReturn(null);        
-        exchange.put(EasyMock.eq(MessageHandlingTimeRecorder.class), 
-                     EasyMock.isA(MessageHandlingTimeRecorder.class));
+        EasyMock.expect(exchange.isOneWay()).andReturn(true).anyTimes();
+        MessageHandlingTimeRecorder mhtr = EasyMock.createMock(MessageHandlingTimeRecorder.class);
+        EasyMock.expect(exchange.get(MessageHandlingTimeRecorder.class)).andReturn(mhtr).anyTimes();        
+        InterceptorChain chain = EasyMock.createMock(InterceptorChain.class);
+        EasyMock.expect(message.getInterceptorChain()).andReturn(chain);
+        chain.add(EasyMock.isA(ResponseTimeMessageOutInterceptor.EndingInterceptor.class));
         EasyMock.expectLastCall();
         EasyMock.replay(exchange);
         EasyMock.replay(message);
         
         rtmoi.handleMessage(message);
+        rtmoi.getEndingInterceptor().handleMessage(message);
+
         EasyMock.verify(message);
         EasyMock.verify(bus);
         EasyMock.verify(exchange);