2014-07-14 5 views
11

Beim Start müssen wir die Serveradresse und den HTTP-Port der laufenden Anwendung abrufen. Bis jetzt haben wir es wie folgt aus:Wie werden Serveradresse und Port programmgesteuert in Java EE eingebunden?

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
ObjectName socketBindingMBean = new ObjectName("jboss.as:socket-binding-group=standard-sockets,socket-binding=http"); 

String host = (String) mBeanServer.getAttribute(socketBindingMBean, "boundAddress"), 
Integer port = (Integer) mBeanServer.getAttribute(socketBindingMBean, "boundPort")); 

Alles war in Ordnung, aber nach der Migration von jBoss 7.1.1.Final zu 7.1.3.Final haben wir das Problem, dass die MBean nicht beim Start des Servers definiert. Das bedeutet, alles ist in Ordnung, wenn ich die Anwendung auf einem bereits ausgeführt jboss Server, aber wenn ich den Server starten und die Anwendung geladen ist während Server starten MBeans sind nicht da.

Ich weiß nicht warum, aber ich habe das Gefühl, dass jBoss dafür sorgt, dass diese Anwendung vor den meisten MBeans gestartet/geladen wird. Ich hatte einen kleinen Blick und fand heraus, dass folgende Mbeans nach unserer Anwendung geladen werden:

  • jboss.as:interface= ..
  • jboss.as:socket-binding-group= ..
  • Jboss .as: Subsystem = ..
  • jboss.as:core-service=management .. (einige)

So

  • Wie kann ich jBoss zwingen MBeans vor meiner Anwendung zu laden?
  • gibt es einen anderen Weg/mbean, wo ich meine Informationen bekommen kann?
+0

Konnten Sie dieses Problem lösen? – RedEagle

+1

Hui, vor mehr als einem Jahr :) Wir haben den getAttribute-Methodenaufruf in einem neuen Thread für einige Sekunden verzögert. Sieht nicht perfekt aus, läuft aber bis heute produktiv. – Marcel

Antwort

3

Ich habe das gleiche Problem in JBOSS Wildfly 8.1. Ich löste das Problem mit dem Code unten, der für mich arbeitete, um Serveradresse und HTTP-Port zu erhalten: