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.
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?
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?
@PostConstruct
aller @Startup
-Bohnen im Modul ("EJB-Anwendung") zurückgibt, bevor Clientanforderungen zugelassen werden. @PostConstruct
Methoden, damit% code% methods nicht auf das Beenden von Timer Callback-Aufrufen warten müssen.