Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6CB28498D for ; Wed, 25 May 2011 14:52:19 +0000 (UTC) Received: (qmail 42121 invoked by uid 500); 25 May 2011 14:52:19 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 42092 invoked by uid 500); 25 May 2011 14:52:19 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 42085 invoked by uid 99); 25 May 2011 14:52:19 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 May 2011 14:52:19 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 May 2011 14:52:18 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EC2082388906; Wed, 25 May 2011 14:51:57 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1127547 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: ServiceRegistry.java URLHandlersActivator.java Date: Wed, 25 May 2011 14:51:57 -0000 To: commits@felix.apache.org From: rickhall@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110525145157.EC2082388906@eris.apache.org> Author: rickhall Date: Wed May 25 14:51:57 2011 New Revision: 1127547 URL: http://svn.apache.org/viewvc?rev=1127547&view=rev Log: Modify URL Handlers impl to use same hook tracking mechanism as the other hooks, which was introduced for byte-code weaving hooks. (FELIX-2959) Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersActivator.java Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java?rev=1127547&r1=1127546&r2=1127547&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java (original) +++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistry.java Wed May 25 14:51:57 2011 @@ -18,6 +18,7 @@ */ package org.apache.felix.framework; +import java.net.ContentHandler; import java.util.*; import org.apache.felix.framework.capabilityset.CapabilitySet; import org.apache.felix.framework.capabilityset.SimpleFilter; @@ -26,8 +27,8 @@ import org.apache.felix.framework.wiring import org.osgi.framework.*; import org.osgi.framework.hooks.service.*; import org.osgi.framework.hooks.weaving.WeavingHook; -import org.osgi.framework.launch.Framework; import org.osgi.framework.wiring.BundleCapability; +import org.osgi.service.url.URLStreamHandlerService; public class ServiceRegistry { @@ -54,7 +55,9 @@ public class ServiceRegistry EventHook.class, FindHook.class, ListenerHook.class, - WeavingHook.class + WeavingHook.class, + URLStreamHandlerService.class, + ContentHandler.class }; private final Map, Set>> m_allHooks = new HashMap, Set>>(); Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersActivator.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersActivator.java?rev=1127547&r1=1127546&r2=1127547&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersActivator.java (original) +++ felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersActivator.java Wed May 25 14:51:57 2011 @@ -1,4 +1,4 @@ -/* +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -18,14 +18,17 @@ */ package org.apache.felix.framework; +import java.net.ContentHandler; import java.util.Arrays; import java.util.Collections; import java.util.Map; +import java.util.Set; import org.apache.felix.framework.util.FelixConstants; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.osgi.service.url.URLStreamHandlerService; import org.osgi.util.tracker.ServiceTracker; /** @@ -63,10 +66,6 @@ class URLHandlersActivator implements Bu if (enable) { - m_streamTracker = new ServiceTracker(context, "org.osgi.service.url.URLStreamHandlerService", null); - m_contentTracker= new ServiceTracker(context, "java.net.ContentHandler", null); - m_streamTracker.open(); - m_contentTracker.open(); m_framework.setURLHandlersActivator(this); } URLHandlers.registerFrameworkInstance(m_framework, enable); @@ -76,66 +75,49 @@ class URLHandlersActivator implements Bu { URLHandlers.unregisterFrameworkInstance(m_framework); m_framework.setURLHandlersActivator(null); - if (m_streamTracker != null) - { - m_streamTracker.close(); - } - if (m_contentTracker != null) - { - m_contentTracker.close(); - } - m_streamTracker = null; - m_contentTracker = null; } - private volatile ServiceTracker m_streamTracker; - private volatile ServiceTracker m_contentTracker; - protected Object getStreamHandlerService(String protocol) { - return get(m_streamTracker, "url.handler.protocol", protocol); + return get( + m_framework.getHooks(URLStreamHandlerService.class), + "url.handler.protocol", protocol); } protected Object getContentHandlerService(String mimeType) { - return get(m_contentTracker, "url.content.mimetype", mimeType); + return get( + m_framework.getHooks(ContentHandler.class), + "url.content.mimetype", mimeType); } - private Object get(ServiceTracker tracker, String key, String value) + private S get(Set> hooks, String key, String value) { Object service = null; - if (tracker != null) + if (!hooks.isEmpty()) { - ServiceReference[] refs = tracker.getServiceReferences(); - - if (refs != null) + for (ServiceReference ref : hooks) { - if (refs.length > 1) - { - Arrays.sort(refs, Collections.reverseOrder()); - } - - for (int i = 0;(i < refs.length) && (service == null);i++) + Object values = ref.getProperty(key); + if (values instanceof String[]) { - Object values = refs[i].getProperty(key); - if (values instanceof String[]) + for (int valueIdx = 0; + (valueIdx < ((String[]) values).length) && (service == null); + valueIdx++) { - for (int j = 0;(j < ((String[]) values).length) && (service == null);j++) + if (value.equals(((String[]) values)[valueIdx])) { - if (value.equals(((String[]) values)[j])) - { - service = tracker.getService(refs[i]); - } + return m_framework.getService(m_framework, ref); } } - else if (value.equals(values)) - { - service = tracker.getService(refs[i]); - } + } + else if (value.equals(values)) + { + return m_framework.getService(m_framework, ref); } } } - return service; + return null; } -} +} \ No newline at end of file