- Статьи и примеры
- | Разное полезное
- | Про то, как настроить 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
