Использование библиотеки

Подключение библиотеки в проект

Для использования библиотеки необходимо ее подключить в проект. Способ подключения зависит от вида проекта. Например, для 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> в конфигурации приложения удаленного узла.

Параметры класса ru.funsys.avalanche.sql.Database

ПараметрЗначение по умолчаниюОписание
nameИмя экземпляра в конфигурации приложения
descriptionОписание экземпляра в конфигурации приложения
loggerROOTИмя логгера в конфигурации log4j
timeout30000Время ожидания выполнения запроса в параллельном потоке, в мс
limit300000Лимит времени выполнения запроса, по истечению которого ожидать завершения выполнения запроса в другом потоке не имеет смысла, в мс
userИмя пользователя выполнения запроса
usingПароль пользователя выполнения запроса
readOnlytrueРежим только для чтения
isolation-1Используемый уровень изоляции при выполнении выражений select. Значение по умолчанию DEFAULT_TRANSOCTION
transactionIsolation-1Используемый уровень изоляции при выполнении транзакции. Значение по умолчанию DEFAULT_TRANSOCTION
useGetParameterTypefalseИспользовать метод получения типа устанавливаемого параметра в SQL запросах
parameterCase-1Тип преобразования параметры запроса метаданных: 0 - к нижнему регистру, 1 - к верхнему