2009-04-24 20 views
9

Standart bir GWT uygulamasına sahibim ve tabiki arka uçta bir Java sunucu uygulaması kullanıyor. Bu sunucu Tomcat ve Windows Server'da dağıtılmıştır.tomcat otomatik başlat servlet

Bunun kurallara/önerilere aykırı olduğunu biliyorum, ancak bu sunucuda, sunucu başlatıldığında (servletin "init" yöntemi) başlatılan bir iş parçacığım var. İş parçacığı bir zamanlayıcıdır, amacı GWT uygulamasının/arabiriminin kendisinden tamamen bağımsız olarak belirli zamanlarda farklı veritabanı görevleri gerçekleştirmektir.

İhtiyacım olan şey, savaş dağıtılır başlatılmaz, sunucunun "init" yönteminin çağrılmasıdır. Şu anda yaptığım şey, her defasında uygulamaya geçiş yapmak, savaşı doğru dizine bırakmak, daha sonra "init" yönteminin çağrılması için uygulama GWT uygulamasına "giriş" yapmam gerekiyor. Savaş güncellendiğinde servlet init yönteminin çağrılmasını istiyorum, böylece bunu yapmak için GWT uygulamasına giriş yapmak zorunda kalmam.

Herhangi bir fikrin var mı?

cevap

17

servlet context listener'u kullanabilirsiniz. Daha spesifik Eğer contextInitialized stilini iplik başlayabileceğini:

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class MyListener implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce) { 
     // start the thread 
    } 

    public void contextDestroyed(ServletContextEvent sce) { 
     // stop the thread 
    } 
} 

sonra ekleyin:

<listener> 
    <description>ServletContextListener</description> 
    <listener-class>MyListener</listener-class> 
</listener> 

Eğer

+0

Teşekkür ederim, aradığım şey buydu. – user85116

+0

bir çekicilik gibi çalışır. Teşekkürler –

0

diğer alternatif Quartz Scheduler.

kullanmak olacaktır web.xml''deki

Quartz tam özellikli, açık kaynak kodlu bir iş programıdır em ile birlikte veya nolu yanda, hemen hemen her J2EE veya J2SE uygulamasında - en küçük bağımsız uygulamadan en büyük e-ticaret sistemine kadar kullanılabilir. Quartz, için onlarca, yüzlerce hatta on binlerce işin basit veya karmaşık programlarını oluşturmak için kullanılabilir; görevleri, standart Java bileşenleri veya EJB'ler olarak tanımlanan işler. Quartz Zamanlayıcı, JTA işlemleri ve kümeleme gibi birçok kurumsal sınıf özelliklerini içerir.

Kullanmak çok kolay ve var olanın tüm nedenleri iş zamanlamasıdır. Ne yapmak istediğin gibi geliyor.

+0

Bu muhtemelen etkili bir çözümdür, ancak şu anda mümkün olduğunca basit bir şeye ihtiyacım var, bu yüzden kodumda en az değişiklik yapılması gerekiyor. Ama yine de teşekkürler, geleceğe daha ayrıntılı olarak bakmam gerekecek ... – user85116

3

WEB-INF/web.xml içinde başlangıçtaki yükleme işlemini kullanın. Netbeans'de "Başlangıç ​​siparişi" öğesi olan Servletler sekmesinde bulunur.

<servlet> 
    <servlet-name>Hl7Servlet</servlet-name> 
    <servlet-class>nl.vandenzen.Hl7Servlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
+0

evet, başlangıçta kullanımı başlangıçta kolayca çözülebilir ve web sunucusu 2.4 veya üstü için kabul edilebilir. –