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

Simon Gormley commented on ARIES-1068:
--------------------------------------

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:

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);
        }
      }
    }



CacheBundleTrackerCustomizer.removedBundle should start with :

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.
...



> 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
>            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
(v6.1#6144)

Reply via email to