Подключение к базе данных OpenEdge с помощью JDBC из Java-приложения (пример)
К базам данных OpenEdge можно подключаться различными способами, и не всегда клиентское приложение должно быть написано на ABL. Клиенты, написанные на других языках, могут подключаться к OpenEdge, используя ODBC или JDBC. По умолчанию ODBC/JDBC драйвера инсталлируются вместе со следующими лицензиями:
- 4GL Development
- Client Networking
- Enterprise Database
- AppServer
- WebSpeed Development Server
- WebSpeed Enterprise Transaction Server
- WebSpeed Transaction Server
- Workgroup Database
- OpenEdge Studio (OpenEdge 10.x, 11.x)
- OpenEdge Architect (OpenEdge 10.x)
- Progress Development Studio OE (OpenEdge 11.x)
Вы также можете установить эти драйвера отдельно с помощью пакета SQL Client Access, который доступен для скачивания в рамках технической поддержки из Progress Download Center.
Далее я приведу простой пример подключения к базе данных через JDBC из Java-клиента. Для этого мной была создана «песочница» со следующими характеристиками:
Машина 1
- CentOS 5 32-bit
- OpenEdge 10.1B с лицензиями OE Enterprise RDBMS и 4GL Development System. Да, в этом примере будет использоваться старая версия, т.к. изначально пример был предназначен для конкретного клиента. Но отличие между старой и современной версиями совсем незначительное, по тексту я его обозначу.
Машина 2
- Windows 7 64-bit
- jdk-7u75-windows-x64
Задача
Установить соединение из Java-программы (Windows/Linux) к базе данных sports2000 (OpenEdge 10.1B), размещенной на Linux; прочитать содержимое таблицы customer.
Подготовка машин
Инсталляция OpenEdge 10.1B в каталог /usr/dlc была выполнена заранее. Стоит отметить, что OpenEdge версии 10.1B требует наличия Java 1.4.
Создание тестовой базы данных в Linux:
1. В любом удобном для вас месте создайте каталог db/ и перейдите в него:
mkdir db cd db
2. Сделайте копию стандартной тестовой базы данных sports2000
prodb sports2000 sport2000 Procopy session begin for root on /dev/pts/3. (451) Database copied from /usr/dlc/sports2000. (1365) Procopy session end. (334)
3. Выполните старт брокера базы данных на порту 6789:
proserve sports2000 -S 6789 OpenEdge Release 10.1B as of Wed Jan 10 12:21:31 EST 2007 17:46:41 BROKER 0: Multi-user session begin. (333) 17:46:41 BROKER 0: Begin Physical Redo Phase at 0 . (5326) 17:46:41 BROKER 0: Physical Redo Phase Completed at blk 0 off 3539 upd 0. (7161) 17:46:41 BROKER 0: At end of Physical redo, transaction table size is 32. (13547) 17:46:41 BROKER 0: Started for 6789 using TCP, pid 15345. (5644)
Номер порта здесь значения не имеет, база должна быть стартована с возможностью подключения по сети. Вы также можете для SQL подключений стартовать отдельного брокера, который будет обслуживать только SQL-клиентов, но для данного примера нам достаточно стандартного первичного брокера, обслуживающего как ABL, так и SQL клиентов.
Поскольку для SQL-подключения будет необходимо использовать userid/password с соответствующими правами доступа на уровне SQL, то нужно создать такого пользователя. В этом примере я буду использовать стандартного sysprogress, который по умолчанию является SQL-администратором со всеми необходимыми правами. На уровне SQL этот пользователь уже существует, нам нужно добавить его на уровне OpenEdge:
- Откройте Procedure Editor:
mpro sports2000
- В меню Procedure Editor перейдите Tools -> Data Dictionary
- В меню Data Dictionary перейдите Admin -> Security -> Edit User List
- Добавьте пользователя sysprogress с паролем 123 (для примера этого достаточно).
- Выйдите из Data Dictionary и закройте Procedure Editor.
Компоненты драйвера JDBC, начиная с версии OpenEdge 10.1A и до 10.2A, находятся в следующих файлах:
$DLC/java/openedge.jar $DLC/java/base.jar $DLC/java/util.jar
Отличие современных версий OpenEdge: начиная с 10.2B файл base.jar и util.jar более не используются, достаточно только файла openedge.jar – это единственное отличие. Кроме того, до версии 10.1A существовал единственный файл драйвера с именем jdbc.jar.
Эти файлы необходимо прописать в переменной среды окружения CLASSPATH на стороне клиента. Так как в примере мы должны выполнить проверку и на Linux, и на Windows, выполним следующее:
- На стороне Linux в профайл пользователя, или в скриптах установки переменных окружения, добавьте:
export CLASSPATH=каталог с java-программой:/usr/dlc/java/openedge.jar:/usr/dlc/java/base.jar:/usr/dlc/java/util.jar:$CLASSPATH
<каталог с java-программой>, – это каталог, где вы будете хранить свои скомпилированные Java-программы (*.class).
Перезайдите в систему (или выполните ту же команду в командной строке текущей сессии).
- На стороне Windows:
В проводнике щёлкните правой кнопкой по Computer, в открывшемся меню щёлкните Properties
В открывшемся окне щёлкните Advanced system setting
В окне System Properties щёлкните по кнопке Environment Variables.
Найдите переменную окружения CLASSPATH, если такой нет, то создайте её, и добавьте путь к файлам openedge.jar, base.jar, util.jar. Если в Windows у вас не установлены продукты OpenEdge, содержащие JDBC-драйвер, то вы можете просто скопировать их из каталога инсталляции OpenEdge в Linux.
Закройте окно System Properties.
Подготовка программы на Java
Для загрузки драйвера необходимо чтобы приложение успешно загрузило класс com.ddtek.jdbc.openedge.OpenEdgeDriver:
Class.forName ("com.ddtek.jdbc.openedge.OpenEdgeDriver");
Для информации! До версии 10.1A класс назывался com.progress.sql.jdbc.JdbcProgressDrive.
Для установления подключения используется следующая конструкция:
"jdbc:datadirect:openedge://myhost:6789;databaseName=sports2000;user = jones;password = secret"
Код программы JdbcTest.java:
import java.sql.*; public class JdbcTest { public static void main (String args []) { try { Class.forName ("com.ddtek.jdbc.openedge.OpenEdgeDriver"); System.out.println("Driver loaded"); Connection con = DriverManager.getConnection("jdbc:datadirect:openedge://192.168.200.33:6789;databaseName=sports2000;user=sysprogress;password=123"); System.out.println("Connected"); Statement stmt = con.createStatement(); System.out.println("Statement created"); ResultSet rs = stmt.executeQuery("select name from pub.customer"); System.out.println("ResultSet : \n"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); stmt.close(); con.close(); } catch (Exception x) {x.printStackTrace();} } }
Компиляция JdbcTest.java:
javac JdbcTest.java
В каталоге программы после компиляции появится файл JdbcTest.class. Путь к каталогу с этим файлом также должен быть прописан в CLASSPATH.
Проверка подключения
Выполните следующую команду:
java JdbcTest
На экране появится список имен клиентов из таблицы customer базы данных Sports2000.
Дополнение
Второй вариант Java-программы, выполняющий то же самое, что и JdbcTest. Обратите внимание на то, как здесь указаны параметры подключения, и как выполняется обработка ошибок.
Код программы Java2Progress.java:
import java.sql.*; public class Java2Progress { public static void main( String[] args ) { String driver = "com.ddtek.jdbc.openedge.OpenEdgeDriver"; String URL = "jdbc:datadirect:openedge://192.168.200.33:6789;databaseName=sports2000"; String username = "sysprogress"; String password = "123"; Connection con = null; DatabaseMetaData dmd = null; ResultSet rs = null; try { Class.forName( driver ); con = DriverManager.getConnection( URL, username, password ); PreparedStatement stmt = con.prepareStatement ( " SELECT name FROM pub.customer "); System.out.println( "Connected to " + URL ); System.out.println("SELECT name FROM pub.customer "); System.out.println("============================"); rs = stmt.executeQuery(); while (rs.next()) { String s = rs.getString(1); System.out.println(s); } rs.close(); } catch (SQLException ex) { System.out.println ("\n*** SQLException caught ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Message: " + ex.getMessage ()); System.out.println ("Vendor: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch ( Throwable excp ) { excp.printStackTrace (); } } }
На этом всё, надеюсь, что когда перед вами поставят аналогичную задачу, то этот простой пример вам пригодится.
Метка:JAVA, JDBC, Интеграция
Есть вопрос? Спросите...
Для отправки комментария вам необходимо авторизоваться.
2 Комментария
А откуда скачать openedge.jar, base.jar, util.jar?
Начиная с 10.2B файл base.jar и util.jar не используются, достаточно только файла openedge.jar. После установки хотябы одной из перечисленных в начале статьи лицензий OpenEdge, файл openedge.jar будет находиться в каталоге $DLC/java, например, для моей инсталляции OpenEdge 11.6 Developers Kit: Classroom Edition – C:\Progress\OpenEdge\java\openedge.jar