هل هناك طريقة لتشغيل طريقة / فئة فقط عند بدء التشغيل القط / Wildfly / Glassfish؟
-
03-07-2019 - |
سؤال
وأحتاج لإزالة الملفات المؤقتة عند بدء التشغيل القط، تمرير إلى مجلد الذي يحتوي على الملفات المؤقتة في applicationContext.xml.
هل هناك طريقة لتشغيل طريقة / فئة فقط عند بدء التشغيل القط؟
المحلول
هل يمكن إرسال بريد ServletContextListener
التي تدعو طريقتك من أسلوب contextInitialized()
. إرفاق المستمع إلى تطبيق الويب الخاص بك في web.xml، منها مثلا.
<listener>
<listener-class>my.Listener</listener-class>
</listener>
و
package my;
public class Listener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContext context) {
MyOtherClass.callMe();
}
}
وبالمعنى الدقيق للكلمة، وهذا يتم تشغيله مرة واحدة فقط عند بدء التشغيل تطبيق الويب، بدلا من بدء التشغيل القط، ولكن قد تصل إلى نفس الشيء.
نصائح أخرى
ويمكنك أيضا استخدام (بدءا بريمج V3) وaproach المشروح (لا حاجة لإضافة أي شيء إلى web.xml):
@WebListener
public class InitializeListner implements ServletContextListener {
@Override
public final void contextInitialized(final ServletContextEvent sce) {
}
@Override
public final void contextDestroyed(final ServletContextEvent sce) {
}
}
وأنا متأكد من يجب أن يكون هناك طريقة أفضل للقيام بذلك كجزء من الحاوية دورة (تحرير: هانك لديه الجواب - كنت أتساءل لماذا كان يشير الى SessonListener
قبل أجبت)، ولكن هل يمكن إنشاء بريمج الذي ليس له غرض سوى تنفيذ إجراءات لمرة واحدة عند بدء تشغيل الخادم:
<servlet>
<description>Does stuff on container startup</description>
<display-name>StartupServlet</display-name>
<servlet-name>StartupServlet</servlet-name>
<servlet-class>com.foo.bar.servlets.StartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>