[ 
https://issues.apache.org/jira/browse/ARIES-1068?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13782973#comment-13782973
 ] 

Guillaume Nodet edited comment on ARIES-1068 at 2/19/18 10:12 AM:
------------------------------------------------------------------

Found some probable issues with the fix patch linked -

org.apache.aries.jndi.startup.Activator - Need to make the BundleTracker bt a 
field, and if it is not null, bt.close() it at the end of the stop method.

org.apache.aries.jndi.tracker.ServiceTrackerCustomizers -

BaseCachingServiceTracker.clearCache(Bundle b) should be:

{code}

private void clearCache(Bundle b) {
    for (BundleContext bCtx : ctxServiceRefServiceCache.keySet()) {
        Bundle cacheB = null;
        try { 
            cacheB = bCtx.getBundle(); 
        } catch (IllegalStateException ise) { 
            if (LOGGER.isLoggable(Level.FINE))   
                LOGGER.fine("BaseCachingServiceTracker.clearCache 
IllegalStateException caught getting bundle on " + bCtx); 
        }
        if (cacheB == null || cacheB.equals(b)) { 
            Object removedObj = ctxServiceRefServiceCache.remove(bCtx); 
            if (LOGGER.isLoggable(Level.FINE)) 
                LOGGER.fine("BaseCachingServiceTracker.clearCache Removed " + 
removedObj); 
        }
     }
 }
 {code}
 
 
 CacheBundleTrackerCustomizer.removedBundle should start with :
 
 {code}

public void removedBundle(Bundle arg0, BundleEvent arg1, Object arg2) {
    //Work through srCache to find the bundle by matching to the context
    if (LOGGER.isLoggable(Level.FINE)) 
        LOGGER.fine("removedBundle: Bundle " + arg0);
    for (BundleContext bCtx : srCache.keySet()) {
        Bundle cacheB = null;
        try { 
            cacheB = bCtx.getBundle(); 
        } catch (IllegalStateException ise) { 
            if (LOGGER.isLoggable(Level.FINE)) 
                LOGGER.fine("CacheBundleTrackerCustomizer.removedBundle 
IllegalStateException caught getting bundle on " + bCtx); 
        }
        if (cacheB == null || cacheB.equals(arg0)) {
            if (LOGGER.isLoggable(Level.FINE)) 
                LOGGER.fine("Found matching bundleContext " + bCtx);
            //Removing the bundle in the cache, so clear it out.
             ...
{code}


was (Author: sgormley):
Found some probable issues with the fix patch linked -

org.apache.aries.jndi.startup.Activator - Need to make the BundleTracker bt a 
field, and if it is not null, bt.close() it at the end of the stop method.

org.apache.aries.jndi.tracker.ServiceTrackerCustomizers -

BaseCachingServiceTracker.clearCache(Bundle b) should be:

{code}

private void clearCache(Bundle b) {
 for (BundleContext bCtx : ctxServiceRefServiceCache.keySet()) {
 Bundle cacheB = null;
 try

{ cacheB = bCtx.getBundle(); } catch (IllegalStateException ise) \{ if 
(LOGGER.isLoggable(Level.FINE)) 
LOGGER.fine("BaseCachingServiceTracker.clearCache IllegalStateException caught 
getting bundle on " + bCtx); }
 if (cacheB == null || cacheB.equals(b)) \{ Object removedObj = 
ctxServiceRefServiceCache.remove(bCtx); if (LOGGER.isLoggable(Level.FINE)) 
LOGGER.fine("BaseCachingServiceTracker.clearCache Removed " + removedObj); }
 }
 }
 \{code}
 
 
 CacheBundleTrackerCustomizer.removedBundle should start with :
 
 \{code}

public void removedBundle(Bundle arg0, BundleEvent arg1, Object arg2) {
 //Work through srCache to find the bundle by matching to the context
 if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("removedBundle: Bundle " + 
arg0);
 for (BundleContext bCtx : srCache.keySet()) {
 Bundle cacheB = null;
 try \{ cacheB = bCtx.getBundle(); }

catch (IllegalStateException ise)

{ if (LOGGER.isLoggable(Level.FINE)) 
LOGGER.fine("CacheBundleTrackerCustomizer.removedBundle IllegalStateException 
caught getting bundle on " + bCtx); }

if (cacheB == null || cacheB.equals(arg0)) {
 if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("Found matching bundleContext " 
+ bCtx);
 //Removing the bundle in the cache, so clear it out.
 ...

{code}

> JNDI lookup performance bad when security enabled
> -------------------------------------------------
>
>                 Key: ARIES-1068
>                 URL: https://issues.apache.org/jira/browse/ARIES-1068
>             Project: Aries
>          Issue Type: Bug
>          Components: JNDI
>            Reporter: Simon Gormley
>            Assignee: Jeremy Hughes
>            Priority: Critical
>         Attachments: servicelookupperf.patch
>
>
> JNDI lookups can be slow if Java security is enabled, specifically the 
> getService methods take time.
> If the services are cached then the lookup only has to be performed once, but 
> care has to be taken that the context performing the service lookup has the 
> required permissions to do so, and so cache buckets for each context will be 
> necessary. 
> Also to prevent a leak, when contexts drop from scope, the associated caches 
> need to be cleared out.
> The ServiceTrackerCustomizer for JNDI already had some caching ability, and 
> the provided patch extends this to avoid looking up Services where possible.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to