package org.jboss.resource.adapter.jdbc.vendor;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import org.jboss.logging.Logger;
import org.jboss.resource.adapter.jdbc.ValidConnectionChecker;
import org.jboss.util.NestedRuntimeException;
public class MySQLValidConnectionChecker
implements ValidConnectionChecker, Serializable
{
private static final long serialVersionUID = -2227528634302168878L;
private static final Logger log = Logger.getLogger(MySQLValidConnectionChecker.class);
private Method ping;
private static Object[] params = new Object[] { };
public MySQLValidConnectionChecker()
{
try
{
Class oracleConnection = Thread.currentThread().getContextClassLoader().loadClass("com.mysql.jdbc.Connection");
ping = oracleConnection.getMethod("ping", new Class[] { });
}
catch (Exception e)
{
throw new NestedRuntimeException("Unable to resolve ping method:", e);
}
}
public SQLException isValidConnection(Connection c)
{
try
{
Integer status = (Integer) ping.invoke(c, params);
if (status.intValue() < 0)
return new SQLException("ping failed status=" + status);
}
catch (Exception e)
{
log.warn("Unexpected error in ping", e);
}
return null;
}
}