Package org.dayatang.datasource4saas

Source Code of org.dayatang.datasource4saas.SaasDataSource

package org.dayatang.datasource4saas;

import org.dayatang.utils.Assert;
import org.dayatang.utils.BeanUtils;

import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

/**
* 用于SaaS的数据源实现。是本项目的中心类。它作为代理,自动为不同的租户分配不同的实际数据源。
* @author yyang (<a href="mailto:gdyangyu@gmail.com">gdyangyu@gmail.com</a>)
*
*/
public class SaasDataSource implements DataSource {

  private TenantService tenantService;
  private DataSourceRegistry dataSourceRegistry;

  public SaasDataSource(TenantService tenantService, DataSourceRegistry dataSourceRegistry) {
    Assert.notNull(dataSourceRegistry, "data source registry is null!");
    Assert.notNull(tenantService, "Tenant service is null!");
    this.tenantService = tenantService;
    this.dataSourceRegistry = dataSourceRegistry;
  }

  @Override
  public PrintWriter getLogWriter() throws SQLException {
    return getActualDataSource().getLogWriter();
  }

  @Override
  public int getLoginTimeout() throws SQLException {
    return getActualDataSource().getLoginTimeout();
  }

  @Override
  public void setLogWriter(PrintWriter out) throws SQLException {
    getActualDataSource().setLogWriter(out);
  }

  @Override
  public void setLoginTimeout(int seconds) throws SQLException {
    getActualDataSource().setLoginTimeout(seconds);
  }

  @Override
  public boolean isWrapperFor(Class<?> iface) throws SQLException {
    return getActualDataSource().isWrapperFor(iface);
  }

  @Override
  public <T> T unwrap(Class<T> iface) throws SQLException {
    return getActualDataSource().unwrap(iface);
  }

  @Override
  public Connection getConnection() throws SQLException {
    return getActualDataSource().getConnection();
  }

  @Override
  public Connection getConnection(String username, String password)
      throws SQLException {
    return getActualDataSource().getConnection(username, password);
  }

  private DataSource getActualDataSource() {
    return dataSourceRegistry.getDataSourceOfTenant(tenantService.getTenant());
  }

  //For JDK 7 compatability
  public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        BeanUtils beanUtils = new BeanUtils(getActualDataSource());
        return (Logger) beanUtils.getPropValue("parentLogger");
  }
 
}
TOP

Related Classes of org.dayatang.datasource4saas.SaasDataSource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.