[jboss-cvs] JBossAS SVN: r99997 - in projects/jboss-osgi: trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jan 27 10:37:39 EST 2010
Author: thomas.diesler at jboss.com
Date: 2010-01-27 10:37:38 -0500 (Wed, 27 Jan 2010)
New Revision: 99997
Modified:
projects/jboss-osgi/projects/bundles/serviceloader/trunk/src/main/java/org/jboss/osgi/serviceloader/internal/ServiceLoaderInterceptor.java
projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/ServiceLoaderTestCase.java
projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/client/ServiceLoaderClientActivator.java
projects/jboss-osgi/trunk/testsuite/example/src/test/resources/serviceloader/example-serviceloader-impl.bnd
Log:
Improve serviceloader example
Modified: projects/jboss-osgi/projects/bundles/serviceloader/trunk/src/main/java/org/jboss/osgi/serviceloader/internal/ServiceLoaderInterceptor.java
===================================================================
--- projects/jboss-osgi/projects/bundles/serviceloader/trunk/src/main/java/org/jboss/osgi/serviceloader/internal/ServiceLoaderInterceptor.java 2010-01-27 13:47:50 UTC (rev 99996)
+++ projects/jboss-osgi/projects/bundles/serviceloader/trunk/src/main/java/org/jboss/osgi/serviceloader/internal/ServiceLoaderInterceptor.java 2010-01-27 15:37:38 UTC (rev 99997)
@@ -34,11 +34,12 @@
import org.jboss.virtual.VirtualFile;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import aQute.lib.osgi.Constants;
-
/**
* An interceptor that registeres service defained in META-INF/services.
*
@@ -102,12 +103,16 @@
continue;
}
- // Register the service instance
- Object serviceInstance = implClass.newInstance();
- BundleContext bundleContext = bundle.getBundleContext();
+ // Provide service properties
Hashtable<String, String> props = new Hashtable<String, String>();
props.put(Constants.VERSION_ATTRIBUTE, bundle.getVersion().toString());
- bundleContext.registerService(serviceName, serviceInstance, props);
+ String vendor = (String)bundle.getHeaders().get(Constants.BUNDLE_VENDOR);
+ props.put(Constants.SERVICE_VENDOR, (vendor != null ? vendor : "anonymous"));
+
+ // Register the service factory
+ MetaInfServiceFactory factory = new MetaInfServiceFactory(serviceClass);
+ BundleContext bundleContext = bundle.getBundleContext();
+ bundleContext.registerService(serviceName, factory, props);
}
implClassName = br.readLine();
@@ -123,4 +128,31 @@
log.error("Cannot process: " + entryPath, ex);
}
}
+
+ static class MetaInfServiceFactory implements ServiceFactory
+ {
+ private Class<?> serviceClass;
+
+ public MetaInfServiceFactory(Class<?> serviceClass)
+ {
+ this.serviceClass = serviceClass;
+ }
+
+ public Object getService(Bundle bundle, ServiceRegistration registration)
+ {
+ try
+ {
+ Object serviceInstance = serviceClass.newInstance();
+ return serviceInstance;
+ }
+ catch (Exception ex)
+ {
+ throw new IllegalStateException("Cannot instanciate service", ex);
+ }
+ }
+
+ public void ungetService(Bundle bundle, ServiceRegistration registration, Object service)
+ {
+ }
+ }
}
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/ServiceLoaderTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/ServiceLoaderTestCase.java 2010-01-27 13:47:50 UTC (rev 99996)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/ServiceLoaderTestCase.java 2010-01-27 15:37:38 UTC (rev 99997)
@@ -87,8 +87,8 @@
OSGiBundle clientBundle = runtime.installBundle("example-serviceloader-client.jar");
clientBundle.start();
- OSGiServiceReference[] srefs = runtime.getServiceReferences(AccountService.class.getName(), "(version=1.0.0)");
- assertNotNull("AccountService available", srefs);
+ OSGiServiceReference[] srefs = runtime.getServiceReferences(AccountService.class.getName(), "(service.vendor=JBoss*)");
+ assertNotNull("AccountService not null", srefs);
assertEquals("One AccountService available", 1, srefs.length);
assertBundleState(Bundle.ACTIVE, implBundle.getState());
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/client/ServiceLoaderClientActivator.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/client/ServiceLoaderClientActivator.java 2010-01-27 13:47:50 UTC (rev 99996)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/serviceloader/client/ServiceLoaderClientActivator.java 2010-01-27 15:37:38 UTC (rev 99997)
@@ -69,7 +69,7 @@
ServiceReference[] srefs = null;
try
{
- String filter = "(version=1.0.0)";
+ String filter = "(service.vendor=JBoss*)";
srefs = context.getServiceReferences(AccountService.class.getName(), filter);
}
catch (InvalidSyntaxException ex)
@@ -85,7 +85,7 @@
Filter filter = null;
try
{
- String filterstr = "(&(" + Constants.OBJECTCLASS + "=" + AccountService.class.getName() + ")(version=1.0.0))";
+ String filterstr = "(&(" + Constants.OBJECTCLASS + "=" + AccountService.class.getName() + ")(service.vendor=JBoss*))";
filter = FrameworkUtil.createFilter(filterstr);
}
catch (InvalidSyntaxException ex)
@@ -101,6 +101,13 @@
service = (AccountService)super.addingService(reference);
return service;
}
+
+ @Override
+ public void removedService(ServiceReference reference, Object tracked)
+ {
+ super.removedService(reference, tracked);
+ service = null;
+ }
};
tracker.open();
}
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/resources/serviceloader/example-serviceloader-impl.bnd
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/resources/serviceloader/example-serviceloader-impl.bnd 2010-01-27 13:47:50 UTC (rev 99996)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/resources/serviceloader/example-serviceloader-impl.bnd 2010-01-27 15:37:38 UTC (rev 99997)
@@ -1,7 +1,7 @@
# bnd build -classpath target/test-classes -output target/test-libs/example-serviceloader-impl.jar src/test/resources/example/serviceloader/example-serviceloader-impl.bnd
Bundle-SymbolicName: example-serviceloader-impl
-Bundle-Version: 1.0.0
+Bundle-Vendor: JBoss, a division of RedHat
Import-Package: org.jboss.test.osgi.example.serviceloader.service;version="[1.0,2.0)"
Private-Package: org.jboss.test.osgi.example.serviceloader.service.internal
Include-Resource: META-INF/services/org.jboss.test.osgi.example.serviceloader.service.AccountService=../META-INF/services/org.jboss.test.osgi.example.serviceloader.service.AccountService
More information about the jboss-cvs-commits
mailing list