package org.om.osgi.session.factory;
import org.om.core.api.mapping.registry.MappingRegistry;
import org.om.core.api.persistence.PersistenceAdapterFactory;
import org.om.core.api.persistence.proxy.ProxyFactory;
import org.om.core.api.session.factory.SessionFactory;
import org.om.core.impl.session.factory.ImmutableSessionFactory;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A {@link SessionFactory} that acts as a OSGI {@link ServiceFactory} to avoid
* class loading issues in OSGI runtimes.
*
* @author Jakob Külzer
*
*/
public class OsgiServiceFactorySessionFactory implements ServiceFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(OsgiServiceFactorySessionFactory.class);
private final MappingRegistry mappingRegistry;
private final PersistenceAdapterFactory persistenceDelegateFactory;
private final ProxyFactory proxyFactory;
public OsgiServiceFactorySessionFactory(PersistenceAdapterFactory persistenceDelegateFactory,
MappingRegistry mappingRegistry, ProxyFactory proxyFactory) {
this.persistenceDelegateFactory = persistenceDelegateFactory;
this.mappingRegistry = mappingRegistry;
this.proxyFactory = proxyFactory;
}
@Override
public Object getService(Bundle bundle, ServiceRegistration registration) {
LOGGER.info("Creating new SessionFactory for bundle {}", bundle.toString());
return new ImmutableSessionFactory(persistenceDelegateFactory, mappingRegistry, proxyFactory);
}
@Override
public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
LOGGER.info("Destroying SessionFactory for bundle {}", bundle.toString());
}
}