Для использования библиотеки необходимо ее подключить в проект. Способ подключения зависит от вида проекта. Например, для maven проекта нужно добавить зависимость
<dependency> <groupId>ru.funsys.avalanche</groupId> <artifactId>avalanche-sql</artifactId> <version>${avalanche.version}</version> </dependency>
где ${avalanche.version} - номер версии библиотеки, например:
<properties> <avalanche.version>1.3.2</avalanche.version> </properties>
Помимо добавления зависимости возможно потребуется добавить maven репозиторий, в котором опубликованы библиотеки "Avalanche - application framework for Java". Это можно сделать несколькими способами, например в файл pom.xml проекта или в файл settings.xml локального maven репозитория.
В программной модели приложения использования библиотеки avalanche-sql осуществляется через вызовы методов адаптера ru.funsys.avalanche.sql.Adapter. Ссылку на экземпляр объекта адаптера можно получить в классе наследнике класса ru.funsys.avalanche.Application по средствам вызова метода getAdapter(String name), где параметр name это имя адаптера, определенного в конфигурации. Или явно определить поле адаптера в классе наследнике класса ru.funsys.avalanche.Application.
Пример получения ссылки на экземпляр адаптера (фрагмент кода), в конфигурационном файле приложения должна быть определена дочерняя секция <adapter> с именем database в конфигурации класса DemoApplication
... class public DemoApplication extends Application { ... public ... demoMethod(...) { Adapter database = (Adapter) getAdapter("database"); ... // Выполнить запрос данных ResultSet resultSet = database.select(...); ... } ... }
Пример декларации поля адаптера database (фрагмент кода) в классе DemoApplication, в конфигурационном файле приложения должна быть определена дочерняя секция <adapter> в конфигурации класса DemoApplication. Поле класса database будет установлено автоматически либо по имени, либо по типу соответствующего адаптера.
... class public DemoApplication extends Application { ... private Adapter database; ... public ... demoMethod(...) { ... // Выполнить запрос данных ResultSet resultSet = database.select(...); ... } ... }
В файле конфигурации приложения должна быть определена секция, содержащая конфигурационные параметры класса ru.funsys.avalanche.sql.Database, обязательно должны быть определены атрибуты name и resource. Допускается определение конфигурации класса ru.funsys.avalanche.sql.Database как секцией <function>, так и секцией <application>.
Пример определения в секции <function>
<!-- Сервисные функции работы с БД, источник данных БД определяется в конфигурации контекста WEB приложение (для Tomcat см. вложенный элемент <Resource> секции <context>) --> <function class="ru.funsys.avalanche.sql.Database" name="database" description="Функция доступа к БД" resource="java:/jboss/datasources/PostgresDataSource"> </function>
Пример определения в секции <application>, обязательно должен быть определен атрибут function в значении true
<!-- Сервисные функции работы с БД, источник данных БД определяется в конфигурации контекста WEB приложение (для Tomcat см. вложенный элемент <Resource> секции <context>) --> <application class="ru.funsys.avalanche.sql.Database" name="database" description="Функция доступа к БД" resource="java:/jboss/datasources/PostgresDataSource" function="true"> </application>
Если приложение должно работать с несколькими базами данных, то в конфигурации приложения определяются несколько секций класса ru.funsys.avalanche.sql.Database. Для каждого источника данных своя секция класса.
В секциях <application> одной или несколькими дочерними секциями adapter определяются адаптеры доступа к объектам ru.funsys.avalanche.sql.Database
Пример определения адаптера ru.funsys.avalanche.sql.Adapter, в атрибуте uri указывается локальное имя экземпляра класса ru.funsys.avalanche.sql.Database (значение атрибута name соответствующей секции <function> или <application>).
<application class="ru.domain.DemoApplication" name="demo" description="Пример определения адаптера"> <adapter class="ru.funsys.avalanche.sql.Adapter" name="database" uri="database"" /> </application>
Доступ адаптера ru.funsys.avalanche.sql.Adapter к удаленному узлу с экземпляром класса ru.funsys.avalanche.sql.Database осуществляется через пару <interface> и <connector>. Секция <connector> добавляется в конфигурацию приложения удаленного узла. Экземпляр класса ru.funsys.avalanche.sql.Database публикуется в секции <connector> при помощи дочерней секции pulish/ Секция <interface> добавляется в конфигурацию приложения локального узла. В конфигурации приложения локального узла секция с классом ru.funsys.avalanche.sql.Database может отсутствовать.
Пример конфигурации приложения удаленного узла. В ней должны быть определены секция с классом ru.funsys.avalanche.sql.Database и секция <connector>.
<!-- Сервисные функции работы с БД, источник данных БД определяется в конфигурации контекста WEB приложение (для Tomcat см. вложенный элемент <Resource> секции <context>) --> <function class="ru.funsys.avalanche.sql.Database" name="database" description="Функция доступа к БД" resource="java:/jboss/datasources/PostgresDataSource"> </function> <connector class="HttpConnector" name="http-connector"> <publish name="database" function="database" /> <connector>
В HTTP коннекторе используется порт HTTP сервера, под управлением которого выполняется приложение.
В параметре function секции <publish указывается имя публикуемой функции. Параметр name секции <publish указывается имя под которым локальная функция будет известна удаленным узлам.
Пример конфигурации приложения локального узла. В ней должны быть определены секция с классом приложения, в которой есть дочерняя секция <adapter> и секция <interface>.
<interface name="http-interface" uri="http://host:port/context/http-connector" description="Обмен по HTTP протоколу" /> <application class="ru.domain.DemoApplication" name="demo" description="Пример определения адаптера"> <adapter class="ru.funsys.avalanche.sql.Adapter" name="database" uri="http-interface/database" /> </application>
где:
В параметре uri адаптера указывается пара значений через символ "слеш". Первое значение это имя локального интерфейса. Второе значение это значение атрибута name секции <publish> в конфигурации приложения удаленного узла.
Параметр | Значение по умолчанию | Описание |
---|---|---|
name | Имя экземпляра в конфигурации приложения | |
description | Описание экземпляра в конфигурации приложения | |
logger | ROOT | Имя логгера в конфигурации log4j |
timeout | 30000 | Время ожидания выполнения запроса в параллельном потоке, в мс |
limit | 300000 | Лимит времени выполнения запроса, по истечению которого ожидать завершения выполнения запроса в другом потоке не имеет смысла, в мс |
user | Имя пользователя выполнения запроса | |
using | Пароль пользователя выполнения запроса | |
readOnly | true | Режим только для чтения |
isolation | -1 | Используемый уровень изоляции при выполнении выражений select. Значение по умолчанию DEFAULT_TRANSOCTION |
transactionIsolation | -1 | Используемый уровень изоляции при выполнении транзакции. Значение по умолчанию DEFAULT_TRANSOCTION |
useGetParameterType | false | Использовать метод получения типа устанавливаемого параметра в SQL запросах |
parameterCase | -1 | Тип преобразования параметры запроса метаданных: 0 - к нижнему регистру, 1 - к верхнему |