Итак, задача довольно проста и понятна. Если Вы хотите запустить пример, то вам необходимо иметь базу данных 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
CurrencyUpdater.class
schedule.war
META-INF
MANIFEST.MF
WEB-INF
web.xml
Класс 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, чтобы он запускал программу через определенные промежутки времени.
Microgames.ru v.2 - Новости, примеры, статьи о программировании.
Сделано в 2006 году. Перевыпущен в 2008 году.
Сайт содержит оригинальные материалы и переводы.
Сообщения об ошибках просьба присылать по адресу: contact@microgames.ru
Новое сообщение