[JBoss5] JBoss stoppen bzw. am starten hindern?

Verjigorm

Top Contributor
Hallo,

folgendes Problem:

Wir haben eine Klasse mit @Service annotiert, die als erstes vom JBoss 5.1.0 gestartet wird, vor allen anderen Beans. Dieser Service checkt verschiedene Bedingungen die erfüllt sein müssen, z.B. Versionen etc.

Sollte es in bestimmten Fällen dazu kommen, dass unsere Anwendung nicht starten soll, dann würde ich gerne den JBoss herunterfahren, bzw. das (weiter-)deployen der Anwendung verhindern.

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

Java:
			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 daran zu starten, bzw. wie stoppe ich ihn?
Weder eine RuntimeException noch System.exit scheinen zu wirken (War nur zu Testzwecken ;) )

mfg Verjigorm
 
M

maki

Gast
Bin kein JBoss Profi, aber es überrascht mich kein bisschen, dass System.exit etc nicht funzen, wäre auch katastrophal, wenn eine EJB/App den ganzen Server herunterfahren dürfte.

Ich denke du willst zuviel, deine EJB/App nicht zu starten ist dein gutes recht, den Server abzufackeln nicht ;)
 
M

maki

Gast
Was ist denn das eigentliche Ziel?

Deine App wird ja an sich nicht funzen wenn deine EJBs nicht starten, oder?
Wer (User, Admin, etc. pp.) startet eigentlich den JBoss?
 

Verjigorm

Top Contributor
Was ist denn das eigentliche Ziel?

Wenn Versionskonflikt, dann soll die Applikation nicht starten. ist doch ganz einfach zu verstehen oder???

Deine App wird ja an sich nicht funzen wenn deine EJBs nicht starten, oder?

Die EJB's starten ja doch, genau das will ich ja verhindern ......

Wer (User, Admin, etc. pp.) startet eigentlich den JBoss?

Fast genau in dieser Reihenfolge ;) Jeder x-beliebige halt, mitunter auch irgendwelche Scheduler etc.
 
M

maki

Gast
Wenn Versionskonflikt, dann soll die Applikation nicht starten. ist doch ganz einfach zu verstehen oder???
IMHO noch zu wenig, war meine Frage zu kompliziert? ;)
Dachte die wäre recht einfach zu verstehen...

Werden bei euch zufällig bzw. wahllos verschiedene Versionen der App auf dem Server installiert?

Hast du mal daran gedacht die Serial UID für sowas zu nutzen? Sollte recht schnell knallen dann.

Ich habe den Eindruck dass euer Deploy Prozess "suboptimal" ist und ihr das nun per Frickelei "lösen" wollt, nciht böse gemeint.
 

Verjigorm

Top Contributor
IMHO noch zu wenig, war meine Frage zu kompliziert? ;)
Dachte die wäre recht einfach zu verstehen...

Unsere Applikation ist in "Module" aufgeteilt. Jedes Modul besitzt eine Version, die im Source hinterlegt ist. Diese Version muß ein passendes Gegenstück in der Kundendatenbank besitzen. Dies wird momentan zur Laufzeit ermittelt.

Momentan wird diese Versionsprüfung zur Laufzeit ermittelt. Im Fehlerfall gibt es halt eine Fehlermeldung/Log-Eintrag/E-Mail was auch immer.

Nun ist es schon vorgekommen, dass der JBoss installiert und/oder gestartet, aber vorerst nicht benutzt wird. Den Versionskonflikt merkt man erst bei der Benutzung.
Damit dies aber schon beim Start des JBoss "erkannt" wird, brauchen wir nun eine Prüfung beim Start des JBoss.
Und die Anforderung lautet u.a.:
Wenn es ein Versionskonflikt gibt, dann den JBoss nicht zu stoppen bzw. nicht zu starten.

Versionskonflikt -> Applikation nciht starten. Finde ich extrem einfach die Aussage.
In meiner letzten Firma haben wir OSGI benutzt, da war das deregistrieren von Bundles ganz einfach. Sowas möchte ich hier auch.
 
R

RaiausderDose

Gast
Also "wir" nutzen auf der Arbeit Linux und JBoss ist als Server eingerichtet, da der manchmal nach diversen Deploys irgendwie bei der Speicherverwaltung Mist baut, müssen die Admins ihn manchmal weghauen oder rebooten.

Machen dies über eine Webapp und zwar so:

Java:
     Runtime rt = Runtime.getRuntime();
     //rt.exec("//sbin//shutdown -r now"); //<--Ganzer Server rebooten!!!!
     rt.exec("service jboss restart"); //<-- nur JBOSS rebooten!

Dazu muss der JBOSS Server aber als root laufen, klar Sicherheitsrisiko (bei uns eher geringes Problem, da er nur intern genutzt wird), aber du hast sonst, meines Wissens nach, keine Chance.
 

TheDarkRose

Gesperrter Benutzer
Dazu muss der JBOSS Server aber als root laufen, klar Sicherheitsrisiko (bei uns eher geringes Problem, da er nur intern genutzt wird), aber du hast sonst, meines Wissens nach, keine Chance.

Wieso sollte der JBoss als Root laufen? Wenn das Initskript, bzw der Upstart Service für JBoss auf für alle Executable ist, kann dieser von jedem gestartet werden und läuft auch dann auch in diesem Benutzerkontext.
 

FArt

Top Contributor
Rein technisch: der Aufruf des System-MBeans macht auch nur ein System.exit(). Die Finalisierung wird dann über Shutdown-Hooks durchgeführt (siehe Sourcecode).
Also kann man auch selber ein System.exit durchfürhren.. natürlich sollte man davon absehen.

Auch das Shutdown-Skript spricht genau diese Schnittstelle des Servers an. Natürlich muss der JBoss deswegen nicht als root laufen.

Eine saubere Lösung wäre OSGI oder ein geregeltes Deployment. Alles andere ist gefrickel. Wenn dein erstes Bean alle Abhängigekeite und Kompatibilitäten prüfen kann, dann soll es das tun. Wenn sonst alle Deployments davon abhängen, wird nichts mehr deployt. Aber auch das ist ... suboptimal... freundlich ausgedrückt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Spring JBoss 7 - wie JNDI Datasource einbinden Application Tier 8
S JBoss - .properties vom Kunden änderbar machen Application Tier 10
M org.jboss.weld.exceptions.UnproxyableResolutionException wegen Parametern im Superclass-Kontruktor Application Tier 10
G jBoss automatische Synchronisation? Application Tier 4
JimPanse JBoss 7 + JPA + Kundera + Cassandra Application Tier 2
B Glassfish vs. Tomcat/JBoss Application Tier 4
S Umstellung von JBoss 7 Full auf Web Profile Application Tier 4
V [JBoss 5] Datenbankverbindung zur Laufzeit aufbauen? Application Tier 8
V [JBoss 5] Startroutine implementieren? Application Tier 7
S JBoss, EAR, EJB und ClassNotFound Application Tier 28
V JBoss 5 DeploymentSorter? Application Tier 3
V JBoss 5 mag @Service nicht Application Tier 2
K Threads im JBoss Application Tier 20
S JBoss EJB RMI Application Tier 5
A Jboss Ear mittels maven Application Tier 3
D Lazy Hibernate bei 3-Tier Applikation (JBoss + EJB3 + FatClient) Application Tier 6
ruutaiokwu stateful ejb unter jboss als webservice zur verfügung stellen... Application Tier 2
T Simples EJB-Beispiel für JBoss mit Eclipse Application Tier 3
M Spring - Leichtgewichtiger als JBoss? Application Tier 4
M JBoss Seam - Spring Application Tier 11

Ähnliche Java Themen

Neue Themen


Oben