[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