仕事上のメモです。
今回の話の開発・実行環境:
tomcat 5.x
java, jvm : 1.4から6.0(1.6)へのバージョンアップ
Java(ここではWebの)でping(icmp)をするために、isReachableっていうメソッドを使うと取れる。
ただ、このメソッドは5.0以上からしか使えないらしく、客先サーバでは使えないので、バージョンアップを検討。
tomcatにバージョンアップ後のjvmを認識させるには、レジストリをいじる。
HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationProcrun 2.0Tomcat5ParametersJavaのjvmの値をここでは、C:Program FilesJavajdk1.6.0jrebinserverjvm.dllに変更。
これで実行環境は整ったが、jspをコンパイルできない。そりゃそ-だ。jspコンパイラは1.4で、6.0のライブラリを使おうとしてるから。
じゃぁjspコンパイラも上げちゃえってことで、startup時にsetclasspath.batで設定されるクラスパス内の%TOMCAT_HOME%commonlibtools.jarを、新しく持ってきた6.0のtools.jarで上書き。これでなった!!
ところがどっこい、やりたかった起動チェックは、こんな理由で、Windows XPの場合ポート7番をあけてやらないと返事を返さない。まぁバージョンアップはわかったのでよしとしよう!!
サーブレットのソースは、一番下。
URLでhttp://localhost:8081/xxxxx/IsOnline?h=hostnameを叩くと、クライアント(ホスト名:hostname)が起動してれば、1が返ってくるし、起動してなければ何も返ってこない。
実際はxmlhttprequestで一斉にチェックをかける。
※ポート8081にしてる理由はORACLEが入っているため8080が使えないので。。
package xxxxx;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class for Servlet: IsOnline
*
*/
public class IsOnline extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
public IsOnline() {
super();
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
public boolean isReachable(String hostname) {
InetAddress dest = null;
//long time = 0;
int timeout = 2000; // タイムアウト[ms]
if(!hostname.equals("")){
try{
dest = InetAddress.getByName(hostname);
}catch(UnknownHostException e){
//System.out.println("Unknow Host Exception.");
return false;
// DNS解決が出来なかった場合何もしない
}
}
try{
if(dest.isReachable(timeout)){
return true;
} else {
return false;
}
} catch (IOException e){
return false;
}
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try{
String hostname;
boolean isOnline = false;
hostname = request.getParameter("h");
isOnline = isReachable(hostname);
if(isOnline){
String sTAG;
sTAG = "1";
response.getWriter().println(sTAG);
}
} catch (Exception e){
}
}
}