Domanda

Ho un progetto web su Java EE 5 e Websphere 7.0 Devo creare lo scheduler e avviarlo dopo aver distribuito l'applicazione. Quello che ho provato: Creo EJB con interfaccia:

@Local
public interface ISchedulerBean {

    public void executeTimer(Timer timer);
    public void createTimer();
}

Il bean di sessione senza stato implementa questa interfaccia. Il metodo createTimer crea un'istanza di timer da TimerService. Questa parte del codice funziona bene. Inoltre, devo chiamare il metodo createTimer () dopo la distribuzione dell'applicazione. Ho provato:

  1. Aggiungi listener servletContext:

    public class SchedulerInitialiserContextListener implementa ServletContextListener { // servizio per cercare ejb WebServiceLocator privato webServiceLocator; private SchedulerService schedulerService;

    public SchedulerInitialiserContextListener () { webServiceLocator= nuovo WebServiceLocator (); schedulerService= webServiceLocator.getSchedulerService (); }

    public void contextDestroyed(ServletContextEvent ctx) {
    }
    
    public void contextInitialized(ServletContextEvent ctx) {
        schedulerService.createTimer();
    }
    

    }

  2. crea Servlet con 1 dove inject SchedulerBean nel metodo init () e chiama createTimer.

Ma questo non funziona, perché all'inizio webspere distribuisce applicazioni web, chiama listener, inizializza servlet e solo successivamente distribuisce ejb.jar in cui si trovano tutti gli ejb. Posso vederlo nel file di registro di webshpere. Quindi quando provo a ottenere ejb lancia l'annotazione o la ricerca @EJB ottengo Eccezione, perché ejb non è stato trovato. Potrebbe essere un altro approccio per avviare il timer dopo aver distribuito il modulo ejb o cambiare l'ordine di distribuzione?

È stato utile?

Soluzione

Puoi impostare l'ordine di avvio dei tuoi moduli.

Supponendo che si sviluppi con Rational Application Developer, effettuare le seguenti operazioni:

Fare clic con il pulsante destro del mouse sul progetto dell'orecchio e fare clic su Java EE -> Apri distribuzione WebSphere Application Server.

Cerca la sezione Applicazione, vedrai tutti i moduli e potrai impostare il Start weight per ognuno.

Assicurati che il tuo progetto web contenente il Context Listener abbia il valore più grande e dovresti stare bene.

  • Questa operazione crea una directory ibmconfig sotto META-INF del tuo progetto ear, assicurati di impacchettarla nel tuo processo di compilazione
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top