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 OracleValidConnectionChecker
implements ValidConnectionChecker, Serializable
{
private static final long serialVersionUID = -2227528634302168877L;
private static final Logger log = Logger.getLogger(OracleValidConnectionChecker.class);
private Method ping;
private static Object[] params = new Object[] { new Integer(5000) };
public OracleValidConnectionChecker()
{
try
{
Class oracleConnection = Thread.currentThread().getContextClassLoader().loadClass("oracle.jdbc.driver.OracleConnection");
ping = oracleConnection.getMethod("pingDatabase", new Class[] { Integer.TYPE });
}
catch (Exception e)
{
throw new NestedRuntimeException("Unable to resolve pingDatabase method:", e);
}
}
public SQLException isValidConnection(Connection c)
{
try
{
Integer status = (Integer) ping.invoke(c, params);
if (status.intValue() < 0)
return new SQLException("pingDatabase failed status=" + status);
}
catch (Exception e)
{
log.warn("Unexpected error in pingDatabase", e);
}
return null;
}
}