blob: f5779079b7012deedddead92782d823b6205e2d3 [file] [log] [blame]
package org.apache.aries.tx.control.jdbc.common.impl;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceRegistration;
public abstract class JDBCConnectionProviderFactoryServiceFactory implements
ServiceFactory<ResourceTrackingJDBCConnectionProviderFactory> {
Set<ResourceTrackingJDBCConnectionProviderFactory> factories = new CopyOnWriteArraySet<>();
@Override
public ResourceTrackingJDBCConnectionProviderFactory getService(Bundle bundle,
ServiceRegistration<ResourceTrackingJDBCConnectionProviderFactory> registration) {
ResourceTrackingJDBCConnectionProviderFactory factory = new ResourceTrackingJDBCConnectionProviderFactory(
getInternalJDBCConnectionProviderFactory());
factories.add(factory);
return factory;
}
@Override
public void ungetService(Bundle bundle, ServiceRegistration<ResourceTrackingJDBCConnectionProviderFactory> registration,
ResourceTrackingJDBCConnectionProviderFactory service) {
factories.remove(service);
service.closeAll();
}
public void close() {
factories.stream()
.forEach(r -> r.closeAll());
}
protected abstract InternalJDBCConnectionProviderFactory
getInternalJDBCConnectionProviderFactory();
}