2012-01-24 100 views
2

我在两台不同的物理机器上安装了两台服务器节点IBM Websphere Application Server。任何人都可以用java代码来帮助我检查服务器实例是否正在运行,或者其中一台服务器未启动并正在运行?如何检查服务器已启动?

+1

是不是WebSphere ND提供了这个框? –

+0

我的目标是在服务器停机/挂起时得到通知。你能告诉我,ND是如何提供这些细节的? –

+0

只需要一个已知的页面,并确保你找回来;微不足道的cron脚本或其他。 –

回答

5

要快速且便携地执行此操作,可以检查服务器是否提供页面。

例如,您可以:

boolean isAlive = true; 
try { 
    URL hp = new URL("http://yourserver/TestPage.html"); 
    URLConnection hpCon = hp.openConnection(); 
    // add more checks... 
} catch (Exception e) { 
    isAlive = false; 
} 

这没有太大的复杂的方法将每个HTTP服务器的工作。下面

+0

@ Andrea Colleoni:我相信'boolean isAlive = false;'应该是'boolean isAlive = true;'..对吗? –

+0

对!抱歉... –

+0

这缺少一个hpCon.connect()调用来实际建立连接。 –

2

希望是你想要的...

或失败:

URL url = new URL("http://google.com:666/"); 
HttpURLConnection httpConn = (HttpURLConnection)url.openConnection(); 
httpConn.setInstanceFollowRedirects(false); 
httpConn.setRequestMethod("HEAD"); 
try{ 
    httpConn.connect(); 
    System.out.println("google.com : " + httpConn.getResponseCode()); 
}catch(java.net.ConnectException e){ 
    System.out.println("google.com:666 is down "); 
} 

好运!

+0

Fahim/Andrea我感谢你们两位的及时答复。 –

+0

欢迎您..... –

1

我认为您可能需要的是使用WebSphere Thin Administrative Client,它公开了Java API并提供对WAS MBeans的访问,使您可以查询服务器/应用程序的状态(以及许多其他管理和监视任务)。

首先,你要得到一个连接被(在AdminClient)如下:

Properties clientProps = new Properties(); 
clientProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP); 
clientProps.setProperty(AdminClient.CONNECTOR_HOST, dmgrHostname); 
clientProps.setProperty(AdminClient.CONNECTOR_PORT, dmgrSoapConnectorPort); 
if (dmgrIsSecure) { 
    clientProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true"); 
    clientProps.setProperty(AdminClient.USERNAME, wasUsername); 
    clientProps.setProperty(AdminClient.PASSWORD, wasUserPassword); 
} 
AdminClient adminClient = AdminClientFactory.createAdminClient(clientProps); 

接下来,你要查询有关MBean的,然后再进行相关操作。就你而言,你可能对ClusterMgr和/或J2EEApplication MBean感兴趣。下面是为群集的状态查询的例子:

AdminClient adminClient = getAdminClient(target); 
ObjectName clusterMgr = 
    (ObjectName)adminClient.queryNames(
     ObjectName.getInstance("WebSphere:*,type=ClusterMgr"), null).iterator().next(); 
String state = adminClient.invoke(clusterMgr, "getClusterState", 
    new Object[] {clusterName}, new String[] {String.class.getName()}); 

根据需要,如查询个人集群成员的状态,您可以调用进一步的操作。

此外,除了查询,也可以register notifications让你的程序可以在特定事件发生的通知,如集群,服务器或应用程序状态的变化。

+0

+1良好的使用mbeans –

1

我们使用openConnection()获取我们想要的URL的专用连接。它将返回抽象类URLConnection的一个子类,具体取决于URL的公共协议,例如HttpURLConnection。然后用方法connect()打开通信链接

private String server = "http://testserver:9086"; 
try { 
    URLConnection hpCon = new URL(SERVER).openConnection(); 
    hpCon.connect(); 
} catch (Exception e) { 
    // Anything you want to do when there is a failure 
} 
+0

@ Vogel612代码的答案是好的。 Chillax。 – Zizouz212

+0

@ Vogel612感谢您的反馈。我有同样的问题,想分享代码,我认为这很清楚,但肯定可以更清楚。现在我试着解释一下代码。 – Weslor

相关问题