@Singleton @Startup @PostConstruct-Methode, die garantiert zurückgegeben wird, bevor EJBs für Clientaufrufe verfügbar gemacht werden?

8

Im Kontext einer Java EE 6-Anwendung, die unter WebSphere 8.0 ausgeführt wird, muss ich eine Reihe von Startaufgaben ausführen, bevor eine Geschäftsmethode ausgeführt werden kann. Die Verwendung einer @Startup @Singleton Bean für diesen Zweck scheint eine vielversprechende Lösung zu sein. Es ist mir jedoch nicht ganz klar, wie genau der Anwendungslebenszyklus aussehen würde. Die EJB 3.1-Spezifikation gibt Folgendes an:

  

Standardmäßig ist der Container für die Entscheidung verantwortlich, wann   initialisiert eine Singleton-Bean-Instanz. Allerdings kann der Bean-Entwickler   Konfigurieren Sie das Singleton optional für die Initialisierung. Wenn die   Startanmerkung erscheint in der Singleton-Bean-Klasse oder wenn die   Singleton wurde über den Deployment-Deskriptor als bezeichnet   Wenn der Container initialisiert werden soll, muss der Container initialisiert werden   die Singleton-Bean-Instanz während der Startsequenz der Anwendung.   Der Container muss alle diese Startzeit-Singletons zuvor initialisieren   Alle Client-Anforderungen werden an alle Enterprise-Bean-Komponenten in ausgeliefert   die Anwendung.

  1. Was bedeutet im letzten Satz genau "Initialisierung"? Wird der Container warten, bis die Methode @PostConstruct der @Startup-Bean zurückgegeben wird, bevor Enterprise-Beans für Clientanforderungen verfügbar gemacht werden?

  2. Apropos "client requests": Führen Sie geplante Ausführungen einer EJB-Methode mit der @Scheduled-Annotation als eine in diesem Kontext aus?

Ich muss garantieren, dass Code beim Start der Anwendung ausgeführt wird, bevor eine der Geschäftsmethoden in einem der verschiedenen EJBs der Anwendung ausgeführt werden kann, sei es durch Clientaufrufe oder geplante Ausführungen. Bietet das Ausführen des Startup-Codes in der @ PostConstruct-Methode einer @Singleton @Startup-Bean eine solche Garantie? Wenn nicht, gibt es eine andere Möglichkeit, dieses Verhalten zu garantieren?

    
Lord Zuthulu 22.09.2016, 16:11
quelle

1 Antwort

6
  1. Ja, der Container wartet darauf, dass die Methode @PostConstruct aller @Startup -Bohnen im Modul ("EJB-Anwendung") zurückgibt, bevor Clientanforderungen zugelassen werden.
  2. Ja, dies ist in WebSphere Application Server der Fall, wie in Entwickeln Singleton Session Beans Thema im Knowledge Center, die sagt" Eine PostConstruct-Methode in einer Singleton-Bean kann einen EJB-Timer erstellen [...] Um jedoch zu vermeiden, a Deadlock, darf die PostConstruct-Methode nicht auf die Ausführung eines EJB-Timers warten ". Mit anderen Worten, Timer-Callback-Aufrufe warten auf @PostConstruct Methoden, damit% code% methods nicht auf das Beenden von Timer Callback-Aufrufen warten müssen.
Brett Kail 23.09.2016, 07:05
quelle

Tags und Links