You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2019/05/17 07:12:08 UTC
svn commit: r1859416 - in
/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl:
Activator.java persistence/PersistenceManagerTracker.java
Author: cziegeler
Date: Fri May 17 07:12:08 2019
New Revision: 1859416
URL: http://svn.apache.org/viewvc?rev=1859416&view=rev
Log:
FELIX-6131 : Add in-memory persistence manager
Modified:
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/Activator.java
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java
Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/Activator.java?rev=1859416&r1=1859415&r2=1859416&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/Activator.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/Activator.java Fri May 17 07:12:08 2019
@@ -33,6 +33,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.log.LogService;
@@ -89,22 +90,20 @@ public class Activator implements Bundle
Log.logger.start(bundleContext);
// register default file persistence manager
- final PersistenceManager defaultPM = this.registerFilePersistenceManager(bundleContext);
- if ( defaultPM == null )
- {
- throw new BundleException("Unable to register default persistence manager.");
- }
+ final ServiceFactory<PersistenceManager> defaultFactory = this.registerFilePersistenceManager(bundleContext);
+
// register memory persistence manager
registerMemoryPersistenceManager(bundleContext);
String configuredPM = bundleContext.getProperty(CM_CONFIG_PM);
- if ( configuredPM != null && configuredPM.isEmpty() )
+ if (configuredPM != null && (configuredPM.isEmpty()
+ || FilePersistenceManager.DEFAULT_PERSISTENCE_MANAGER_NAME.equals(configuredPM)))
{
configuredPM = null;
}
try
{
- this.tracker = new PersistenceManagerTracker(bundleContext, defaultPM, configuredPM);
+ this.tracker = new PersistenceManagerTracker(bundleContext, defaultFactory, configuredPM);
}
catch ( InvalidSyntaxException iae )
{
@@ -132,41 +131,47 @@ public class Activator implements Bundle
this.unregisterMemoryPersistenceManager();
}
- private PersistenceManager registerFilePersistenceManager(final BundleContext bundleContext)
+ private ServiceFactory<PersistenceManager> registerFilePersistenceManager(final BundleContext bundleContext)
{
- try
+ final Dictionary<String, Object> props = new Hashtable<>();
+ props.put(Constants.SERVICE_DESCRIPTION, "Platform Filesystem Persistence Manager");
+ props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+ props.put(Constants.SERVICE_RANKING, new Integer(Integer.MIN_VALUE));
+ props.put(PersistenceManager.PROPERTY_NAME, FilePersistenceManager.DEFAULT_PERSISTENCE_MANAGER_NAME);
+
+ final ServiceFactory<PersistenceManager> factory = new ServiceFactory<PersistenceManager>()
{
- final FilePersistenceManager fpm = new FilePersistenceManager( bundleContext,
- bundleContext.getProperty( CM_CONFIG_DIR ) );
- final Dictionary<String, Object> props = new Hashtable<>();
- props.put( Constants.SERVICE_DESCRIPTION, "Platform Filesystem Persistence Manager" );
- props.put( Constants.SERVICE_VENDOR, "The Apache Software Foundation" );
- props.put( Constants.SERVICE_RANKING, new Integer( Integer.MIN_VALUE ) );
- props.put( PersistenceManager.PROPERTY_NAME, FilePersistenceManager.DEFAULT_PERSISTENCE_MANAGER_NAME);
- filepmRegistration = bundleContext.registerService( PersistenceManager.class, fpm, props );
- return fpm;
+ private volatile FilePersistenceManager fpm;
- }
- catch ( final IllegalArgumentException iae )
- {
- Log.logger.log( LogService.LOG_ERROR, "Cannot create the FilePersistenceManager", iae );
- }
- return null;
+ @Override
+ public PersistenceManager getService(Bundle bundle, ServiceRegistration<PersistenceManager> registration) {
+ if (fpm == null) {
+ fpm = new FilePersistenceManager(bundleContext, bundleContext.getProperty(CM_CONFIG_DIR));
+ }
+
+ return fpm;
+ }
+
+ @Override
+ public void ungetService(Bundle bundle, ServiceRegistration<PersistenceManager> registration,
+ PersistenceManager service) {
+ // nothing to do
+ }
+
+ };
+ filepmRegistration = bundleContext.registerService(PersistenceManager.class, factory, props);
+
+ return factory;
}
private void registerMemoryPersistenceManager(final BundleContext bundleContext) {
- try {
- final MemoryPersistenceManager mpm = new MemoryPersistenceManager();
- final Dictionary<String, Object> props = new Hashtable<>();
- props.put(Constants.SERVICE_DESCRIPTION, "Platform Memory Persistence Manager");
- props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
- props.put(PersistenceManager.PROPERTY_NAME, "memory");
- memorypmRegistration = bundleContext.registerService(PersistenceManager.class, mpm, props);
-
- } catch (final IllegalArgumentException iae) {
- Log.logger.log(LogService.LOG_ERROR, "Cannot create the MemoryPersistenceManager", iae);
- }
+ final MemoryPersistenceManager mpm = new MemoryPersistenceManager();
+ final Dictionary<String, Object> props = new Hashtable<>();
+ props.put(Constants.SERVICE_DESCRIPTION, "Platform Memory Persistence Manager");
+ props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+ props.put(PersistenceManager.PROPERTY_NAME, "memory");
+ memorypmRegistration = bundleContext.registerService(PersistenceManager.class, mpm, props);
}
private void unregisterFilePersistenceManager()
Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java?rev=1859416&r1=1859415&r2=1859416&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java Fri May 17 07:12:08 2019
@@ -31,8 +31,10 @@ import org.apache.felix.cm.PersistenceMa
import org.apache.felix.cm.impl.ConfigurationManager;
import org.apache.felix.cm.impl.Log;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.log.LogService;
@@ -64,9 +66,9 @@ public class PersistenceManagerTracker
private volatile ServiceTracker<Object, Object> coordinatorTracker;
public PersistenceManagerTracker(final BundleContext bundleContext,
- final PersistenceManager defaultPM,
+ final ServiceFactory<PersistenceManager> defaultFactory,
final String pmName )
- throws InvalidSyntaxException
+ throws BundleException, InvalidSyntaxException
{
this.bundleContext = bundleContext;
if ( pmName != null )
@@ -81,6 +83,15 @@ public class PersistenceManagerTracker
else
{
Log.logger.log(LogService.LOG_DEBUG, "Using default persistence manager", (Object[])null);
+ PersistenceManager defaultPM = null;
+ try {
+ defaultPM = defaultFactory.getService(null, null);
+ } catch (final IllegalArgumentException iae) {
+ Log.logger.log(LogService.LOG_ERROR, "Cannot create the FilePersistenceManager", iae);
+ }
+ if (defaultPM == null) {
+ throw new BundleException("Unable to register default persistence manager.");
+ }
this.workerQueue = null;
this.persistenceManagerTracker = null;
this.activate(this.createPersistenceManagerProxy(defaultPM));