2013-01-14

GAE/J+Slim3+Google Cloud SQL+Hibernate+DbUnit(3)

HibernateConfigServiceはこうなっている
HibernateでDBアクセスするにはorg.hibernate.Sessionを取得する必要がある。
そのための手順は、次のようになる。
  1. Configuration configration = new Configuration().configure();
  2. ServiceRegistryBuilder builder = new ServiceRegistryBuilder().applySettings(configration.getProperties());
  3. ServiceRegistry serviceRegistry = builder.buildServiceRegistry();
  4. SessionFactory sessionFactory = configration.buildSessionFactory(serviceRegistry);
  5. Session session = sessionFactory.openSession();
  6. DBアクセス処理
  7. session.close()
これをクラス化して、DbUnitを使用したテストクラスでも使えるようにしたのが、このHibernateConfigServiceです。


HibernateConfigServiceクラス
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;

 */
public class HibernateConfigService {
    private static HibernateConfigService instance = null;
    private Configuration configration = null;
    private SessionFactory sessionFactory = null;
    private ConnectionProvider connProvider = null;

    protected HibernateConfigService() {
        String configFileName = System.getenv("hibernateConfig");
        if (configFileName == null) {
            configration = new Configuration().configure();
        } else {
            configration = new Configuration().configure(configFileName);
        }
    }

    public static HibernateConfigService getInstance() {
        if(instance == null) {
            instance = new HibernateConfigService();
        }
        return instance;
    }

    /**
     * <p>[ユニットテスト用]{@link HibernateConfigService}インスタンスを取得する</p>
     * @param pConnectionProvider {@link ConnectionProvider}インスタンス
     * @return {@link HibernateConfigService}インスタンス
     */
    public static HibernateConfigService getInstance(final ConnectionProvider pConnectionProvider) {
        if(instance == null) {
            instance = new HibernateConfigService();
        }
        instance.setConnProvider(pConnectionProvider);
        return instance;
    }

    @SuppressWarnings("deprecation")
    public SessionFactory getSessionFactory() {
        if(sessionFactory == null) {
            ServiceRegistryBuilder builder = new ServiceRegistryBuilder()
                .applySettings(configration.getProperties());
            if (connProvider != null) {
                builder = builder.addService(ConnectionProvider.class, connProvider);
            }
            ServiceRegistry serviceRegistry = builder.buildServiceRegistry();
            sessionFactory = configration.buildSessionFactory(serviceRegistry);
        }
        return sessionFactory;
    }

    private void setConnProvider(ConnectionProvider pConnProvider) {
        this.connProvider = pConnProvider;
    }

    public Configuration getConfigration() {
        return this.configration;
    }
}

0 件のコメント: