[
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)