2014-01-31 65 views
0

我需要在init方法中獲取服務器到servlet的一些服務器屬性,之前任何請求執行(在init方法中)。其實我neet得到所有在這個服務器連接器上工作的列表,所有工作的webapps,最重要的是 - 端口號或連接器。 所需的碼頭版本 - 高達8版本包括。jetty get webapp list

所以我需要像org.eclipse.jetty.server.Server這樣的東西,但不是用於embdeded,而是來自現有服務器,在我的servlet運行時。 只要webapp部署人員使用此信息,此信息就可以在碼頭上使用。但我找不到在哪裏。

回答

4

在碼頭的start.ini啓用JMX將允許您使用類似的代碼如下:

final MBeanServer mBeanServerConnection = ManagementFactory.getPlatformMBeanServer(); 
final String[] portAttribute = new String[] {"port"}; 

// Jetty 9 MBeans 
final ObjectName webappcontext9 = new ObjectName("org.eclipse.jetty.webapp:context=*,type=webappcontext,id=*"); 
final Set<ObjectName> webappcontexts9 = mBeanServerConnection.queryNames(webappcontext9, null); 
for (final ObjectName objectName : webappcontexts9) { 
    System.out.println(objectName.getKeyProperty("context")); 
} 

final ObjectName serverconnector9 = new ObjectName("org.eclipse.jetty.server:context=*,type=serverconnector,id=*"); 
final Set<ObjectName> serverconnectors9 = mBeanServerConnection.queryNames(serverconnector9, null); 
for (final ObjectName objectName : serverconnectors9) { 
    System.out.println("listening port for " + objectName.getCanonicalName() + " is " + mBeanServerConnection.getAttributes(objectName, portAttribute).asList().get(0).getValue()); 
} 

// Jetty 8 and 7 MBeans 
final ObjectName webappcontext8 = new ObjectName("org.eclipse.jetty.webapp:type=webappcontext,id=*,name=*"); 
final Set<ObjectName> webappcontexts8 = mBeanServerConnection.queryNames(webappcontext8, null); 
for (final ObjectName objectName : webappcontexts8) { 
    System.out.println(objectName.getKeyProperty("name")); 
} 

final ObjectName serverconnector8 = new ObjectName("org.eclipse.jetty.server.nio:type=selectchannelconnector,id=*"); 
final Set<ObjectName> serverconnectors8 = mBeanServerConnection.queryNames(serverconnector8, null); 
for (final ObjectName objectName : serverconnectors8) { 
    System.out.println("listening port for " + objectName.getCanonicalName() + " is " + mBeanServerConnection.getAttributes(objectName, portAttribute).asList().get(0).getValue()); 
} 

當然,你需要配置碼頭裝載包含此代碼最後的Web應用程序或它贏得」獲取加載的其他Web應用程序的完整列表。

+0

好的,這個軟件應該得到賞金,但我知道應該有一種方法可以通過命名和目錄界面而不是通過JMX來獲取所有這些。 – msangel

相關問題