12 Ekim 2023 Perşembe

JDBC CommonDataSource Arayüzü

Giriş
Şu satırı dahil ederiz
import javax.sql.CommonDataSource;
JDBC tasarlanırken javax.sql.DataSource ve javax.sql.XADataSource arayüzleri farklı şeyler olarak tasarlanmış. Bu iki farklı arayüzün ortak metodları da javax.sql.CommonDataSource altında toplanmış.

Yani CommonDataSource aslında javax.sql.DataSource ve javax.sql.XADataSource arayüzlerinin ortak metodlarını içerir. Metodlar şöyle
default ShardingKeyBuilder createShardingKeyBuilder() throws SQLException;

int getLoginTimeout() throws SQLException;

public Logger getParentLogger() throws SQLFeatureNotSupportedException;

PrintWriter getLogWriter() throws SQLException;

void setLoginTimeout(int seconds) throws SQLException;

void setLogWriter(PrintWriter out) throws SQLException;
Bir çok veri tabanı sürücüsü javax.sql.DataSource ve javax.sql.XADataSource arasındaki bu ayrımı dikkate almıyor. Benim gördüğüm sadece PostgreSQL bu kurala uyuyor


DataSource veya XADataSource döndüren bir metodumuz olsun. Bu metodları farklı veri tabanları için şöyle kodlarız

Örnek - PostgreSQL
Şöyle yaparız. XA ve normal data source arasındaki tek ortak nokta javax.sql.CommonDataSource
import org.postgresql.ds.PGSimpleDataSource;
import org.postgresql.xa.PGXADataSource;

public CommonDataSource createDataSource(boolean xa) {
  if (xa) {
    PGXADataSource dataSource = new PGXADataSource();
    dataSource.setUrl(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);
    return dataSource;
  } else {
    PGSimpleDataSource dataSource = new PGSimpleDataSource();
    dataSource.setUrl(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);
    return dataSource;
  }
}
Örnek - MySQL
Şöyle yaparız. Hem XA hem de normal data source javax.sql.DataSource arayüzünden kalıtır
import com.mysql.cj.jdbc.MysqlDataSource;
import com.mysql.cj.jdbc.MysqlXADataSource;

public DataSource createDataSource(boolean xa) {
  if (xa) {
    MysqlXADataSource dataSource = new MysqlXADataSource();
    dataSource.setUrl(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);

    return dataSource;
  } else {
    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setUrl(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);
    return dataSource;
  }
}
Örnek - SQL Server
Şöyle yaparız. Hem XA hem de normal data source javax.sql.DataSource arayüzünden kalıtır
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.microsoft.sqlserver.jdbc.SQLServerXADataSource;

public DataSource createDataSource(boolean xa) {
  if (xa) {
    SQLServerXADataSource dataSource = new SQLServerXADataSource();
    dataSource.setURL(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);
    return dataSource;
  } else {
    SQLServerDataSource dataSource = new SQLServerDataSource();
    dataSource.setURL(...);
    dataSource.setUser(...);
    dataSource.setPassword(...);
    dataSource.setDatabaseName(...);
    return dataSource;
  }
}
Örnek - H2
Şöyle yaparız. H2 tek bir DataSource nesnesi sağlıyor.
import org.h2.jdbcx.JdbcDataSource;

public DataSource createDataSource(boolean xa) {
  JdbcDataSource dataSource = new JdbcDataSource();
  dataSource.setUrl(...);
  dataSource.setUser(...);
  dataSource.setPassword(...);

  return dataSource;
}


Hiç yorum yok:

Yorum Gönder