The DeclarativeServicesTestCase shows how a service can be made available through a Declarative Services descriptor.
<component name="sample.component" immediate="true"> <implementation class="org.jboss.test.osgi.example.ds.SampleComparator" /> <property name="service.description" value="Sample Comparator Service" /> <property name="service.vendor" value="Apache Software Foundation" /> <service> <provide interface="java.util.Comparator" /> </service> </component>
The test then verifies that the service becomes available
public void testImmediateService() throws Exception { // Track the service provided by the test bundle final CountDownLatch latch = new CountDownLatch(1); ServiceTracker tracker = new ServiceTracker(context, Comparator.class.getName(), null) { public Object addingService(ServiceReference reference) { Comparator<Object> service = (Comparator<Object>) super.addingService(reference); latch.countDown(); return service; } }; tracker.open(); // Wait for the service to become available if (latch.await(2, TimeUnit.SECONDS) == false) throw new TimeoutException("Timeout tracking Comparator service"); }
This test uses the OSGi Repository functionality to provision the runtime with the required support functionality like this
DeclarativeServicesSupport.provideDeclarativeServices(context, bundle);
To enable declarative services support in AS7 you would configure this capability
<capability name="org.apache.felix:org.apache.felix.scr:1.6.0"/>