You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sergey Beryozkin (JIRA)" <ji...@apache.org> on 2016/11/04 17:06:58 UTC
[jira] [Updated] (CXF-6865) Add cache for target resouce method
matching
[ https://issues.apache.org/jira/browse/CXF-6865?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Beryozkin updated CXF-6865:
----------------------------------
Fix Version/s: 3.1.9
3.2.0
> Add cache for target resouce method matching
> --------------------------------------------
>
> Key: CXF-6865
> URL: https://issues.apache.org/jira/browse/CXF-6865
> Project: CXF
> Issue Type: Improvement
> Components: JAX-RS
> Affects Versions: 3.1.6, 3.0.9
> Environment: mac, windows
> Reporter: Neal Hu
> Fix For: 3.2.0, 3.1.9
>
> Attachments: JAXRSInInterceptor.patch, ResourceMethodCache.java
>
>
> Find the target resouce method in JAXRSInInterceptor is time comsuming:
> JAXRSInInterceptor.java:159==>JAXRSUtils.selectResourceClass(resources, rawPath, message);
> Adding cache for the ori, matchedvalues and mediatype will improve the performence.
> The bottleneck of the CXF implementation is recursiive searching the target root resouce classes.
> {code:java}
> String ckey = message.get(Message.BASE_PATH) + ":" + rawPath + ":" + httpMethod + ":" + requestContentType + ":" + acceptTypes;
> if (resourceMethodCache != null) {
> ResourceMethodCache rmCache = resourceMethodCache.get(ckey);
> if (rmCache != null) {
> ori = rmCache.getOperationResourceInfo();
> matchedValues = rmCache.getValues();
> String mediaType = rmCache.getMediaType();
> if (!ori.isSubResourceLocator() && mediaType != null) {
> message.getExchange().put(Message.CONTENT_TYPE, mediaType);
> }
> setExchangeProperties(message, exchange, ori, matchedValues, resources.size());
> shouldFind = false;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)