我正在尝试基于每个客户端的唯一模式构建多租户 因此,在weblogic服务器中,Oracle会有一个数据源 数据源将具有一个用户,该用户具有对所有客户端模式的同义词/授权 让我们忽略这个是好还是坏或者设计糟糕的事实 - 我只是想找到一种方法让它发挥作用 我将数据源定义为我的hibernate.cfg.xml文件的一部分 sessionfactory将从这个hibernate.cfg.xml
创建通过在互联网上阅读 - 我将不得不在我的hibernate.cfg.xml中添加其他属性
<session-factory>
<property name="connection.datasource">MYSQLDS</property>
<property name="default_schema">testpage</property>
<!-- multitenant properties start here -->
<property name="multi_tenant_connection_provider">multiTenantConnectionProvider</property>
<property name="multiTenancy">SCHEMA</property>
<property name="tenant_identifier_resolver">CurrentTenantIdentifierResolverImpl</property>
&globalpit;
</session-factory>
现在是我不理解的部分:
似乎 CurrentTenantIdentifierResolverImpl 我将实现一个将实现接口的自定义类
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
public class SchemaResolver implements CurrentTenantIdentifierResolver {
@Override
public String resolveCurrentTenantIdentifier() {
return "master";
}
@Override
public boolean validateExistingCurrentSessions() {
return false;
}
}
所以我很困惑这个类及其方法将如何被调用 - 我确实理解这用于根据客户端特有的一些标识符确定要使用哪个模式 - ala用户http会话?
下一部分是 MultiTenantConnectionProvider 的实现,以及
等方法的实现public Connection getConnection(String tenantIdentifier) throws SQLException {
RANT -STAR T这奇怪地开始看起来像旧的简单和简单的JDBC :)所以我想知道为什么我必须使用hibernate :( RANT-END
与此方法和课程有关 - 我该如何使用它? 令人沮丧的部分是很多地方,你可以看到这两个类定义 - 但没有解释如何调用这些类? 是否有一个完整的端到端示例,说明如何使用这两个类,以及如何使用这两个类的明确示例 - 请不要只是两个独立的类!