読者です 読者をやめる 読者になる 読者になる

seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

Doma + Play 1.2 の場合の DomaConfig

@gakuzzzz に教えていただいたのですが Play 1.2.x で Doma を使う時は Config クラスに Play1 のクラスローダを伝えるために #getClassHelper() を拡張する必要があるようです。これをやっていないと apt で生成した *Impl.java やら domain クラスが ClassNotFoundException になったりします。

import javax.sql.DataSource;
import org.seasar.doma.jdbc.ClassHelper;
import org.seasar.doma.jdbc.DomaAbstractConfig;
import org.seasar.doma.jdbc.dialect.Dialect;
import play.Play;

public class DBConfig  extends DomaAbstractConfig  {

  @Override
  public DataSource getDataSource() {
    // 省略
    return null;
  }

  @Override
  public Dialect getDialect() {
    // 省略
    return null;
  }

  /**
   * Play1 に対応させるための ClassHelper
   */
  private static class PlayClassHelper implements ClassHelper {
    @Override
    public <T> Class<T> forName(final String className) throws Exception {
      return (Class<T>) Play.classloader.loadApplicationClass(className);
    }
  }

  private static final ClassHelper classHelper = new PlayClassHelper();

  @Override
  public ClassHelper getClassHelper() {
    return classHelper;
  }
}