Cache the object names to help performance

# Conflicts:
#       
rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
#       
rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/0d7ec247
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/0d7ec247
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/0d7ec247

Branch: refs/heads/3.0.x-fixes
Commit: 0d7ec2470afdb9413dfd2cb37b49ae1d9e07d6ff
Parents: 1dbc471
Author: Daniel Kulp <dk...@apache.org>
Authored: Mon Jun 20 12:24:42 2016 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon Jul 25 10:27:35 2016 -0400

----------------------------------------------------------------------
 .../AbstractMessageResponseTimeInterceptor.java | 70 ++++++++++++--------
 .../AbstractMessageResponseTestBase.java        | 16 ++++-
 2 files changed, 56 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/0d7ec247/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
----------------------------------------------------------------------
diff --git 
a/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
 
b/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
index 92f9dc4..76bb5e9 100644
--- 
a/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
+++ 
b/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
@@ -113,34 +113,44 @@ public abstract class 
AbstractMessageResponseTimeInterceptor extends AbstractPha
     protected ObjectName getServiceCounterName(Exchange ex) {
         Bus bus = ex.get(Bus.class);
         StringBuilder buffer = new StringBuilder();
+        ObjectName serviceCounterName = null;
         if (ex.get("org.apache.cxf.management.service.counter.name") != null) {
             
buffer.append((String)ex.get("org.apache.cxf.management.service.counter.name"));
+            try {
+                serviceCounterName = new ObjectName(buffer.toString());
+            } catch (MalformedObjectNameException e) {
+                LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", e);
+            }
         } else {
             Service service = ex.get(Service.class);
             Endpoint endpoint = ex.get(Endpoint.class);
-
-            String serviceName = "\"" + 
escapePatternChars(service.getName().toString()) + "\"";
-            String portName = "\"" + 
endpoint.getEndpointInfo().getName().getLocalPart() + "\"";
-
-            buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME + ":");
-            buffer.append(ManagementConstants.BUS_ID_PROP + "=" + bus.getId() 
+ ",");
-            Message message = ex.getOutMessage();
-            if (isClient(message)) {
-                buffer.append(ManagementConstants.TYPE_PROP + "=" + 
Counter.PERFORMANCE_COUNTER
-                              + ".Client,");
-            } else {
-                buffer.append(ManagementConstants.TYPE_PROP + "=" + 
Counter.PERFORMANCE_COUNTER
-                              + ".Server,");
+                
+            serviceCounterName = 
(ObjectName)endpoint.get("javax.management.ObjectName");
+            if (serviceCounterName == null) {
+                String serviceName = "\"" + 
escapePatternChars(service.getName().toString()) + "\"";
+                String portName = "\"" + 
endpoint.getEndpointInfo().getName().getLocalPart() + "\"";
+    
+                buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME + ":");
+                buffer.append(ManagementConstants.BUS_ID_PROP + "=" + 
bus.getId() + ",");
+                Message message = ex.getOutMessage();
+                if (isClient(message)) {
+                    buffer.append(ManagementConstants.TYPE_PROP + "=" + 
Counter.PERFORMANCE_COUNTER
+                                  + ".Client,");
+                } else {
+                    buffer.append(ManagementConstants.TYPE_PROP + "=" + 
Counter.PERFORMANCE_COUNTER
+                                  + ".Server,");
+                }
+                buffer.append(ManagementConstants.SERVICE_NAME_PROP + "=" + 
serviceName + ",");
+    
+                buffer.append(ManagementConstants.PORT_NAME_PROP + "=" + 
portName);
+                
+                try {
+                    serviceCounterName = new ObjectName(buffer.toString());
+                    endpoint.put("javax.management.ObjectName", 
serviceCounterName);
+                } catch (MalformedObjectNameException e) {
+                    LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", 
e);
+                }
             }
-            buffer.append(ManagementConstants.SERVICE_NAME_PROP + "=" + 
serviceName + ",");
-
-            buffer.append(ManagementConstants.PORT_NAME_PROP + "=" + portName);
-        }
-        ObjectName serviceCounterName = null;
-        try {
-            serviceCounterName = new ObjectName(buffer.toString());
-        } catch (MalformedObjectNameException e) {
-            LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", e);
         }
         return serviceCounterName;
         
@@ -162,7 +172,14 @@ public abstract class 
AbstractMessageResponseTimeInterceptor extends AbstractPha
     }
     
     protected ObjectName getOperationCounterName(Exchange ex, ObjectName 
sericeCounterName) {
-        OperationInfo opInfo = ex.get(OperationInfo.class);
+        BindingOperationInfo bop = ex.getBindingOperationInfo();
+        OperationInfo opInfo = bop == null ? null : bop.getOperationInfo();
+        if (opInfo != null) {
+            ObjectName o = opInfo.getProperty("javax.management.ObjectName", 
ObjectName.class);
+            if (o != null) {
+                return o;
+            }
+        }
         String operationName = opInfo == null ? null : "\"" + 
opInfo.getName().getLocalPart() + "\"";
 
         if (operationName == null) {
@@ -179,16 +196,15 @@ public abstract class 
AbstractMessageResponseTimeInterceptor extends AbstractPha
         ObjectName operationCounter = null;
         try {
             operationCounter = new ObjectName(operationCounterName);
-            
+            if (opInfo != null) {
+                opInfo.setProperty("javax.management.ObjectName", 
operationCounter);
+            }
         } catch (MalformedObjectNameException e) {
             LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", e);
         }
         return operationCounter;
         
     }
-    
-    
-
     protected String escapePatternChars(String value) {
         // This can be replaced if really needed with pattern-based matching
         if (value.lastIndexOf(QUESTION_MARK) != -1) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/0d7ec247/rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java
----------------------------------------------------------------------
diff --git 
a/rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java
 
b/rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java
index 751f903..15ffa71 100644
--- 
a/rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java
+++ 
b/rt/management/src/test/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTestBase.java
@@ -118,6 +118,10 @@ public class AbstractMessageResponseTestBase extends 
Assert {
         
EasyMock.expect(endpointInfo.getName()).andReturn(PORT_NAME).anyTimes();
         
EasyMock.expect(endpoint.getEndpointInfo()).andReturn(endpointInfo).anyTimes();
         
EasyMock.expect(exchange.get(Endpoint.class)).andReturn(endpoint).anyTimes();
+        
EasyMock.expect(endpoint.get("javax.management.ObjectName")).andReturn(null).anyTimes();
+        
EasyMock.expect(endpoint.put(EasyMock.eq("javax.management.ObjectName"), 
EasyMock.anyObject(ObjectName.class)))
+            .andReturn(null).anyTimes();
+        EasyMock.expect(exchange.getEndpoint()).andReturn(endpoint).anyTimes();
         EasyMock.replay(endpointInfo);
         EasyMock.replay(endpoint);
         
@@ -128,9 +132,15 @@ public class AbstractMessageResponseTestBase extends 
Assert {
       
     protected void setupOperationForMessage() {
         OperationInfo op = EasyMock.createMock(OperationInfo.class);
-        EasyMock.expect(op.getName()).andReturn(OPERATION_NAME);        
-        EasyMock.expect(exchange.get(OperationInfo.class)).andReturn(op);
-        EasyMock.replay(op);
+        BindingOperationInfo bop = 
EasyMock.createMock(BindingOperationInfo.class);
+        EasyMock.expect(exchange.getBindingOperationInfo()).andReturn(bop);
+        EasyMock.expect(bop.getOperationInfo()).andReturn(op);
+        EasyMock.expect(op.getName()).andReturn(OPERATION_NAME);
+        EasyMock.expect(op.getProperty("javax.management.ObjectName", 
ObjectName.class)).andReturn(null).anyTimes();
+        op.setProperty(EasyMock.eq("javax.management.ObjectName"),
+                                       EasyMock.anyObject(ObjectName.class));
+        EasyMock.expectLastCall();
+        EasyMock.replay(bop, op);
     }
 
 }

Reply via email to