2010-06-08 6 views
12

Ich bin auf der Suche nach einem Einstiegspunkt in einem EJB auf JBoss im Einsatz.Aufruf Methode in EJB auf JBoss Start

Servlets haben das load-on-startup Tag in seinem web.xml zu verwenden.

Ich bin auf der Suche nach ähnlichen init() Funktionalität für ein EJB.

Antwort

25

Das war nicht für EJB bis 3.1 vorhanden. Mit 3.1 EJB können Sie einen Singleton-Bean verwenden, das simulieren:

Von Application Startup/Shutdown Callbacks:

@Startup 
    @Singleton 
    public class FooBean { 

     @PostConstruct 
     void atStartup() { ... } 

     @PreDestroy 
     void atShutdown() { ... } 

    } 

Andernfalls müssen Sie auf den guten alten Trick verlassen, um ein ServletContextInitializer zu verwenden.

Es gibt einige anwendungsspezifische Erweiterungen, z. lifecycle listener für Glassfish. Vielleicht gibt es so etwas für JBoss.

Aber wenn ich Sie wäre, würde ich versuchen, auf Standardfunktionen so viel wie möglich zu verlassen. Das Problem bei einer nicht standardmäßigen Erweiterung ist, dass Sie nie genau wissen, was getan werden kann oder nicht, z. können Sie die Transaktion starten oder nicht, etc.

+1

Alternativ kann immer eine MBean mit Start/Stop-Lifecycle-Methoden verwendet werden. Die MBean wird mit dem benötigten EJB injiziert und ruft alle Methoden auf, die benötigt werden. –

+0

Danke. Zwei großartige Beiträge. Ich endete stattdessen mit einem "ServletWrapper". Aber ein Refactor steht auf der Tagesordnung. Prost! – Elijah

+0

Ich benutze jboss 5.1 (nicht sicher, ob es EJB3.1 unterstützt) Ich kann diese Technik verwenden, um die deploy-Methode aufzurufen. Vielen Dank. – rayman

1

Managed Beans können verwendet werden, um einen Prozess beim JBoss-Start durchzuführen, Sie müssen den Eintrag dieser verwalteten Bean in der Konfigurationsdatei hinzufügen.

1

Sie sollen die folgende Zeile in der Spitze der Methode, die Sie beim Start ausgeführt werden sollen hinzuzufügen fähig sein:

@Observer("org.jboss.seam.postInitialization") 
3

Wenn Sie JBoss AS 5.1 Targeting sind, und es Ihnen nichts ausmacht die JBoss EJB 3.0 Extensions verwenden, können Sie einen Service-Bean bauen Sie Ihre EJB Bootstrap. Wenn Ihr Service eine mit der Annotation @Management annotierte Schnittstelle implementiert und eine Methode mit der Signatur public void start() throws Exception deklariert, ruft JBoss diese Methode beim Starten des Service auf.

@Service 
public class BeanLauncher implements BeanLauncherManagement 
{ 
    @EJB private SessionBeanLocal sessionBean; 

    @Override 
    public void start() throws Exception 
    { 
     sessionBean.init(); 
    } 
} 

@Management 
public interface BeanLauncherManagement 
{ 
    public void start() throws Exception; 
} 

Weitere Informationen zu diesem Thema, einschließlich zusätzlicher Lebenszyklusereignisse können here zu finden: Sie können dann eine eigene init() Methode auf dem Sie initialisieren möchten EJB aufrufen.

Verwandte Themen