You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dl...@apache.org on 2017/03/13 07:07:13 UTC

svn commit: r1786633 - in /felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl: Activator.java SchematizerImpl.java

Author: dleangen
Date: Mon Mar 13 07:07:13 2017
New Revision: 1786633

URL: http://svn.apache.org/viewvc?rev=1786633&view=rev
Log:
FELIX-5588: Schematizer service now implements ServiceFactory<Schematizer>

Modified:
    felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/Activator.java
    felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/SchematizerImpl.java

Modified: felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/Activator.java?rev=1786633&r1=1786632&r2=1786633&view=diff
==============================================================================
--- felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/Activator.java (original)
+++ felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/Activator.java Mon Mar 13 07:07:13 2017
@@ -23,6 +23,7 @@ import org.apache.felix.schematizer.Sche
 import org.apache.felix.serializer.impl.json.JsonSerializerImpl;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceFactory;
 import org.osgi.service.serializer.Serializer;
 
 public class Activator implements BundleActivator {
@@ -35,7 +36,7 @@ public class Activator implements Bundle
         jsonProps.put("provider", "felix");
         context.registerService(Serializer.class, new JsonSerializerImpl(), jsonProps);
 
-        context.registerService(Schematizer.class, new SchematizerImpl(), null);
+        context.registerService(Schematizer.class, (ServiceFactory<Schematizer>)new SchematizerImpl(), null);
     }
 
     @Override

Modified: felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/SchematizerImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/SchematizerImpl.java?rev=1786633&r1=1786632&r2=1786633&view=diff
==============================================================================
--- felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/SchematizerImpl.java (original)
+++ felix/trunk/converter/schematizer/src/main/java/org/apache/felix/schematizer/impl/SchematizerImpl.java Mon Mar 13 07:07:13 2017
@@ -44,16 +44,35 @@ import org.apache.felix.schematizer.Sche
 import org.apache.felix.schematizer.Schematizer;
 import org.apache.felix.schematizer.TypeRule;
 import org.osgi.dto.DTO;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.util.converter.StandardConverter;
 import org.osgi.util.converter.TypeReference;
 
-public class SchematizerImpl implements Schematizer {
+public class SchematizerImpl implements Schematizer, ServiceFactory<Schematizer> {
 
     private final Map<String, SchemaImpl> schemas = new HashMap<>();
     private volatile Map<String, Map<String, Object>> typeRules = new HashMap<>();
     private final List<ClassLoader> classloaders = new ArrayList<>();
 
     @Override
+    public Schematizer getService( Bundle bundle, ServiceRegistration<Schematizer> registration ) {
+        return this;
+    }
+
+    @Override
+    public void ungetService(Bundle bundle, ServiceRegistration<Schematizer> registration, Schematizer service) {
+        // For now, a brutish, simplistic version. If there is any change to the environment, just
+        // wipe the state and start over.
+        //
+        // TODO: something more precise, which will remove only the classes that are no longer valid (if that is possible).
+        schemas.clear();
+        typeRules.clear();
+        classloaders.clear();
+    }
+
+    @Override
     public Optional<Schema> get(String name) {
         if (!schemas.containsKey(name)) {
             SchemaImpl schema = schematize(name, "");