Javolution 6.0.0 java
ServiceTrackerImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.osgi.internal;
10 
11 import org.osgi.framework.BundleContext;
12 import org.osgi.util.tracker.ServiceTracker;
13 
18 public final class ServiceTrackerImpl<C> {
19 
20  private volatile ServiceTracker<C, C> tracker;
21  private final Class<C> type;
22  private final Class<? extends C> defaultImplClass;
23  private C defaultImpl;
24 
26  public ServiceTrackerImpl(Class<C> type, Class<? extends C> defaultImplClass) {
27  this.defaultImplClass = defaultImplClass;
28  this.type = type;
29  }
30 
32  public void activate(BundleContext bc) {
33  ServiceTracker<C, C> trk = new ServiceTracker<C, C>(bc, type, null);
34  trk.open();
35  tracker = trk;
36  }
37 
39  public void deactivate(BundleContext bc) {
40  tracker.close();
41  tracker = null;
42  }
43 
45  public Object[] getServices() {
46  ServiceTracker<C, C> trk = tracker;
47  if (trk != null) {
48  Object[] services = trk.getServices();
49  if (services != null) return services;
50  }
51  synchronized (this) {
52  if (defaultImpl == null) {
53  try {
54  defaultImpl = defaultImplClass.newInstance();
55  } catch (Throwable error) {
56  throw new RuntimeException(error);
57  }
58  }
59  }
60  return new Object[] { defaultImpl };
61  }
62 }
javolution.osgi.internal.ServiceTrackerImpl.deactivate
void deactivate(BundleContext bc)
Definition: ServiceTrackerImpl.java:39
javolution.osgi.internal.ServiceTrackerImpl
Definition: ServiceTrackerImpl.java:18
javolution.osgi.internal.ServiceTrackerImpl.activate
void activate(BundleContext bc)
Definition: ServiceTrackerImpl.java:32
javolution.osgi.internal.ServiceTrackerImpl.defaultImplClass
final Class<? extends C > defaultImplClass
Definition: ServiceTrackerImpl.java:22
javolution.osgi.internal.ServiceTrackerImpl.defaultImpl
C defaultImpl
Definition: ServiceTrackerImpl.java:23
javolution.osgi.internal.ServiceTrackerImpl.tracker
volatile ServiceTracker< C, C > tracker
Definition: ServiceTrackerImpl.java:20
javolution.osgi.internal.ServiceTrackerImpl.ServiceTrackerImpl
ServiceTrackerImpl(Class< C > type, Class<? extends C > defaultImplClass)
Definition: ServiceTrackerImpl.java:26
javolution.osgi.internal.ServiceTrackerImpl.type
final Class< C > type
Definition: ServiceTrackerImpl.java:21
javolution.osgi.internal.ServiceTrackerImpl.getServices
Object[] getServices()
Definition: ServiceTrackerImpl.java:45