[
https://issues.apache.org/jira/browse/CXF-2541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12793426#action_12793426
]
Cyrille Le Clerc edited comment on CXF-2541 at 12/21/09 11:52 PM:
------------------------------------------------------------------
I am not sure but I think the "org.apache.cxf.resource.operation.name" property
should be set on the exchange rather than on the message in
o.a.c.jaxrs.client.AbstractClient.setPlainOperationNameProperty() because
o.a.c.management.interceptor.AbstractMessageResponseTimeInterceptor.increaseCounter()
is looking on the exchange (see below).
Shall I commit the change ?
Cyrille
{code:title=AbstractClient.java : proposed version working on the exchange}
public class AbstractClient implements Client {
...
protected void setPlainOperationNameProperty(Message outMessage, String
name) {
outMessage.getExchange().put("org.apache.cxf.resource.operation.name",
name);
}
}
{code}
{code:title=AbstractClient.java : current version working on the outMessage}
public class AbstractClient implements Client {
...
protected void setPlainOperationNameProperty(Message outMessage, String
name) {
outMessage.put("org.apache.cxf.resource.operation.name", name);
}
}
{code}
{code:title=AbstractMessageResponseTimeInterceptor.java : current version
working on the exchange}
public abstract class AbstractMessageResponseTimeInterceptor extends
AbstractPhaseInterceptor<Message> {
...
private void increaseCounter(Exchange ex, MessageHandlingTimeRecorder mhtr)
{
...
if (operationName == null) {
Object nameProperty =
ex.get("org.apache.cxf.resource.operation.name");
if (nameProperty != null) {
operationName = "\"" + nameProperty.toString() + "\"";
}
}
...
}
{code}
was (Author: cleclerc):
I am not sure but I think the "org.apache.cxf.resource.operation.name"
property should be set on the exchange rather than on the message in
o.a.c.jaxrs.client.AbstractClient.setPlainOperationNameProperty() because
o.a.c.management.interceptor.AbstractMessageResponseTimeInterceptor.increaseCounter()
is looking on the exchange (see below).
Shall I commit the change ?
Cyrille
{code:title=AbstractClient.java : proposed version working on the exchange}
public class AbstractClient implements Client {
...
protected void setPlainOperationNameProperty(Message outMessage, String
name) {
outMessage.getExchange().put("org.apache.cxf.resource.operation.name",
name);
}
}
{code}
{code:title=AbstractClient.java : current version working on the outMessage}
public class AbstractClient implements Client {
...
protected void setPlainOperationNameProperty(Message outMessage, String
name) {
outMessage.put("org.apache.cxf.resource.operation.name", name);
}
}
{code}
{code:title=AbstractMessageResponseTimeInterceptor.java : current version
working on the exchange}
public abstract class AbstractMessageResponseTimeInterceptor extends
AbstractPhaseInterceptor<Message> {
...
private void increaseCounter(Exchange ex, MessageHandlingTimeRecorder mhtr)
{
...
if (operationName == null) {
Object nameProperty =
ex.get("org.apache.cxf.resource.operation.name");
if (nameProperty != null) {
operationName = "\"" + nameProperty.toString() + "\"";
}
}
...
}
> JMX Per Operation ResponseTime not collected for JAX-RS services
> ----------------------------------------------------------------
>
> Key: CXF-2541
> URL: https://issues.apache.org/jira/browse/CXF-2541
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 2.2.3
> Reporter: Cyrille Le Clerc
> Fix For: 2.2.6, 2.3
>
> Attachments: CXF-2541-jaxrs-client.patch, cxf-2541.patch,
> usage-of-OperationInfo-and-OperationResourceInfo.log
>
>
> The JMX ResponseTimeFeature does not work on a per operation basis for JAXRS
> calls but works on a per Service basis.
> My understanding is that it works on a per service basis because both
> o.a.c.jaxrs.JAXRSServiceImpl and o.a.c.service.ServiceImpl implement the same
> o.a.c.service.Service interface and are indexed in the Exchange map at the
> o.a.c.service.Service entry.
> On the other hand, it does not work on the per operation basis because
> o.a.c.jaxrs.model.OperationResourceInfo and o.a.c.service.model.OperationInfo
> do not implement a shared interface. Thus, the ResponseTimeFeature is
> specific to SOAP operations and can not handle JAXRS 'operations'.
> A fix could be to introduce a shared Operation interface, to make both
> OperationResourceInfo and OperationInfo implement this interface and to us
> the interface as the key for the Exchange map instead of the current
> OperationResourceInfo.class and OperationInfo.class.
> There are 30 "put()" & "get()" calls on OperationInfo.class. and 8 "put()" &
> "get()" calls on OperationResourceInfo.class.
> I would be very pleased to propose a patch if the project is interested.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.