هل هناك طريقة لتشغيل طريقة / فئة فقط عند بدء التشغيل القط / Wildfly / Glassfish؟

StackOverflow https://stackoverflow.com/questions/158336

سؤال

وأحتاج لإزالة الملفات المؤقتة عند بدء التشغيل القط، تمرير إلى مجلد الذي يحتوي على الملفات المؤقتة في 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> 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top