Jboss Hibernate上でのKeep Alive

先日の、Jboss上のHibernateがMySQLにアクセスできなくなるという話。
Jboss上のDBにアクセスできない
一つの解決方法として、Keep Aliveを組み込んでみました。
Jboss上にServletを作成し、起動時での自動起動及び、Threadの無限ループで30分ごとにサーチを掛けるだけの物です。このKeep Aliveを導入するまでは毎日朝、サーバにアクセスしようとするとHibernateがMySQLにアクセスできない現象が発生していましたが、このKeep Aliveを組み込んでからはその現象は解消しました。サーブレット内のコードはこんな感じです。

public class KeepAlive extends HttpServlet {
 private static final long serialVersionUID = 1L;
 static KeepAliveMain t = null;

    public KeepAlive() {
        super();
    }

  public void init(ServletConfig config) throws ServletException {
  t = new KeepAliveMain();
  t.start();
 }

 }
class KeepAliveMain extends Thread{

 public KeepAliveMain() {
  // TODO Auto-generated constructor stub
  super();
 }
 public void run(){
  Logger logger = Logger.getLogger(“mylog”);
  Date d = new Date();
  logger.warn(“”+d+”: “+this.getClass().getName()+” KeepAliveMain(service) started”);
  for (int i=0;;i++){
   d = new Date();
   logger.warn(“”+d+”: KeepAliveMain(service):”+i);
         YearDao yearDao = new YearDao();;
      List<Year> yearList = null;
   yearList = yearDao.searchAll();
   yearList.isEmpty();
   try {
    Thread.sleep(30*60*1000);
   } catch (Exception e){
    e.printStackTrace();
   }
  }
 }
}

GetやPostは実装しないで、init()だけで、localのThreadクラスに起動をかけているだけです。

自分のHackとしてはこれでもいいのですが、平行してネットで現象を調べていくと要は、Hibernateにデフォルトで付属しているコネクションプールは試験的なのもで長時間未使用状態が続くとMySQL(DB)側でコネクションを切断してしまうのにたいして、Hibernate側ではまだコネクションが残っていると考えて問題が発生するようです。
また、Jbossのログにはこんなメッセージが出ています。

09:26:48,260 INFO  [DriverManagerConnectionProvider] Using Hibernate built-in co
nnection pool (not for production use!)

Hibernateを使うのであればコネクションプールはThirdPartyのものを使えということのようです。Hibernateのマニュアルにもそのあたりの記述がありました。
次はこのコネクションプールの設定方法が調査項目になります。