- Статьи и примеры
- | Разное полезное
- | Про то, как настроить jboss на выполнение программы в заданное время
Про то, как настроить JBoss на выполнение программы в заданное время
Окружение
Итак, задача довольно проста и понятна. Если Вы хотите запустить пример, то вам необходимо иметь базу данных MySQL и сервер приложений JBoss. В моем распоряжении имеется JBoss 4.2.1 GA Порт по умолчанию 8080. База данных MySQL 6.0.2. Java, которая установлена на моем компьютере, имеет номер 6.0.3.
База данных
Начнем с создания базы данных примера. Назовем ее schedule и сразу создадим табличку sheduler_table с полями id — по привычке, currency — код валют. Он не бывает более 3 символов, value — значение котировки валют и last_update — в этом поле будет автоматически проставлена дата последнего обновления таблицы.
CREATE TABLE schedule_table ( id integer (11) NOT NULL AUTO_INCREMENT , currency varchar (27), value float (10,5), last_update timestamp NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
Пишем код
Далее я просто создал Java проект в Eclipse. Я все делал в Eclipse — мне так удобно. Но сборка архива для публикации в JBoss будет происходить при помощи простого Ant сценария. Давайте сразу посмотрим, как будет выглядеть конечный ear файл:
- schedule-test.ear.ear
- META-INF
- application.xml
- jboss-app.xml
- schedule-service.xml
- schedule-ejb.jar
- META-INF
- MANIFEST.MF
- schedule
- ejb
- ApplicationWorker.class
- ejb
- META-INF
- schedule.war
- META-INF
- MANIFEST.MF
- WEB-INF
- web.xml
- META-INF
- META-INF
Класс schedule.ejb.CurrencyUpdater является самым главным в этом приложении. Но прежде чем начать его рассматривать надо скопировать три библиотеки в папку lib в корень проекта: 2 из jboss/server/default/lib/scheduler-plugin.jar и jboss/server/default/lib/servlet-api.jar и одну из другого места — mysql-connector-java-5.0.8-bin.jar (если у Вас нет такого места, можно найти ее тут: http://dev.mysql.com/downloads/connector/j/5.1.html). Просто подключите их к проекту Eclipse(Project/properties/Java Buidl Path/Libraries/Add JARs…). Эти библиотеки понадобятся только тестирования и заполнения базы данных в первый раз.
Итак. Метод parseURL открывает URL с XML файлом котировок валют и заполняет HashMap cMap. Следующий метод — insertCurrencyTable() всего лишь заполняет значениями таблицу schedule_table. В реальном приложении Connection берется из другого места при помощи dependency injection. Здесь все проще — соединение получаем тут же из метода getMySQLConnection().
private void parseURL(String url) throws IOException, SAXException { DOMParser parser = new DOMParser(); parser.parse(url); Element element = parser.getDocument().getDocumentElement(); NodeList pages = element.getElementsByTagName("Day"); for (int i = 0, maxCount = pages.getLength(); i < maxCount; i++) { Element e = (Element)pages.item(i); cMap.put(e.getAttribute("currency"), Float.valueOf(e.getAttribute("rate"))); } } private void insertCurrencyTable() throws SQLException, OException, SAXException{ parseURL("currency.xml"); Connection conn = getMySQLConnection(); PreparedStatement psInsertCurrency = conn.prepareStatement("insert into schedule_table set currency=?,value=?"); for(String s : cMap.keySet()){ psInsertCurrency.setString(1, s); psInsertCurrency.setFloat(2, cMap.get(s)); psInsertCurrency.executeUpdate(); psInsertCurrency.clearParameters(); } psInsertCurrency.close(); conn.close(); } private Connection getMySQLConnection(){ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String url = "jdbc:mysql://localhost:3306/schedule"; Connection con = null; try { con = (Connection) DriverManager.getConnection(url, "root",""); } catch (SQLException e) { e.printStackTrace(); } return con; }
Убедимся в том, что файл с тестовыми котировками лежит в корне проекта — currency.xml. Запустим CurrencyUpdater, для того чтобы убедиться в его работоспособности. Из метода main должен запуститься insertCurrencyTable()и заполнить таблицу данными из файла currency.xml. После того как это произошло, нам осталось только собрать архив и сказать серверу приложений JBoss, чтобы он запускал программу через определенные промежутки времени.
Страница:
-
1