Глобальное событие запуска сервера

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Тешимся!)
Строка 89: Строка 89:
[[Файл:onStartup.jpg]]
[[Файл:onStartup.jpg]]
-
<source lang="sh">
+
<source lang="bash">
log # tail -1 server.error.log
log # tail -1 server.error.log
script 08-04/15:13:23 ERROR [pool-1-thread-1] test - test!
script 08-04/15:13:23 ERROR [pool-1-thread-1] test - test!
</source>
</source>

Версия 07:09, 4 августа 2011

В биллинге (v5.1 на 04.08.2011) нельзя штатными средствами выполнить свой код при запуске сервера биллинга. Это достаточно красиво можно поправить, добавив собственное глобальное скриптовое событие.

Содержание

Howto

Пишем само событие

package ru.dsi.bgbilling.server.event;
 
import javax.xml.bind.annotation.XmlRootElement;
 
import ru.bitel.bgbilling.kernel.event.LocalEvent;
 
/**
 * @author semen
 *
 */
@XmlRootElement
public class ServerStartedEvent extends LocalEvent {
 
	private static final long serialVersionUID = -108213638853848253L;
 
	public ServerStartedEvent() {
		super();
	}
 
}

Пишем собственный сервлет, который будет выстреливать наше событие при старте

package ru.dsi.bgbilling.server.util;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
 
import bitel.billing.common.BGException;
 
import ru.bitel.bgbilling.kernel.event.EventProcessor;
import ru.dsi.bgbilling.server.event.ServerStartedEvent;
 
/**
 * @author semen
 *
 */
public class StartupScriptServlet extends HttpServlet {
 
	private static final long serialVersionUID = -2658268863357401652L;
 
	@Override
	public void init() throws ServletException {
		super.init();
		ServerStartedEvent event = new ServerStartedEvent();
		try {
			EventProcessor.getInstance().request(event);
		}catch (BGException e){
			e.printStackTrace();
		}
	}
}

Сервлет и событие компилируем и закидываем в виде Файл:Custom server util.zip jar-файла в /usr/local/BGBillingServer/lib/ Прописываем сервлет в data/default.web.xml:

<servlet>
        <servlet-name>startupservlet</servlet-name>
        <servlet-class>ru.dsi.bgbilling.server.util.StartupScriptServlet</servlet-class>
        <load-on-startup>7</load-on-startup>
    </servlet>
<servlet-mapping>
        <servlet-name>startupservlet</servlet-name>
        <url-pattern>/startup</url-pattern>
    </servlet-mapping>


Прописываем событие в список глобальных скриптовых событий

INSERT INTO script_event_type (MID, event_mode, event_id, title) VALUES(-1, 0, "ru.dsi.bgbilling.server.event.ServerStartedEvent", "Запуск сервера");

Обратите внимание, что mid=-1, т.к. если мы укажем 0 или Mid какого-нибудь существующего модуля, то эта строчка затрется при обновлении.

Тешимся!

Файл:onStartup.jpg

log # tail -1 server.error.log
script 08-04/15:13:23 ERROR [pool-1-thread-1] test - test!
Личные инструменты