Ответ 1
В @ApplicationScoped
bean вы можете просто реализовать @PreDestroy
, чтобы сохранить его в некотором временном хранилище, которое вы затем проверяете и читаете в @PostConstruct
. Вы можете получить временное хранилище, управляемое контейнером, в качестве атрибута контекста сервлета, с помощью ServletContext.TEMPDIR
.
Вот пример запуска с использованием JAXB, чтобы данные сохранялись в многоразовом формате XML.
private Data data;
private File file;
private JAXBContext jaxb;
@Inject
private ServletContext servletContext;
@PostConstruct
public void init() {
File tempdir = (File) servletContext.getAttribute(ServletContext.TEMPDIR);
file = new File(tempdir, "data.xml");
jaxb = JAXBContext.newInstance(Data.class);
if (file.exists()) {
data = (Data) jaxb.createUnmarshaller().unmarshal(file);
}
}
@PreDestroy
public void destroy() {
jaxb.createMarshaller().marshal(data, file);
}
Если вам удастся развернуть JBoss (WildFly), вы также можете использовать папку данных, управляемую JBoss, которая немного более постоянна, чем местоположение, представленное ServletContext.TEMPDIR
.
String datadir = System.getProperty("jboss.server.data.dir");
file = new File(datadir, "data.xml");