ensure injection uses OSGi lookup (ServiceTracker) and go through hooks instead of bypassing them
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java b/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
index da9e824..3d1ad0b 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java
@@ -13,7 +13,6 @@
  */
 package org.apache.winegrower.service;
 
-import static java.util.Arrays.asList;
 import static java.util.Collections.list;
 import static java.util.Optional.ofNullable;
 import static java.util.stream.Collectors.groupingBy;
@@ -53,6 +52,7 @@
 import org.osgi.service.cm.ManagedService;
 import org.osgi.service.event.EventConstants;
 import org.osgi.service.event.EventHandler;
+import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -125,10 +125,15 @@
     }
 
     public <T> Optional<T> findService(final Class<T> type) {
-        return services.stream()
-                .filter(it -> asList(it.getClasses()).contains(type.getName()))
-                .findFirst()
-                .map(reg -> (T) ServiceReferenceImpl.class.cast(reg.getReference()).getReference());
+        final Bundle bundle = framework.getRegistry().getBundles().get(0L).getBundle();
+        final ServiceTracker<T, T> tracker = new ServiceTracker<>(bundle.getBundleContext(), type, null);
+        tracker.open();
+        try {
+            return ofNullable(tracker.waitForService(0L));
+        } catch (final InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new IllegalStateException(e);
+        }
     }
 
     public synchronized void addListener(final ServiceListener listener, final Filter filter,
diff --git a/winegrower-core/src/test/java/org/apache/winegrower/service/HookTest.java b/winegrower-core/src/test/java/org/apache/winegrower/service/HookTest.java
index e823d5d..c2e4dfa 100644
--- a/winegrower-core/src/test/java/org/apache/winegrower/service/HookTest.java
+++ b/winegrower-core/src/test/java/org/apache/winegrower/service/HookTest.java
@@ -24,9 +24,7 @@
 import org.apache.winegrower.test.hook.SimpleService;
 import org.junit.jupiter.api.Test;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 class HookTest {
     @Test
@@ -39,23 +37,7 @@
                 .map(BundleImpl::getBundleContext)
                 .orElseThrow(IllegalStateException::new);
         final ServiceTracker<SimpleService, SimpleService> tracker = new ServiceTracker<>(
-                bundleContext, SimpleService.class,
-                new ServiceTrackerCustomizer<SimpleService, SimpleService>() {
-                    @Override
-                    public SimpleService addingService(final ServiceReference<SimpleService> serviceReference) {
-                        return serviceReference.getBundle().getBundleContext().getService(serviceReference);
-                    }
-
-                    @Override
-                    public void modifiedService(final ServiceReference<SimpleService> serviceReference, final SimpleService simpleService) {
-                        // no-op
-                    }
-
-                    @Override
-                    public void removedService(final ServiceReference<SimpleService> serviceReference, final SimpleService simpleService) {
-                        // no-op
-                    }
-                });
+                bundleContext, SimpleService.class, null);
         tracker.open();
         tracker.waitForService(5000L);
         assertEquals("I am the replacement", tracker.getService().get());