Class BasicDataSource

java.lang.Object
xyz.cofe.sql.cpool.SimpleDataSource
xyz.cofe.sql.cpool.BasicDataSource
All Implemented Interfaces:
java.sql.Wrapper, javax.sql.CommonDataSource, javax.sql.DataSource, xyz.cofe.scn.LongScn<SimpleDataSource,​SimpleDataSource>, xyz.cofe.scn.Scn<SimpleDataSource,​java.lang.Long,​SimpleDataSource>, ConnectOptions

public class BasicDataSource
extends SimpleDataSource
implements ConnectOptions
Описание соединения с СУБД.

Формат XML:

<dataSource type="xyz.cofe.sql.cpool.BasicDataSource">
    <!-- Ссылка на соединение с БД (JDBC connect string) -->
    <url>jdbc:mysql://127.0.0.1/database_name</url>
    
    <!-- время таймаута (сек) на соединения с базой данных -->
    <loginTimeout>60</loginTimeout>
    <networkTimeoutDaemon>true</networkTimeoutDaemon>
    <networkTimeoutStatic>true</networkTimeoutStatic>
    <networkTimeoutThreadName>DataSource network timeout</networkTimeoutThreadName>
    <networkTimeoutThreads>1</networkTimeoutThreads>
    <properties>
        <!-- логин -->
        <property>
            <key>user</key>
            <value>login</value>
        </property>
        
        <!-- пароль -->
        <property>
            <key>password</key>
            <value>password</value>
        </property>
    </properties>
    <options>
        <property>
            <key>proxyConnection</key>
            <value>true</value>
        </property>
        <property>
            <key>collectActivityStat</key>
            <value>true</value>
        </property>
        <property>
            <key>shared</key>
            <value>true</value>
        </property>
        <property>
            <key>idleTimeout</key>
            <value>5000</value>
        </property>
    </options>
</dataSource>
 
Author:
Kamnev Georgiy
  • Field Details

  • Constructor Details

  • Method Details

    • clone

      public BasicDataSource clone()
      Overrides:
      clone in class SimpleDataSource
    • assign

      public void assign​(SimpleDataSource ds)
      Overrides:
      assign in class SimpleDataSource
    • getConnectOptions

      public ConnectOptionsProperties getConnectOptions()
      Указывает опции соединения
      Returns:
      опции соединения
    • isProxyConnection

      public boolean isProxyConnection()
      Создавать прокси соединение
      Specified by:
      isProxyConnection in interface ConnectOptions
      Returns:
      true - создавать прокси
    • setProxyConnection

      public void setProxyConnection​(boolean v)
      Создавать прокси соединение
      Parameters:
      v - true - создавать прокси
    • isCollectActivityStat

      public boolean isCollectActivityStat()
      Собирать статистику активности
      Specified by:
      isCollectActivityStat in interface ConnectOptions
      Returns:
      собирать статистику активности
    • setCollectActivityStat

      public void setCollectActivityStat​(boolean v)
      Собирать статистику активности
      Parameters:
      v - true - собирать статистику активности
    • getIdleTimeout

      public long getIdleTimeout()
      Указывает время (мс) простоя соединения, после которого соединение будет закрыто.

      значение -1 и меньше - не закрывать по истечению таймаута

      Specified by:
      getIdleTimeout in interface ConnectOptions
      Returns:
      Время простоя
    • setIdleTimeout

      public void setIdleTimeout​(long ms)
      Указывает время (мс) простоя соединения, после которого соединение будет закрыто.

      значение -1 и меньше - не закрывать по истечению таймаута

      Parameters:
      ms - время (мс) простоя соединения
    • getStatementIdleTimeout

      public long getStatementIdleTimeout()
      Указывает время (мс) простоя запроса, после которого запрос будет закрыт.

      значение -1 и меньше - не закрывать по истечению таймаута

      Specified by:
      getStatementIdleTimeout in interface ConnectOptions
      Returns:
      Время (мс) простоя
    • setStatementIdleTimeout

      public void setStatementIdleTimeout​(long ms)
      Указывает время (мс) простоя запроса, после которого запрос будет закрыт.

      значение -1 и меньше - не закрывать по истечению таймаута

      Parameters:
      ms - Время (мс) простоя
    • isShared

      public boolean isShared()
      Description copied from interface: ConnectOptions
      Указывает что при установке соединения (connect()) должно использоваться уже открытое
      Specified by:
      isShared in interface ConnectOptions
      Returns:
      Содинение доступно для всех
    • setShared

      public void setShared​(boolean v)
    • getConnection

      public java.sql.Connection getConnection​(java.lang.String username, java.lang.String password) throws java.sql.SQLException
      Specified by:
      getConnection in interface javax.sql.DataSource
      Overrides:
      getConnection in class SimpleDataSource
      Throws:
      java.sql.SQLException
    • getConnection

      public java.sql.Connection getConnection() throws java.sql.SQLException
      Specified by:
      getConnection in interface javax.sql.DataSource
      Overrides:
      getConnection in class SimpleDataSource
      Throws:
      java.sql.SQLException
    • getAutoCommit

      public java.lang.Boolean getAutoCommit()
      Указывает автоматическое подтверждение транзакций
      Returns:
      true - автоматическое подтверждение транзакций
    • setAutoCommit

      public void setAutoCommit​(java.lang.Boolean autoCommit)
      Указывает автоматическое подтверждение транзакций
      Parameters:
      autoCommit - true - автоматическое подтверждение транзакций
    • getTransactIsolation

      public TransactIsolation getTransactIsolation()
      Указывает режим изоляции транзакций
      Returns:
      режим изоляции транзакций
    • setTransactIsolation

      public void setTransactIsolation​(TransactIsolation transactIsolation)
      Указывает режим изоляции транзакций
      Parameters:
      transactIsolation - режим изоляции транзакций
    • getSchema

      public java.lang.String getSchema()
      Указывают текущую схему при установке соединения
      Returns:
      имя схемы
    • setSchema

      public void setSchema​(java.lang.String schema)
      Указывают текущую схему при установке соединения
      Parameters:
      schema - имя схемы
    • getNetworkTimeout

      public java.lang.Integer getNetworkTimeout()
      Устанавливает максимальный период, когда соединение или объекты, созданные из Connection, будут ждать, пока база данных ответит на любой запрос.

      Если какой-либо запрос остается без ответа, метод ожидания вернется с помощью SQLException, а Connection или объекты, созданные из Connection, будут отмечены как закрытые. Любое последующее использование объектов, за исключением методов close, isClosed или Connection.isValid, приведет к SQLException.

      Примечание. Этот метод предназначен для решения редкого, но серьезного состояния, при котором сетевые разделы могут вызывать потоки, выдающие вызовы JDBC, для непрерывного зависания в сокетах, до OS TCP-TIMEOUT (обычно 10 минут). Этот метод связан с методом abort (), который предоставляет потоку администратора средство для освобождения таких потоков в случаях, когда соединение JDBC доступно для потока администратора. Метод setNetworkTimeout будет охватывать случаи, когда нет потока администратора или он не имеет доступа к соединению. Этот метод является серьезным в его эффектах и ​​ должен иметь достаточно высокое значение, поэтому он никогда не запускается до каких-либо более обычных тайм-аутов, таких как таймауты транзакций.

      Реализации драйвера JDBC также могут поддерживать метод setNetworkTimeout, чтобы наложить ограничение на время отклика базы данных в средах, где нет сети.

      Драйверы могут внутренне реализовывать некоторые или все свои вызовы API с несколькими внутренними передачами драйверов-баз данных, и для реализации этого варианта остается только, будет ли предел применяться всегда к ответу на вызов API или любому отдельному запросу во время вызова API.

      Этот метод можно вызвать несколько раз, например, установить ограничение для области кода JDBC и сбросить значение по умолчанию при выходе из этой области. Вызов этого метода не влияет на уже выдающиеся запросы.

      Значение тайм-аута Statement.setQueryTimeout () не зависит от значения таймаута, указанного в setNetworkTimeout. Если тайм-аут запроса истекает до истечения сетевого тайм-аута, выполнение заявки будет отменено.

      Если сеть все еще активна, результатом будет то, что и оператор, и соединение все еще могут использоваться.

      Однако, если истечение таймаута сети истекает до таймаута запроса или если тайм-аут инструкции выходит из строя из-за сетевых проблем, соединение будет отмечено как закрытое, любые ресурсы, удерживаемые соединением, будут освобождены, и соединение и инструкция будут непригодными.

      Когда драйвер определяет, что значение тайм-аута setNetworkTimeout истекло, драйвер JDBC отмечает соединение закрытым и освобождает любые ресурсы, удерживаемые соединением.

      Этот метод проверяет, есть ли объект SQLPermission, прежде чем позволить этому методу продолжить работу. Если существует SecurityManager и его метод checkPermission отклоняет вызов setNetworkTimeout, этот метод генерирует исключение java.lang.SecurityException.

      Returns:
      таймут сети
    • setNetworkTimeout

      public void setNetworkTimeout​(java.lang.Integer networkTimeout)
      Указывает таймут сети.
      Parameters:
      networkTimeout - таймаут
      See Also:
      getNetworkTimeout()
    • getNetworkTimeoutThreads

      public java.lang.Integer getNetworkTimeoutThreads()
      Указывает кол-во потоков/тредов для сервиса network-timeout
      Returns:
      кол-во тредов, по умолч 1
    • setNetworkTimeoutThreads

      public void setNetworkTimeoutThreads​(java.lang.Integer networkTimeoutThreads)
      Указывает кол-во потоков/тредов для сервиса network-timeout
      Parameters:
      networkTimeoutThreads - кол-во тредов, по умолч 1
    • getNetworkTimeoutDaemon

      public java.lang.Boolean getNetworkTimeoutDaemon()
      Указывает как запускать сервис network timeout.

      true (по умолчанию) - Сервис network timeout будет запущен как фоновый поток(потоки)

      false - Сервис network timeout будет запущен как обычный поток (тред)

      Returns:
      true - сервис network timeout в фоновом режиме
    • setNetworkTimeoutDaemon

      public void setNetworkTimeoutDaemon​(java.lang.Boolean networkTimeoutDaemon)
      Указывает как запускать сервис network timeout.
      Parameters:
      networkTimeoutDaemon - true (по умолчанию) - Сервис network timeout будет запущен как фоновый поток(потоки)
      false - Сервис network timeout будет запущен как обычный поток (тред)
    • getNetworkTimeoutThreadName

      public java.lang.String getNetworkTimeoutThreadName()
    • setNetworkTimeoutThreadName

      public void setNetworkTimeoutThreadName​(java.lang.String networkTimeoutThreadName)
    • getNetworkTimeoutService

      public static java.util.concurrent.ExecutorService getNetworkTimeoutService()
    • getNetworkTimeoutStatic

      public java.lang.Boolean getNetworkTimeoutStatic()
      Использовать сервис проверки network timeout как статичный (синглетон) демон

      Это поведение по умолчанию

      Returns:
      true - использовать статичный (синглетон) демон network timeout
    • setNetworkTimeoutStatic

      public void setNetworkTimeoutStatic​(java.lang.Boolean networkTimeoutStatic)
      Использовать сервис проверки network timeout как статичный (синглетон) демон
      Parameters:
      networkTimeoutStatic - true - использовать статичный (синглетон) демон network timeout
    • configureConnection

      protected void configureConnection​(java.sql.Connection conn)
    • asXml

      public java.lang.String asXml()
    • write

      public void write​(javax.xml.stream.XMLStreamWriter xwr)
    • write

      public void write​(xyz.cofe.xml.FormatXMLWriter xwr)
    • write

      public void write​(org.w3c.dom.Element el)
    • writeXml

      public void writeXml​(java.io.Writer writer)
    • writeXml

      public void writeXml​(java.io.OutputStream writer)
    • writeXml

      public void writeXml​(java.io.OutputStream writer, java.nio.charset.Charset cs)
    • writeXml

      public void writeXml​(java.io.File writer, java.nio.charset.Charset cs)
    • writeXml

      public void writeXml​(java.io.File writer)
    • writeXml

      public void writeXml​(java.nio.file.Path writer, java.nio.charset.Charset cs)
    • writeXml

      public void writeXml​(java.nio.file.Path writer)
    • writeXml

      public void writeXml​(xyz.cofe.io.fs.File writer, java.nio.charset.Charset cs)
    • writeXml

      public void writeXml​(xyz.cofe.io.fs.File writer)
    • read

      public static BasicDataSource read​(javax.xml.stream.XMLStreamReader reader)
    • readXml

      public static BasicDataSource readXml​(java.io.Reader reader)
    • readXml

      public static BasicDataSource readXml​(java.net.URL reader)
    • readXml

      public static BasicDataSource readXml​(java.net.URL reader, java.nio.charset.Charset cs)
    • readXml

      public static BasicDataSource readXml​(java.io.InputStream reader, java.nio.charset.Charset cs)
    • readXml

      public static BasicDataSource readXml​(java.io.InputStream reader)
    • readXml

      public static BasicDataSource readXml​(java.io.File reader)
    • readXml

      public static BasicDataSource readXml​(java.io.File reader, java.nio.charset.Charset cs)
    • readXml

      public static BasicDataSource readXml​(java.nio.file.Path reader)
    • readXml

      public static BasicDataSource readXml​(java.nio.file.Path reader, java.nio.charset.Charset cs)
    • readXml

      public static BasicDataSource readXml​(xyz.cofe.io.fs.File reader)
    • readXml

      public static BasicDataSource readXml​(xyz.cofe.io.fs.File reader, java.nio.charset.Charset cs)
    • loadXml

      public void loadXml​(org.w3c.dom.Node xml)