# [JBoss 5] Startroutine implementieren?



## Verjigorm (29. Aug 2011)

Hallo,

wir haben ein System basierend auf EJB3 und bräuchten einen "Service", der beim Start des JBoss verschiedene Dinge prüft, wie z.B. bestimmte Modul-Versionen in unserer Datenbank.

Wenn also die Versionen der Software von der Version in der Datenbank abweichen, so soll der JBoss garnicht erst weiter starten, sondern anhalten.

Die Frage ist nur, wie mache ich das? Gibt es eine Art Startup-Listener?
Oder muss ich in all meinen EJB's mit @Depend eine EJB angeben, die dann die Prüfungen durchführt bevor alle anderen EJB's geladen werden?

Oder wie funktioniert dies?

mfg Verjigorm


----------



## JimPanse (29. Aug 2011)

Hi,

eine Möglichkeit wäre ein MBean  -> Klasse mit 
	
	
	
	





```
@Service
```
  und das interfaces mit 
	
	
	
	





```
@Management
```
 annotieren. Das Interfaces muss start() und stop() als Methoden besitzen 

->Chapter5.JBoss EJB 3.0 extensions

Greetz


----------



## Verjigorm (30. Aug 2011)

Hallo,

ja die Möglichkeit kenne ich generell.
Wir haben ein paar davon im Einsatz.
Aber die starten nocht ganz am Anfang, sondern irgendwann mittendrin


----------



## JimPanse (30. Aug 2011)

> start() - called by the server when the service is started and all the services it depends upon have been started too. At this point the service (and all the services it depends on) is fully functional..



also wir haben auch 'ein paar' im Einsatz und die Laden beim starten des JBoss AS globale Konfigurationen aus der DB...

Greetz


----------



## Verjigorm (31. Aug 2011)

Ja, wie ich bereits sagte: das ist soweit korrekt!

Aber der Service startet "irgendwann beim Serverstart" manchmal als 5. Bean (laut console) und manchmal als 287. .
Ich brauch aber etwas, was vor allen anderen startet als aller erstes und eventuell verhindert, dass andere Bean überhaupt erst geladen werden.


----------



## Verjigorm (31. Aug 2011)

Ok ich habe nun allen Beans als @Depends mein Service mitgegeben und nun startet die Bean auch wirklich als aller erstes.
Ich führe meine Prüfungen durch etc.

Nun habe ich nur noch folgendes Problem:
Sollte es in bestimmten Fällen dazu kommen, dass ich unsere Anwendung nicht starten möchte, dann würde ich gerne den JBoss herunterfahren, bzw. das deployen der Anwendung verhindern.

Um den JBoss zur Laufzeit zu stoppen benutzen wir folgenden Code:


```
final MBeanServer locateJBoss = MBeanServerLocator.locateJBoss();
			final ObjectName kernel = new ObjectName("jboss.system:type=Server");
			locateJBoss.invoke(kernel, "shutdown", new Object[] {}, null);
```
Dies funktioniert auch gut, aber in diesem Fall gibt es eine Exception mit dem Text "not started".

Wie hindere ich den JBoss nun darun zu starten, bzw. wie stoppe ich ihn?
Weder eine RuntimeException noch System.exit scheinen zu wirken (War nur zu Testzwecken  )

mfg Verjigorm


----------



## JimPanse (31. Aug 2011)

Hi,

versuch es mal mit java exec

Execute an external program - Real's Java How-to

und führe entsprechend des OS das shutdown cmd aus

Jumping Into JBoss - Developer.com

aber ob das funktioniert weiß ich auch nicht. Einen solchen Anwendungsfall hatte ich noch nicht über einen Service den JBoss zu beenden.

Greetz


----------



## Verjigorm (31. Aug 2011)

Hallo,

nee über so ne Krücke habe ich auch schon nachgedacht ...
Naja ich mach besser mal dazu nen neuen Thread auf.


----------

