title: Hibernate connection pool provider for Cloud SQL
body: <p>I'm using Hibernate in combination with GAE and Cloud SQL.</p>
  
  <p>Everything works fine, but when an instance is waken up, sometimes it takes a long time to connect to the database (up to 15s)</p>
  
  <p>In the log I see that the most time it is Hibernate establishing a connection:</p>
  
  <pre><code>   I 17:46:35.936 org.hibernate.cfg.Configuration doConfigure: HHH000041: Configured SessionFactory: null
     W 17:46:36.209 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000402: Using Hibernate built-in connection pool (not for production use!)
     I 17:46:36.243 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000115: Hibernate connection pool size: 0
     I 17:46:36.244 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000006: Autocommit mode: false
     I 17:46:36.244 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000401: using driver [com.mysql.jdbc.GoogleDriver] at URL [jdbc:google:mysql://database?user=someUser]
     I 17:46:36.245 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure: HHH000046: Connection properties: {}
     I 17:46:45.356 org.hibernate.dialect.Dialect &lt;init&gt;: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
  </code></pre>
  
  <p>Here is the code producing this:</p>
  
  <pre><code>properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.GoogleDriver");
  properties.put("hibernate.connection.url", "jdbc:google:mysql://" + SQL_INSTANCE + "/" + DATABASE + "?user=someUser");
  
  // disable schema check
  properties.put("hibernate.hbm2ddl.auto", ""); // disable
  properties.put("hibernate.show_sql", false);            
  
  // single session per request/thread
  properties.put("hibernate.connection.pool_size", 0);
  properties.put("hibernate.current_session_context_class", "thread");
  
  Configuration cfg = new Configuration();
  cfg.configure("/META-INF/hibernate.cfg.xml");
  cfg.addProperties(properties);
  
  sessionFactory = cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());
  </code></pre>
  
  <p>Following method provides the session</p>
  
  <pre><code>public Session getSession() {
  
          Session session;
          try {
              session = sessionFactory.getCurrentSession();
          }
          catch (org.hibernate.HibernateException he) {
              log.info("Opening new hibernate session.");
              session = sessionFactory.openSession();
          }
  
          return session;
      }
  </code></pre>
  
  <p>I'm setting the connection pool size to 0 (as recommended), but apparently Hibernates build in connection pool manager is used.</p>
  
  <p>My question is, which connection pool manager should be used in this setup, and what else can be done to speed up connection time. </p>
  
  <p>What are the best practises for this kind of setup, as I can not find anything but some trivial examples.</p>