Java 类org.hibernate.MultiTenancyStrategy 实例源码

项目:xm-uaa    文件:DatabaseConfiguration.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
    DataSource dataSource,
    MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
    CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
    Map<String, Object> properties = new HashMap<>();
    properties.putAll(jpaProperties.getHibernateProperties(dataSource));
    properties.put(org.hibernate.cfg.Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);

    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource);
    em.setPackagesToScan(JPA_PACKAGES);
    em.setJpaVendorAdapter(jpaVendorAdapter());
    em.setJpaPropertyMap(properties);
    return em;
}
项目:xm-ms-balance    文件:DatabaseConfiguration.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
    DataSource dataSource,
    MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
    CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl,
    LocalValidatorFactoryBean localValidatorFactoryBean) {

    Map<String, Object> properties = new HashMap<>();
    properties.putAll(jpaProperties.getHibernateProperties(dataSource));
    properties.put(MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
    properties.put(MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
    properties.put(MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);
    properties.put(JPA_VALIDATION_FACTORY, localValidatorFactoryBean);

    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource);
    em.setPackagesToScan(JPA_PACKAGES);
    em.setJpaVendorAdapter(jpaVendorAdapter());
    em.setJpaPropertyMap(properties);
    return em;
}
项目:xm-ms-dashboard    文件:DatabaseConfiguration.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
    MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
    CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
    Map<String, Object> properties = new HashMap<>();
    properties.putAll(jpaProperties.getHibernateProperties(dataSource));
    properties.put(org.hibernate.cfg.Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);

    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource);
    em.setPackagesToScan(JPA_PACKAGES);
    em.setJpaVendorAdapter(jpaVendorAdapter());
    em.setJpaPropertyMap(properties);
    return em;
}
项目:lams    文件:AbstractSessionImpl.java   
@Override
public JdbcConnectionAccess getJdbcConnectionAccess() {
    if ( jdbcConnectionAccess == null ) {
        if ( MultiTenancyStrategy.NONE == factory.getSettings().getMultiTenancyStrategy() ) {
            jdbcConnectionAccess = new NonContextualJdbcConnectionAccess(
                    getEventListenerManager(),
                    factory.getServiceRegistry().getService( ConnectionProvider.class )
            );
        }
        else {
            jdbcConnectionAccess = new ContextualJdbcConnectionAccess(
                    getEventListenerManager(),
                    factory.getServiceRegistry().getService( MultiTenantConnectionProvider.class )
            );
        }
    }
    return jdbcConnectionAccess;
}
项目:lams    文件:SessionFactoryImpl.java   
private JdbcConnectionAccess buildLocalConnectionAccess() {
    return new JdbcConnectionAccess() {
        @Override
        public Connection obtainConnection() throws SQLException {
            return settings.getMultiTenancyStrategy() == MultiTenancyStrategy.NONE
                    ? serviceRegistry.getService( ConnectionProvider.class ).getConnection()
                    : serviceRegistry.getService( MultiTenantConnectionProvider.class ).getAnyConnection();
        }

        @Override
        public void releaseConnection(Connection connection) throws SQLException {
            if ( settings.getMultiTenancyStrategy() == MultiTenancyStrategy.NONE ) {
                serviceRegistry.getService( ConnectionProvider.class ).closeConnection( connection );
            }
            else {
                serviceRegistry.getService( MultiTenantConnectionProvider.class ).releaseAnyConnection( connection );
            }
        }

        @Override
        public boolean supportsAggressiveRelease() {
            return false;
        }
    };
}
项目:cloud-s4-sdk-examples    文件:HibernateConfig.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, MultiTenantConnectionProvider multiTenantConnectionProvider,
                                                                   CurrentTenantIdentifierResolver tenantIdentifierResolver) {
    final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource);
    em.setPackagesToScan("com.mycompany.models");

    em.setJpaVendorAdapter(this.jpaVendorAdapter());

    final Map<String, Object> jpaProperties = new HashMap<>();
    jpaProperties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
    jpaProperties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider);
    jpaProperties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, tenantIdentifierResolver);
    jpaProperties.put(Environment.FORMAT_SQL, true);

    em.setJpaPropertyMap(jpaProperties);
    return em;
}
项目:spring-boot-multitenant    文件:HibernateConfig.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
    MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
    CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
  Map<String, Object> properties = new HashMap<>();
  properties.putAll(jpaProperties.getHibernateProperties(dataSource));
  properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
  properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
  properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);

  LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
  em.setDataSource(dataSource);
  em.setPackagesToScan("com.srai");
  em.setJpaVendorAdapter(jpaVendorAdapter());
  em.setJpaPropertyMap(properties);
  return em;
}
项目:xm-ms-entity    文件:DatabaseConfiguration.java   
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
                                                                   MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
                                                                   CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl,
                                                                   LocalValidatorFactoryBean localValidatorFactoryBean) {
    Map<String, Object> properties = new HashMap<>();
    properties.putAll(jpaProperties.getHibernateProperties(dataSource));
    properties.put(org.hibernate.cfg.Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
    properties
        .put(org.hibernate.cfg.Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);

    properties.put(JPA_VALIDATION_FACTORY, localValidatorFactoryBean);

    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource);
    em.setPackagesToScan(JPA_PACKAGES);
    em.setJpaVendorAdapter(jpaVendorAdapter());
    em.setJpaPropertyMap(properties);
    return em;
}
项目:lams    文件:JdbcServicesImpl.java   
private JdbcConnectionAccess buildJdbcConnectionAccess(Map configValues) {
    final MultiTenancyStrategy multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configValues );

    if ( MultiTenancyStrategy.NONE == multiTenancyStrategy ) {
        connectionProvider = serviceRegistry.getService( ConnectionProvider.class );
        return new ConnectionProviderJdbcConnectionAccess( connectionProvider );
    }
    else {
        connectionProvider = null;
        final MultiTenantConnectionProvider multiTenantConnectionProvider = serviceRegistry.getService( MultiTenantConnectionProvider.class );
        return new MultiTenantConnectionProviderJdbcConnectionAccess( multiTenantConnectionProvider );
    }
}
项目:lams    文件:AbstractSessionImpl.java   
protected AbstractSessionImpl(SessionFactoryImpl factory, String tenantIdentifier) {
    this.factory = factory;
    this.tenantIdentifier = tenantIdentifier;
    if ( MultiTenancyStrategy.NONE == factory.getSettings().getMultiTenancyStrategy() ) {
        if ( tenantIdentifier != null ) {
            throw new HibernateException( "SessionFactory was not configured for multi-tenancy" );
        }
    }
    else {
        if ( tenantIdentifier == null ) {
            throw new HibernateException( "SessionFactory configured for multi-tenancy, but no tenant identifier specified" );
        }
    }
}
项目:rjb-blog-multitenancy    文件:HibernateConfig.java   
protected LocalSessionFactoryBean createSessionFactoryBean() {

        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
        factoryBean.setDataSource(this.dataSourceConfig.dataSource());

        if (StringUtil.isEmpty(this.propertiesConfig.hibernateDialect())) {
            throw new IllegalStateException("hibernateDialect is required");
        }

        factoryBean.getHibernateProperties().setProperty(AvailableSettings.DIALECT,
                this.propertiesConfig.hibernateDialect());

        if (!ArrayUtil.isEmpty(this.propertiesConfig.hibernateMappingLocations())) {
            factoryBean
                    .setMappingLocations(this.propertiesConfig.hibernateMappingLocations());
        }

        // configure for multitenancy
        if (!(this.dataSourceConfig.dataSource() instanceof MultiTenantDataSource)) {
            throw new IllegalStateException("a MultiTenantDataSource is required");
        }

        factoryBean.getHibernateProperties().setProperty(AvailableSettings.MULTI_TENANT,
                MultiTenancyStrategy.DATABASE.toString());
        factoryBean.setMultiTenantConnectionProvider(
                new MultiTenantConnectionProviderImpl((MultiTenantDataSource) this.dataSourceConfig.dataSource()));
        factoryBean.setCurrentTenantIdentifierResolver(
                new CurrentTenantIdentifierResolverImpl(contextConfig.tenantResolver()));

        // update guard
        factoryBean.setEntityInterceptor(new MultiTenantEntityInterceptor(contextConfig.tenantResolver()));

        return factoryBean;

    }
项目:rjb-blog-multitenancy    文件:HibernateConfig.java   
protected LocalSessionFactoryBean createSessionFactoryBean() {

        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
        factoryBean.setDataSource(this.dataSourceConfig.dataSource());

        if (StringUtil.isEmpty(this.propertiesConfig.hibernateDialect())) {
            throw new IllegalStateException("hibernateDialect is required");
        }

        factoryBean.getHibernateProperties().setProperty(AvailableSettings.DIALECT,
                this.propertiesConfig.hibernateDialect());

        if (!ArrayUtil.isEmpty(this.propertiesConfig.hibernateMappingLocations())) {
            factoryBean
                    .setMappingLocations(this.propertiesConfig.hibernateMappingLocations());
        }

        // configure for multitenancy
        if (!(this.dataSourceConfig.dataSource() instanceof MultiTenantDataSource)) {
            throw new IllegalStateException("a MultiTenantDataSource is required");
        }

        factoryBean.getHibernateProperties().setProperty(AvailableSettings.MULTI_TENANT,
                MultiTenancyStrategy.DATABASE.toString());
        factoryBean.setMultiTenantConnectionProvider(
                new MultiTenantConnectionProviderImpl((MultiTenantDataSource) this.dataSourceConfig.dataSource()));
        factoryBean.setCurrentTenantIdentifierResolver(
                new CurrentTenantIdentifierResolverImpl(contextConfig.tenantResolver()));

        // update guard
        factoryBean.setEntityInterceptor(new MultiTenantEntityInterceptor(contextConfig.tenantResolver()));

        return factoryBean;

    }
项目:tenancy-sample    文件:TenancySampleApplication.java   
public
@Bean
EntityManagerFactory customEntityManagerFactory(DataSource dataSource) {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setGenerateDdl(false); // turn off with Discriminator strategy so far!
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan(TenancySampleApplication.class.getPackage().getName());
    factory.setDataSource(dataSource);
    factory.getJpaPropertyMap().put(Environment.DIALECT, PostgreSQL9Dialect.class.getName());
    factory.getJpaPropertyMap().put(Environment.MULTI_TENANT, MultiTenancyStrategy.DISCRIMINATOR);
    factory.getJpaPropertyMap().put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, new TenantHolder());
    factory.afterPropertiesSet();
    return factory.getObject();
}
项目:hibernate-dynamic-dialects    文件:SessionFactoryImpl.java   
private JdbcConnectionAccess buildLocalConnectionAccess() {
    return new JdbcConnectionAccess() {
        @Override
        public Connection obtainConnection() throws SQLException {
            return settings.getMultiTenancyStrategy() == MultiTenancyStrategy.NONE ? serviceRegistry
                    .getService(ConnectionProvider.class).getConnection()
                    : serviceRegistry.getService(
                            MultiTenantConnectionProvider.class)
                            .getAnyConnection();
        }

        @Override
        public void releaseConnection(Connection connection)
                throws SQLException {
            if (settings.getMultiTenancyStrategy() == MultiTenancyStrategy.NONE) {
                serviceRegistry.getService(ConnectionProvider.class)
                        .closeConnection(connection);
            } else {
                serviceRegistry.getService(
                        MultiTenantConnectionProvider.class)
                        .releaseAnyConnection(connection);
            }
        }

        @Override
        public boolean supportsAggressiveRelease() {
            return false;
        }
    };
}
项目:lams    文件:Settings.java   
public MultiTenancyStrategy getMultiTenancyStrategy() {
    return multiTenancyStrategy;
}
项目:lams    文件:Settings.java   
void setMultiTenancyStrategy(MultiTenancyStrategy multiTenancyStrategy) {
    this.multiTenancyStrategy = multiTenancyStrategy;
}
项目:lams    文件:MultiTenantConnectionProviderInitiator.java   
@Override
@SuppressWarnings( {"unchecked"})
public MultiTenantConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
    final MultiTenancyStrategy strategy = MultiTenancyStrategy.determineMultiTenancyStrategy(  configurationValues );
    if ( strategy == MultiTenancyStrategy.NONE || strategy == MultiTenancyStrategy.DISCRIMINATOR ) {
        // nothing to do, but given the separate hierarchies have to handle this here.
        return null;
    }

    final Object configValue = configurationValues.get( AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER );
    if ( configValue == null ) {
        // if they also specified the data source *name*, then lets assume they want
        // DataSourceBasedMultiTenantConnectionProviderImpl
        final Object dataSourceConfigValue = configurationValues.get( AvailableSettings.DATASOURCE );
        if ( dataSourceConfigValue != null && String.class.isInstance( dataSourceConfigValue ) ) {
            return new DataSourceBasedMultiTenantConnectionProviderImpl();
        }

        return null;
    }

    if ( MultiTenantConnectionProvider.class.isInstance( configValue ) ) {
        return (MultiTenantConnectionProvider) configValue;
    }
    else {
        final Class<MultiTenantConnectionProvider> implClass;
        if ( Class.class.isInstance( configValue ) ) {
            implClass = (Class) configValue;
        }
        else {
            final String className = configValue.toString();
            final ClassLoaderService classLoaderService = registry.getService( ClassLoaderService.class );
            try {
                implClass = classLoaderService.classForName( className );
            }
            catch (ClassLoadingException cle) {
                log.warn( "Unable to locate specified class [" + className + "]", cle );
                throw new ServiceException( "Unable to locate specified multi-tenant connection provider [" + className + "]" );
            }
        }

        try {
            return implClass.newInstance();
        }
        catch (Exception e) {
            log.warn( "Unable to instantiate specified class [" + implClass.getName() + "]", e );
            throw new ServiceException( "Unable to instantiate specified multi-tenant connection provider [" + implClass.getName() + "]" );
        }
    }
}
项目:lams    文件:ConnectionProviderInitiator.java   
@Override
public ConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
    final MultiTenancyStrategy strategy = MultiTenancyStrategy.determineMultiTenancyStrategy(  configurationValues );
    if ( strategy == MultiTenancyStrategy.DATABASE || strategy == MultiTenancyStrategy.SCHEMA ) {
        // nothing to do, but given the separate hierarchies have to handle this here.
        return null;
    }

    final StrategySelector strategySelector = registry.getService( StrategySelector.class );

    ConnectionProvider connectionProvider = null;
    final String providerName = getConfiguredConnectionProviderName( configurationValues );
    if ( providerName != null ) {
        connectionProvider = instantiateExplicitConnectionProvider( providerName, strategySelector );
    }
    else if ( configurationValues.get( Environment.DATASOURCE ) != null ) {
        connectionProvider = new DatasourceConnectionProviderImpl();
    }

    if ( connectionProvider == null ) {
        if ( c3p0ConfigDefined( configurationValues ) ) {
            connectionProvider = instantiateC3p0Provider( strategySelector );
        }
    }

    if ( connectionProvider == null ) {
        if ( proxoolConfigDefined( configurationValues ) ) {
            connectionProvider = instantiateProxoolProvider( strategySelector );
        }
    }

    if ( connectionProvider == null ) {
        if ( configurationValues.get( Environment.URL ) != null ) {
            connectionProvider = new DriverManagerConnectionProviderImpl();
        }
    }

    if ( connectionProvider == null ) {
        LOG.noAppropriateConnectionProvider();
        connectionProvider = new UserSuppliedConnectionProviderImpl();
    }


    final Map injectionData = (Map) configurationValues.get( INJECTION_DATA );
    if ( injectionData != null && injectionData.size() > 0 ) {
        final ConnectionProvider theConnectionProvider = connectionProvider;
        new BeanInfoHelper( connectionProvider.getClass() ).applyToBeanInfo(
                connectionProvider,
                new BeanInfoHelper.BeanInfoDelegate() {
                    public void processBeanInfo(BeanInfo beanInfo) throws Exception {
                        final PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
                        for ( PropertyDescriptor descriptor : descriptors ) {
                            final String propertyName = descriptor.getName();
                            if ( injectionData.containsKey( propertyName ) ) {
                                final Method method = descriptor.getWriteMethod();
                                method.invoke(
                                        theConnectionProvider,
                                        injectionData.get( propertyName )
                                );
                            }
                        }
                    }
                }
        );
    }

    return connectionProvider;
}