2013-05-28 39 views
2

我正在尝试使用多数据库进行多租户。从这个chapter我拿了MultiTenantConnectionProviderImplHibernate中的多租户 - 多数据库(SQLite)

这里我有问题。 Eclipse无法找到类ConnectionProviderUtils。我正在使用依赖Maven:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.4.Final</version> 
    </dependency> 

回答

4

我讨厌让你失望,但我在同一个问题上跑了一阵子。关键是ConnectionProviderUtil在文档中是相当具有误导性的。哪有这回事。 ConnectionProviderUtil是你必须实现的东西。我通过在MultiTenantConnectionProvider中构建我自己的DataSource(一个c3p0共用一个)来实现此目的,并从那里发出连接。

所以你必须从头开始自己实现它。这里的参考是我的解决方案。 Setting up a MultiTenantConnectionProvider using Hibernate 4.2 and Spring 3.1.1

对于多数据库方法,您可以将不同的DataSources自动装入MultiTenantConnectionProvider,并根据TenantIdentifier进行切换。看到这个答案的详细信息:https://stackoverflow.com/a/16769595/2319179

编辑: 如果你使用Spring,你可以设置一个DataSource在appcontext这样的:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
      <property name="driverClassName" value="<jdbcdriver>" /> 
      <property name="url" value="jdbc:SQLServer://<host>:<port>;databaseName=<dbname>" /> 
      <property name="username" value="<user>" /> 
      <property name="password" value="<pw>" /> 
     </bean> 

如果您需要在Java中,你可以建造它这样做:

 cpds = new DriverManagerDataSource(); 
cpds.setDriverClass(<jdbc.driver>); 
cpds.setJdbcUrl(<jdbc.url>); 
cpds.setUser("<user>"); 
cpds.setPassword("<pw>")); 

快速谷歌搜索应该调出正确的驱动程序。

+0

我如何SQLite的创建数据源?是否有任何东西或我需要编码一切? – MAGx2

+0

我看到DriverManagerDataSource只在Spring中。我可以在Java SE中以某种方式做到这一点吗? – MAGx2

+0

应该有可用的java.sql.DataSource。这也是DriverManagerDataSource的核心。 – Carsten

0

ConnectionProvider是您用来定制您的获取连接策略。如果所有模式都相同,那么这是实施多租户的最佳场所之一。

随着ConnectionProvider,你需要一个ThreadLocal来保持“租赁”,可能需要ServletFilter来设置它(从会话变量,在登录时设置)。这与Spring的OpenSessionInViewFilter工作方式类似。

总而言之,这可以提供一个非常简单的&有效的解决方案:

http://literatejava.com/hibernate/multi-tenancy-architecture-with-hibernate/