Я нахожу способ запустить некоторый код только при развертывании приложения (* .war):
это работает по крайней мере для сервлетов jersey с сервлетом java, использующих javax.ws.rs.core.Application.
Приложение в файле ApplicationConfig.java (см. Ниже) содержит метод public getClasses, который вызывается при развертывании приложения.
Таким образом, добавление кода в getClasses приводит к его выполнению при развертывании приложения. Единственное замечание, которое я заметил, это то, что странно эта функция вызывается дважды, не знаю почему, поэтому я добавил глобальную переменную в класс ApplicationConfig, чтобы узнать, выполнялся ли мой код.
Вот мое решение:
package eu.oca;
import java.util.Set;
import javax.ws.rs.core.Application;
/**
*
* @author mattei
*/
@javax.ws.rs.ApplicationPath("jersey")
public class ApplicationConfig extends Application {
private boolean alreadyRun = false;
@Override
public Set<Class<?>> getClasses() {
System.out.println("Sidonie : ApplicationConfig : getClasses : alreadyRun = " + String.valueOf(alreadyRun));
alreadyRun = true;
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
/**
* Do not modify addRestResourceClasses() method.
* It is automatically populated with
* all resources defined in the project.
* If required, comment out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(eu.oca.ResultatGeneralAF.class);
resources.add(eu.oca.ResultatGeneralF.class);
resources.add(eu.oca.ResultatMesuresAF.class);
resources.add(eu.oca.ResultatMesuresF.class);
resources.add(eu.oca.SidonieAccueilD.class);
resources.add(eu.oca.SidonieWelcomeR.class);
}
}