HHH-8053 HibernateBundleActivator should not register itself as a
PersistenceProvider
This commit is contained in:
parent
139474624f
commit
5f8ba65ce1
|
@ -52,6 +52,16 @@ public class HibernatePersistenceProvider implements PersistenceProvider {
|
|||
|
||||
private final PersistenceUtilHelper.MetadataCache cache = new PersistenceUtilHelper.MetadataCache();
|
||||
|
||||
/**
|
||||
* Used for environment-supplied properties. Ex: hibernate-osgi's
|
||||
* HibernateBundleActivator needs to set a custom JtaPlatform.
|
||||
*/
|
||||
private Map environmentProperties;
|
||||
|
||||
public void setEnvironmentProperties( Map environmentProperties ) {
|
||||
this.environmentProperties = environmentProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* <p/>
|
||||
|
@ -59,6 +69,9 @@ public class HibernatePersistenceProvider implements PersistenceProvider {
|
|||
*/
|
||||
@Override
|
||||
public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
|
||||
if ( environmentProperties != null ) {
|
||||
properties.putAll( environmentProperties );
|
||||
}
|
||||
final EntityManagerFactoryBuilder builder = getEntityManagerFactoryBuilderOrNull( persistenceUnitName, properties );
|
||||
return builder == null ? null : builder.build();
|
||||
}
|
||||
|
@ -100,8 +113,11 @@ public class HibernatePersistenceProvider implements PersistenceProvider {
|
|||
* Note: per-spec, the values passed as {@code properties} override values found in {@link PersistenceUnitInfo}
|
||||
*/
|
||||
@Override
|
||||
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map integration) {
|
||||
return Bootstrap.getEntityManagerFactoryBuilder( info, integration ).build();
|
||||
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties) {
|
||||
if ( environmentProperties != null ) {
|
||||
properties.putAll( environmentProperties );
|
||||
}
|
||||
return Bootstrap.getEntityManagerFactoryBuilder( info, properties ).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -23,18 +23,15 @@
|
|||
*/
|
||||
package org.hibernate.osgi;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.spi.PersistenceProvider;
|
||||
import javax.persistence.spi.PersistenceUnitInfo;
|
||||
import javax.persistence.spi.PersistenceUnitTransactionType;
|
||||
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.internal.util.ClassLoaderHelper;
|
||||
import org.hibernate.jpa.HibernatePersistenceProvider;
|
||||
import org.hibernate.jpa.boot.spi.Bootstrap;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
@ -46,18 +43,13 @@ import org.osgi.framework.BundleListener;
|
|||
* @author Martin Neimeier
|
||||
*/
|
||||
public class HibernateBundleActivator
|
||||
extends HibernatePersistenceProvider
|
||||
implements BundleActivator, /*ServiceListener,*/ BundleListener {
|
||||
|
||||
private BundleContext context;
|
||||
|
||||
private OsgiClassLoader osgiClassLoader;
|
||||
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
|
||||
this.context = context;
|
||||
|
||||
// register this instance as a bundle listener to get informed about all
|
||||
// bundle live cycle events
|
||||
context.addBundleListener(this);
|
||||
|
@ -70,13 +62,14 @@ public class HibernateBundleActivator
|
|||
handleBundleChange( bundle );
|
||||
}
|
||||
|
||||
HibernatePersistenceProvider hpp = new HibernatePersistenceProvider();
|
||||
Map map = new HashMap();
|
||||
map.put( AvailableSettings.JTA_PLATFORM, new OsgiJtaPlatform( context ) );
|
||||
hpp.setEnvironmentProperties( map );
|
||||
|
||||
Properties properties = new Properties();
|
||||
properties.put( "javax.persistence.provider", HibernateBundleActivator.class.getName() );
|
||||
context.registerService(
|
||||
PersistenceProvider.class.getName(),
|
||||
this,
|
||||
properties
|
||||
);
|
||||
properties.put( "javax.persistence.provider", HibernatePersistenceProvider.class.getName() );
|
||||
context.registerService( PersistenceProvider.class.getName(), hpp, properties );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,13 +93,4 @@ public class HibernateBundleActivator
|
|||
osgiClassLoader.unregisterBundle(bundle);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) {
|
||||
if ( info.getTransactionType().equals( PersistenceUnitTransactionType.JTA ) ) {
|
||||
map.put( AvailableSettings.JTA_PLATFORM, new OsgiJtaPlatform( context ) );
|
||||
}
|
||||
return Bootstrap.getEntityManagerFactoryBuilder( info, map, osgiClassLoader ).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue