Advertisement
Guest User

Untitled

a guest
Dec 24th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. <property name="hibernateProperties">
  2. <props>
  3. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  4. <prop key="hibernate.multiTenancy">DATABASE</prop>
  5. <prop key="hibernate.tenant_identifier_resolver">com.company.multitenancy.MyCurrentTenantIdentifierResolverImpl
  6. </prop>
  7. <prop key="hibernate.multi_tenant_connection_provider">com.company.multitenancy.MyMultiTenantConnectionProvider
  8. </prop>
  9. </props>
  10. </property>
  11.  
  12. package com.company.multitenancy;
  13.  
  14. import java.sql.DriverManager;
  15. import java.sql.ResultSet;
  16. import java.sql.Statement;
  17. import java.util.ArrayList;
  18. import java.util.HashMap;
  19. import java.util.List;
  20.  
  21. import org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider;
  22. import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
  23. import com.termbreak.constant.ConstantStrings;
  24.  
  25. public class MyMultiTenantConnectionProvider extends
  26. AbstractMultiTenantConnectionProvider {
  27. private static final long serialVersionUID = -8669630427906544663L;
  28. private HashMap<String, ConnectionProviderImpl> connProviderMap = new HashMap<String, ConnectionProviderImpl>();
  29.  
  30. public MyMultiTenantConnectionProvider() {
  31. List<String> providerNames = new ArrayList<String>();
  32. providerNames.add(ConstantStrings.DEFAULT_TENANT_ID);
  33. try {
  34. String sqlUrl = "jdbc:mysql://localhost:3306/"+ConstantStrings.DEFAULT_TENANT_ID;
  35. Class.forName("com.mysql.jdbc.Driver");
  36. java.sql.Connection conn = DriverManager.getConnection(sqlUrl,
  37. "root", "root");
  38. Statement st = conn.createStatement();
  39. ResultSet rs = st
  40. .executeQuery("select DISTINCT TENANT_ID from User");
  41. while (rs.next()) {
  42. String tenantId = rs.getString(1);
  43. providerNames.add(tenantId);
  44. }
  45. conn.close();
  46. } catch (Exception e) {
  47. System.err.println("Got an exception! ");
  48. System.err.println(e.getMessage());
  49. }
  50. for (String providerName : providerNames) {
  51. connProviderMap.put(providerName, new ConnectionProviderImpl(
  52. providerName));
  53. }
  54. }
  55.  
  56. public ConnectionProvider getAnyConnectionProvider() {
  57. System.out
  58. .println("inside MultiTenantConnectionProvider::getAnyConnectionProvider");
  59. return connProviderMap.get(ConstantStrings.DEFAULT_TENANT_ID);
  60. }
  61.  
  62. public ConnectionProvider selectConnectionProvider(String tenantId) {
  63. ConnectionProvider connectionProvider = connProviderMap.get(tenantId);
  64. if (connectionProvider == null)
  65. connectionProvider = new ConnectionProviderImpl(ConstantStrings.DEFAULT_TENANT_ID);
  66. return connectionProvider;
  67. }
  68. }
  69.  
  70. package com.company.multitenancy;
  71.  
  72. import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
  73.  
  74. import com.termbreak.constant.ConstantStrings;
  75.  
  76. public class MyCurrentTenantIdentifierResolverImpl implements
  77. CurrentTenantIdentifierResolver {
  78. public ThreadLocal<String> _tenantIdentifier = new ThreadLocal<String>();
  79. public String DEFAULT_TENANT_ID = ConstantStrings.DEFAULT_TENANT_ID;
  80.  
  81. public String resolveCurrentTenantIdentifier() {
  82. System.out.println("from inside resolveCurrentTenantIdentifier....");
  83. String tenantId = _tenantIdentifier.get();
  84. if (tenantId == null)
  85. tenantId = DEFAULT_TENANT_ID;
  86. System.out.println("threadlocal tenant id =" + tenantId);
  87. return tenantId;
  88. }
  89.  
  90. public boolean validateExistingCurrentSessions() {
  91. return true;
  92. }
  93.  
  94. }
  95.  
  96. package com.company.multitenancy;
  97.  
  98. import java.sql.Connection;
  99. import java.sql.SQLException;
  100.  
  101. import org.apache.commons.dbcp2.BasicDataSource;
  102. import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
  103.  
  104. public class ConnectionProviderImpl implements ConnectionProvider {
  105. private static final long serialVersionUID = -8926112316994338537L;
  106. private BasicDataSource basicDataSource;
  107.  
  108. public ConnectionProviderImpl(String database){
  109. //this should be read from properties file
  110. basicDataSource = new BasicDataSource();
  111. basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
  112. basicDataSource.setUrl("jdbc:mysql://localhost:3306/"+database);
  113. basicDataSource.setUsername("root");
  114. basicDataSource.setPassword("root");
  115. basicDataSource.setInitialSize(2);
  116. }
  117. public boolean isUnwrappableAs(Class arg0) {
  118. return false;
  119. }
  120. public Object unwrap(Class arg0) {
  121. return null;
  122. }
  123. public void closeConnection(Connection arg0) throws SQLException {
  124. arg0.close();
  125. }
  126. public Connection getConnection() throws SQLException {
  127. return basicDataSource.getConnection();
  128. }
  129. public boolean supportsAggressiveRelease() {
  130. return false;
  131. }
  132. }
  133.  
  134. sessionFactory.withOptions().tenantIdentifier(tenantId).openSession();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement