CloudScape
CloudScape Любой разработчик приложений, которому нужно иметь дело с базами данных, не раз задумывался над выбором подходящей СУБД (DBMS, DataBase Managment System). Эта проблема обычно решается использованием дорогостоящих и громоздких СУБД, таких, как, например, Oracle, IBM UDB, Sybase и пр. Но не всем такой выбор будет по душе. Во-первых, это дорого, во-вторых, требует немало системных ресурсов. Поэтому многие прибегают к использованию различных бесплатных СУБД — например, mySQL или postgreSQL. Обе имеют различные области применения, и их использование может создать некоторое неудобство для тестирования своих программ разработчику, который не привязан к какой-либо определенной платформе. Например, Java-разработчику пришлось бы иметь дело с несколькими дистрибутивами. Для них как нельзя лучше подходит native Java СУБД, которой и является CloudScape от Informix.
Под naitive Java я имел в виду СУБД, которая целиком написана на Java. Вследствие этого она может быть использована на любой платформе, где есть JVM, а это сегодня стандарт для всех уважающих себя операционных систем.
CloudScape идеально подходит для тестирования ваших JDBC-приложений. Почему? Мы поговорим об этом позже. Для начала займемся установкой.
Дистрибутив CloudScape представлен в виде обычного Java-класса. Например, файл cloudscape35.class. Для начала установки выполните следующую команду:
java cloudscape35
Если директория с исполняемыми файлами вашей JVM не находится в переменной окружения PATH, то пропишите полный путь к файлу java (java.exe) или используйте переменную окружения JAVA_HOME, если она у вас определена.
Этой командой запустится мастер установки. Ответив на все поставленные мастером вопросы, вы получите директорию с рабочей версией CloudScape.
Cloudscape может работать как минимум в двух режимах. В первом случае ваше приложение запускает свою копию СУБД на время выполнения программы и впоследствии завершает ее работу (embedded mode). Во втором случае она работает по стандартной client-server архитектуре. Такие возможности сулят этой СУДБ неизбежную популярность, потому как многие программисты захотят включить средства управления базами данных непосредственно в свое приложение. И нет необходимости говорить пользователю, чтобы тот устанавливал дополнительное программное обеспечение.
Чтобы опробовать CloudScape, нужно выполнить некоторые дополнительные действия по настройке переменных окружения в вашей операционной системе.
Переменная CLOUDSCAPE_INSTALL содержит путь к директории, куда был установлен CloudScape. Для установки этой переменной окружения пропишите ее в скриптах инициализации.
Для Windows 9x это будет autoexec.bat. После этого компьютер следует перезагрузить.
set CLOUDSCAPE_INSTALL=c:\usr\cloudscape
Для Linux — bash_profile в вашей домашней директории (~/bash_profile), но не обязательно. Пример:
export CLOUDSCAPE_INSTALL=/usr/local/cloudscape
В Windows NT и производных от нее воспользуйтесь редактором переменных окружения. Выберите пункт popup-меню Properties, нажав правой кнопкой мыши на иконке "My computer". Далее в соответствующей закладке вы найдете редактор и с его помощью добавьте новую переменную CLOUDSCAPE_INSTALL.
Далее по ходу появления новых переменных добавляйте их в систему одним из приведенных выше способов.
Переменная CLASSPATH используется для указания путей и JAR-архивов, содержащих необходимые классы для выполнения java-приложений. Если приложению нужно импортировать какие-либо из внешних классов, то JVM будет искать файл этого класса в путях, прописанных в CLASSPATH. Для использования CloudScape вы должны прописать следующие JAR-архивы:
Linux:
$CLOUDSCAPE_INSTALL/lib/cloudscape.jar
$CLOUDSCAPE_INSTALL/lib/tools.jar
export CLASSPATH=$CLASSPATH;$CLOUDSCAPE_INSTALL/lib/cloudscape.jar;$CLOUDSCAPE_INSTALL/lib/tools.jar
Windows 9x:
set CLASSPATH=%CLASSPATH%;%CLOUDSCAPE_INSTALL%\lib\cloudscape.jar;%CLOUDSCAPE_INSTALL%\lib\tools.jar
Переменную CLASSPATH не обязательно определять в скриптах инициализации. Вы можете временно устанавливать ее во время выполнения приложения. Но в этом случае в Windows 9x могут возникнуть проблемы с установкой переменных окружения на лету. Обычно при попытке выполнить команду set система отвечает, что недостаточно свободной памяти. Для решения этой проблемы необходимо прописать в config.sys следующую строчку:
SHELL=c:\command.com /P /E:4096
Этой строчкой вы выделите дополнительные 4Kb оперативной памяти для переменных окружения каждому процессу.
Проверить правильность указания переменной CLASSPATH можно при помощи класса COM.cloudscape.tools.sysinfo. С его помощью вы можете проверить достаточность прописанных путей для выполнения CloudScape в разных режимах. Выполните команду:
java COM.cloudscape.tools.sysinfo
Вы увидите выданную подсказку со списком режимов. Выполните следующую команду:
java COM.cloudscape.tools.sysinfo -cp RmiServer
Проанализировав вывод, вы поймете, что чего-то ему не хватает. Так и есть. Для работы в режиме сервера JDBC с поддержкой удаленных соединений вам необходимо включить в CLASSPATH jar-архив: $CLOUDSCAPE_INSTALL\frameworks\RmiJdbc\classes\RmiJdbc.jar. Не ошибитесь в написании, т.к. java чувствительна к регистру символов. И это требование относится и к операционным системам семейства Windows.
Чтобы запустить сервер CloudScape, достаточно убедиться в том, что все необходимые jar-файлы включены в CLASSPATH, и запустить следующий скрипт:
Linux:
$CLOUDSCAPE_INSTALL/frameworks/RmiJdbc/bin/startCS.ksh
Windows:
%CLOUDSCAPE_INSTALL%\frameworks\RmiJdbc\bin\startCS.bat
Для завершения работы выполните скрипты stopCS.ksh и stopCS.bat соответственно. Они находятся в той же директории. Если вы не получили никакого исключения (exception) от JVM, то вы сделали все правильно. Теперь можно приступить к тестированию нашего свежесконфигурированного сервера баз данных.
Ниже приведен текст приложения, которое соединяется с СУБД, создает базу данных addrbook, заполняет ее данными и выводит результат выборки из полученной базы.
/**
cloudscape_test.java
Простой класс для проверки работоспособности CloudScape (встроенный (embedded) режим)
*/
import java.sql.*; // Импортируем классы, необходимые JDBC
public class cloudscape_test
{
public static void main(String argv[])
{
new cloudscape_test().run_test();
}
public static void run_test()
{
try
{
Class.forName("COM.cloudscape.core.JDBCDriver").newInstance();
// загружаем JDBC-драйвер
Connection conn = DriverManager.getConnection("jdbc:cloudscape:addrbook;create=true"); // создаем соединение; если база данных не существует, она будет создана
conn.setAutoCommit(false);
// отключаем автоматические COMMIT'ы (включаем поддержку транзакционности)
Statement s = conn.createStatement();
// создаем Statement для выполнения SQL-запросов
s.executeUpdate("create table test_tbl (a1 int, a2 varchar(20), a3 varchar(100))");
// создаем таблицу
s.executeUpdate("insert into test_tbl values(1,'Alexey', 'litvinuke@tut.by')");
// вносим одну запись
ResultSet result = s.executeQuery("select * from test_tbl");
// выбираем эту запись из созданной таблицы
while (result.next())
{
System.out.println(result.getString(1)+" | "+result.getString(2)+" | "+result.getString(3)); // выводим на STDOUT
}
result.close();
// закрываем ResultSet
s.close();
// закрываем Statement
conn.commit();
// выполняем COMMIT (даем сигнал СУБД, чтобы та записала внесенные изменения в базу данных за текущий сеанс)
conn.close();
// закрываем соединение с базой данных
try
{
DriverManager.getConnection("jdbc:cloudscape:;shutdown=true");
// убиваем запущенный нашим приложением процесс CloudScape
} catch (SQLException e2)
{
e2.printStackTrace();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
Приведенный выше код предназначен для работы CloudScape во встроенном режиме. Это значит, что вам не нужно запускать CloudScape отдельным процессом. Все необходимые действия будут выполнены JDBC-драйвером. Если же вы хотите работать с удаленной СУБД CloudScape, то все, что вам нужно будет сделать, это изменить две строчки в этом коде:
Class.forName("COM.cloudscape.core.JDBCDriver").newInstance();
Здесь нужно изменить имя класса JDBC-драйвера на "COM.cloudscape.core.RmiJdbcDriver"
Connection conn = DriverManager.getConnection("jdbc:cloudscape:addrbook;create=true");
А здесь "jdbc:cloudscape:" — заменить на "jdbc:cloudscape:rmi:".
После этого нужно удалить конструкцию try {...} catch(SQLException e2) {...}, т.к. теперь программа работает с удаленным CloudScape и не будет пытаться запускать собственный экземпляр CloudScape. В итоге исходный текст приложения для работы с удаленным процессом CloudScape примет следующий вид:
/**
cloudscape_test.java
Простой класс для проверки работоспособности CloudScape (client-server режим)
*/
import java.sql.*; // Импортируем классы, необходимые JDBC
public class cloudscape_test
{
public static void main(String argv[])
{
new cloudscape_test().run_test();
}
public static void run_test()
{
try
{
Class.forName("COM.cloudscape.core.RmiJdbcDriver").newInstance();
// загружаем JDBC-драйвер
Connection conn = DriverManager.getConnection("jdbc:cloudscape:rmi:addrbook;create=true"); // создаем соединение; если база данных не существует, она будет создана
conn.setAutoCommit(false);
// отключаем автоматические COMMIT'ы (включаем поддержку транзакционности)
Statement s = conn.createStatement();
// создаем Statement для выполнения SQL-запросов
s.executeUpdate("create table test_tbl (a1 int, a2 varchar(20), a3 varchar(100))");
// создаем таблицу
s.executeUpdate("insert into test_tbl values(1,'Alexey', 'litvinuke@tut.by')");
// вносим одну запись
ResultSet result = s.executeQuery("select * from test_tbl");
// выбираем эту запись из созданной таблицы
while (result.next())
{
System.out.println(result.getString(1)+" | "+result.getString(2)+" | "+result.getString(3)); // выводим на STDOUT
}
result.close();
// закрываем ResultSet
s.close();
// закрываем Statement
conn.commit();
// выполняем COMMIT (даем сигнал СУБД, чтобы та записала внесенные изменения в базу данных за текущий сеанс)
conn.close();
// закрываем соединение с базой данных
} catch (Exception e)
{
e.printStackTrace();
}
}
}
Это все. Теперь для работы программы необходимо запустить CloudScape отдельным процессом. Как это делать, упоминалось выше.
CloudScape — это действительно мощная объектно-ориентированная СУБД. Она может использоваться как для решения отдельных задач, так и для использования в качестве основного хранилища данных EJB серверов.
Дополнительную информацию о CloudScape вы можете найти на сайте www.cloudscape.com.
Алексей Литвинюк (c) litvinuke@tut.by www.litvinuke.hut.ru
Под naitive Java я имел в виду СУБД, которая целиком написана на Java. Вследствие этого она может быть использована на любой платформе, где есть JVM, а это сегодня стандарт для всех уважающих себя операционных систем.
CloudScape идеально подходит для тестирования ваших JDBC-приложений. Почему? Мы поговорим об этом позже. Для начала займемся установкой.
Дистрибутив CloudScape представлен в виде обычного Java-класса. Например, файл cloudscape35.class. Для начала установки выполните следующую команду:
java cloudscape35
Если директория с исполняемыми файлами вашей JVM не находится в переменной окружения PATH, то пропишите полный путь к файлу java (java.exe) или используйте переменную окружения JAVA_HOME, если она у вас определена.
Этой командой запустится мастер установки. Ответив на все поставленные мастером вопросы, вы получите директорию с рабочей версией CloudScape.
Cloudscape может работать как минимум в двух режимах. В первом случае ваше приложение запускает свою копию СУБД на время выполнения программы и впоследствии завершает ее работу (embedded mode). Во втором случае она работает по стандартной client-server архитектуре. Такие возможности сулят этой СУДБ неизбежную популярность, потому как многие программисты захотят включить средства управления базами данных непосредственно в свое приложение. И нет необходимости говорить пользователю, чтобы тот устанавливал дополнительное программное обеспечение.
Чтобы опробовать CloudScape, нужно выполнить некоторые дополнительные действия по настройке переменных окружения в вашей операционной системе.
Переменная CLOUDSCAPE_INSTALL содержит путь к директории, куда был установлен CloudScape. Для установки этой переменной окружения пропишите ее в скриптах инициализации.
Для Windows 9x это будет autoexec.bat. После этого компьютер следует перезагрузить.
set CLOUDSCAPE_INSTALL=c:\usr\cloudscape
Для Linux — bash_profile в вашей домашней директории (~/bash_profile), но не обязательно. Пример:
export CLOUDSCAPE_INSTALL=/usr/local/cloudscape
В Windows NT и производных от нее воспользуйтесь редактором переменных окружения. Выберите пункт popup-меню Properties, нажав правой кнопкой мыши на иконке "My computer". Далее в соответствующей закладке вы найдете редактор и с его помощью добавьте новую переменную CLOUDSCAPE_INSTALL.
Далее по ходу появления новых переменных добавляйте их в систему одним из приведенных выше способов.
Переменная CLASSPATH используется для указания путей и JAR-архивов, содержащих необходимые классы для выполнения java-приложений. Если приложению нужно импортировать какие-либо из внешних классов, то JVM будет искать файл этого класса в путях, прописанных в CLASSPATH. Для использования CloudScape вы должны прописать следующие JAR-архивы:
Linux:
$CLOUDSCAPE_INSTALL/lib/cloudscape.jar
$CLOUDSCAPE_INSTALL/lib/tools.jar
export CLASSPATH=$CLASSPATH;$CLOUDSCAPE_INSTALL/lib/cloudscape.jar;$CLOUDSCAPE_INSTALL/lib/tools.jar
Windows 9x:
set CLASSPATH=%CLASSPATH%;%CLOUDSCAPE_INSTALL%\lib\cloudscape.jar;%CLOUDSCAPE_INSTALL%\lib\tools.jar
Переменную CLASSPATH не обязательно определять в скриптах инициализации. Вы можете временно устанавливать ее во время выполнения приложения. Но в этом случае в Windows 9x могут возникнуть проблемы с установкой переменных окружения на лету. Обычно при попытке выполнить команду set система отвечает, что недостаточно свободной памяти. Для решения этой проблемы необходимо прописать в config.sys следующую строчку:
SHELL=c:\command.com /P /E:4096
Этой строчкой вы выделите дополнительные 4Kb оперативной памяти для переменных окружения каждому процессу.
Проверить правильность указания переменной CLASSPATH можно при помощи класса COM.cloudscape.tools.sysinfo. С его помощью вы можете проверить достаточность прописанных путей для выполнения CloudScape в разных режимах. Выполните команду:
java COM.cloudscape.tools.sysinfo
Вы увидите выданную подсказку со списком режимов. Выполните следующую команду:
java COM.cloudscape.tools.sysinfo -cp RmiServer
Проанализировав вывод, вы поймете, что чего-то ему не хватает. Так и есть. Для работы в режиме сервера JDBC с поддержкой удаленных соединений вам необходимо включить в CLASSPATH jar-архив: $CLOUDSCAPE_INSTALL\frameworks\RmiJdbc\classes\RmiJdbc.jar. Не ошибитесь в написании, т.к. java чувствительна к регистру символов. И это требование относится и к операционным системам семейства Windows.
Чтобы запустить сервер CloudScape, достаточно убедиться в том, что все необходимые jar-файлы включены в CLASSPATH, и запустить следующий скрипт:
Linux:
$CLOUDSCAPE_INSTALL/frameworks/RmiJdbc/bin/startCS.ksh
Windows:
%CLOUDSCAPE_INSTALL%\frameworks\RmiJdbc\bin\startCS.bat
Для завершения работы выполните скрипты stopCS.ksh и stopCS.bat соответственно. Они находятся в той же директории. Если вы не получили никакого исключения (exception) от JVM, то вы сделали все правильно. Теперь можно приступить к тестированию нашего свежесконфигурированного сервера баз данных.
Ниже приведен текст приложения, которое соединяется с СУБД, создает базу данных addrbook, заполняет ее данными и выводит результат выборки из полученной базы.
/**
cloudscape_test.java
Простой класс для проверки работоспособности CloudScape (встроенный (embedded) режим)
*/
import java.sql.*; // Импортируем классы, необходимые JDBC
public class cloudscape_test
{
public static void main(String argv[])
{
new cloudscape_test().run_test();
}
public static void run_test()
{
try
{
Class.forName("COM.cloudscape.core.JDBCDriver").newInstance();
// загружаем JDBC-драйвер
Connection conn = DriverManager.getConnection("jdbc:cloudscape:addrbook;create=true"); // создаем соединение; если база данных не существует, она будет создана
conn.setAutoCommit(false);
// отключаем автоматические COMMIT'ы (включаем поддержку транзакционности)
Statement s = conn.createStatement();
// создаем Statement для выполнения SQL-запросов
s.executeUpdate("create table test_tbl (a1 int, a2 varchar(20), a3 varchar(100))");
// создаем таблицу
s.executeUpdate("insert into test_tbl values(1,'Alexey', 'litvinuke@tut.by')");
// вносим одну запись
ResultSet result = s.executeQuery("select * from test_tbl");
// выбираем эту запись из созданной таблицы
while (result.next())
{
System.out.println(result.getString(1)+" | "+result.getString(2)+" | "+result.getString(3)); // выводим на STDOUT
}
result.close();
// закрываем ResultSet
s.close();
// закрываем Statement
conn.commit();
// выполняем COMMIT (даем сигнал СУБД, чтобы та записала внесенные изменения в базу данных за текущий сеанс)
conn.close();
// закрываем соединение с базой данных
try
{
DriverManager.getConnection("jdbc:cloudscape:;shutdown=true");
// убиваем запущенный нашим приложением процесс CloudScape
} catch (SQLException e2)
{
e2.printStackTrace();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
Приведенный выше код предназначен для работы CloudScape во встроенном режиме. Это значит, что вам не нужно запускать CloudScape отдельным процессом. Все необходимые действия будут выполнены JDBC-драйвером. Если же вы хотите работать с удаленной СУБД CloudScape, то все, что вам нужно будет сделать, это изменить две строчки в этом коде:
Class.forName("COM.cloudscape.core.JDBCDriver").newInstance();
Здесь нужно изменить имя класса JDBC-драйвера на "COM.cloudscape.core.RmiJdbcDriver"
Connection conn = DriverManager.getConnection("jdbc:cloudscape:addrbook;create=true");
А здесь "jdbc:cloudscape:" — заменить на "jdbc:cloudscape:rmi:".
После этого нужно удалить конструкцию try {...} catch(SQLException e2) {...}, т.к. теперь программа работает с удаленным CloudScape и не будет пытаться запускать собственный экземпляр CloudScape. В итоге исходный текст приложения для работы с удаленным процессом CloudScape примет следующий вид:
/**
cloudscape_test.java
Простой класс для проверки работоспособности CloudScape (client-server режим)
*/
import java.sql.*; // Импортируем классы, необходимые JDBC
public class cloudscape_test
{
public static void main(String argv[])
{
new cloudscape_test().run_test();
}
public static void run_test()
{
try
{
Class.forName("COM.cloudscape.core.RmiJdbcDriver").newInstance();
// загружаем JDBC-драйвер
Connection conn = DriverManager.getConnection("jdbc:cloudscape:rmi:addrbook;create=true"); // создаем соединение; если база данных не существует, она будет создана
conn.setAutoCommit(false);
// отключаем автоматические COMMIT'ы (включаем поддержку транзакционности)
Statement s = conn.createStatement();
// создаем Statement для выполнения SQL-запросов
s.executeUpdate("create table test_tbl (a1 int, a2 varchar(20), a3 varchar(100))");
// создаем таблицу
s.executeUpdate("insert into test_tbl values(1,'Alexey', 'litvinuke@tut.by')");
// вносим одну запись
ResultSet result = s.executeQuery("select * from test_tbl");
// выбираем эту запись из созданной таблицы
while (result.next())
{
System.out.println(result.getString(1)+" | "+result.getString(2)+" | "+result.getString(3)); // выводим на STDOUT
}
result.close();
// закрываем ResultSet
s.close();
// закрываем Statement
conn.commit();
// выполняем COMMIT (даем сигнал СУБД, чтобы та записала внесенные изменения в базу данных за текущий сеанс)
conn.close();
// закрываем соединение с базой данных
} catch (Exception e)
{
e.printStackTrace();
}
}
}
Это все. Теперь для работы программы необходимо запустить CloudScape отдельным процессом. Как это делать, упоминалось выше.
CloudScape — это действительно мощная объектно-ориентированная СУБД. Она может использоваться как для решения отдельных задач, так и для использования в качестве основного хранилища данных EJB серверов.
Дополнительную информацию о CloudScape вы можете найти на сайте www.cloudscape.com.
Алексей Литвинюк (c) litvinuke@tut.by www.litvinuke.hut.ru
Компьютерная газета. Статья была опубликована в номере 31 за 2002 год в рубрике программирование :: разное