Внешние базы данных могут быть использованы для параметризации моделей, чтения больших объемов исходной информации для модели (например, таблиц маршрутизации), записи результатов моделирования и т. п. Технически есть два способа организации взаимодействия модели и базы данных. Можно использовать интерфейс JDBC, который основан на спецификациях SAG CLI (SQL Access Group Call Level Interface, интерфейс уровня вызова группы доступа SQL). Начиная с версии JDK 1.1, в поставке стандартных библиотек появился пакет классов java.sql, обеспечивающий набор функций, необходимых при разработке ODBC-приложений. В этом пакете содержится множество классов, позволяющих выполнять хранимые процедуры, возвращать результаты запросов и т. д. JDBC, в свою очередь, работает через ODBC или через прямые связи к базам данных.
Второй способ организации взаимодействия моделей и баз данных — использование встроенного в AnyLogic Engine класса com.xj.anylogic.Datasource. Этот класс работает поверх JDBC и предоставляет методы, позволяющие сократить объем необходимого для доступа к данным кода. Общая схема доступа к данным представлена на рис. 11.1.
Опишем последовательность действий, необходимых для чтения данных из книги Excel. Во-первых, необходимо создать собственно файл XLS с данными и организовать доступ к этим данным с помощью SQL-запросов из
модели. Для возможности адресации части листа в пределах книги Excel используется понятие именованных диапазонов. Необходимо заполнить часть листа данными в формате таблицы. Затем, используя Insert | Name | Define, нужно задать имя этой области листа. После того, как XLS-файл с данными подготовлен, в модели необходимо создать новый источник данных MyDataSource и связать этот источник данных с файлом XLS. Вся дальнейшая работа с добавленным источником данных организуется через API класса DataSource. Например, представленный далее код выбирает значение параметра (столбец value) из именованного диапазона ParametersTabie, где имя параметра (Name) имеет значение Arrival Rate. String s = MyDataSource.getvalue(
"SELECT Value FROM ParametersTabie WHERE Name = 'Arrival Rate1;"); //преобразовываем строку в число arrivalRate = Double.valueOf(s).doubleValue();
Для записи результатов также используются SQL-запросы. Например, представленный далее код добавляет в лист с именем Results данные о клиенте и его времени пребывания в системе.
MyDataSource.modify("INSERT INTO [Results$] VALUES (" + id +"," + time + "); ");
Специфика работы с Excel заключается в том, что необходимо закрывать файл перед запуском модели. Использование MS Access как многопользовательской базы данных позволяет снять это ограничение.
11.4. Вызов внешних приложений
из AnyLogic
Вызов внешних приложений используется, когда из модели по некоторым событиям необходимо запустить внешнюю программу. Это может быть программа обработки статистики, результатов моделирования или приложения для отображения результатов. Доступ к программному окружению в Java реализуется классом Runtime. В частности, этот класс и позволяет выполнять команды в отдельном процессе относительно процесса, в котором работает AnyLogic (фактически, в отдельном окне Windows). Пример, приведенный далее, открывает папку C:\CVS Files в Windows Explorer.
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec ("C: \\WINDOWSWexplorer.exe " + "C:\\CVS Files"); // символ"\" дублируется в строке
} catch (java.io.IOException ex) {
Engine.error("Exception in exec: " + ex); }
Вызов модели
Из внешних приложений
В некоторых случаях при разработке модели встроенных средств анимации не хватает. Одно из решений этой проблемы — разработка интерфейса к модели на языке программирования. По происходящим в приложении событиям, реализующим интерфейс с пользователем (например, нажата кнопка "проиграть модель"), приложение должно запускать модель AnyLogic на выполнение. Для того чтобы скомпилировать модель как независимое Java-приложение, вы должны построить JAR-файл с классами модели. Для этого задайте имя JAR-файла в поле Целевой файл свойств модели. После
ТОГО Как JAR-фаЙЛ МОДеЛИ Построен, Скопируйте фаЙЛ xjanylogic5engine. jar
в директорию Lib основного каталога AnyLogic, в которой находится JAR-файл модели. Для запуска модели, построенной как Java приложение, можно использовать приведенную далее строку кода:
java -cp xjanylogic5engine.jar;mymodel.jar mymodel.Main$Simulation
В этой строке вызывается интерпретатор Java с параметрами, в которых указываются используемые приложением библиотеки (параметр -cp) и главный класс, с которого начинается выполнение приложения (эксперимент
Simulation, запускающий Класс Main).