title: Configuring Hibernate to use a Glassfish ConnectionPool
body: <p>After googleing for a whole day, I've seen a lot of discussion on this issue, even a guide which supposedly solves the problem[1], but until now I didn't get to a solution.
  I want to configure my web service, which relies on hibernate 3 to use a connection pool defined on my glassfish open source v3 server. In order to do that, I have configured in my glassfish server a connection pool named TestPool. If ping this connection from the glassfish interface, I get a "Ping Succeeded" message. Associated with this connection pool, I also have a JDBC resource named jdbc/Test.</p>
  
  <p>Back to hibernate, my hibernate.cfg.xml file looks like this:</p>
  
  <pre><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;
  &lt;!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
  
  &lt;hibernate-configuration&gt;
      &lt;session-factory name="java:comp/env/hibernate/SessionFactory"&gt;
           &lt;property name="connection.datasource"&gt;jdbc/Test&lt;/property&gt;
           &lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;
      &lt;/session-factory&gt;
  &lt;/hibernate-configuration&gt;
  </code></pre>
  
  <p>When I run </p>
  
  <pre><code>config.configure("hibernate.cfg.xml");
  </code></pre>
  
  <p>I get this output from hibernate:</p>
  
  <pre><code>INFO [http-thread-pool-8080-(4)] (Configuration.java:2126) - configuring from resource: hibernate.cfg.xml
  
  INFO [http-thread-pool-8080-(4)] (Configuration.java:2145) - Configuration resource: hibernate.cfg.xml
  
  WARN [http-thread-pool-8080-(4)] (DTDEntityResolver.java:73) - recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
  
  INFO [http-thread-pool-8080-(4)] (Configuration.java:2267) - Configured SessionFactory: java:comp/env/hibernate/SessionFactory
  </code></pre>
  
  <p>Then, when I run </p>
  
  <pre><code> config.buildSessionFactory();
  </code></pre>
  
  <p>I get this log:</p>
  
  <pre><code>INFO [http-thread-pool-8080-(4)] (AnnotationBinder.java:532) - Binding entity from annotated class: ....
  
  ...lots of bindings in here...
  
  INFO [http-thread-pool-8080-(4)] (CollectionBinder.java:745) - Mapping collection: ...
  
  ...other mapping collections...
  
  INFO [http-thread-pool-8080-(4)] (Configuration.java:1646) - Hibernate Validator not found: ignoring
  
  INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
  
  INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
  
  INFO [http-thread-pool-8080-(4)] (HibernateSearchEventListenerRegister.java:75) - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
  
  INFO [http-thread-pool-8080-(4)] (NamingHelper.java:49) - JNDI InitialContext properties:{}
  
  INFO [http-thread-pool-8080-(4)] (DatasourceConnectionProvider.java:84) - Using datasource: jdbc/Test
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:117) - Database -&gt;
         name : MySQL
      version : 5.1.58-1ubuntu1
        major : 5
        minor : 1
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:123) - Driver -&gt;
         name : MySQL-AB JDBC Driver
      version : mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
        major : 5
        minor : 1
  
  INFO [http-thread-pool-8080-(4)] (Dialect.java:108) - Using dialect: org.hibernate.dialect.MySQLDialect
  
  INFO [http-thread-pool-8080-(4)] (TransactionFactoryFactory.java:59) - Using default transaction strategy (direct JDBC transactions)
  
  INFO [http-thread-pool-8080-(4)] (TransactionManagerLookupFactory.java:80) - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:179) - Automatic flush during beforeCompletion(): disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:183) - Automatic session close at end of transaction: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:190) - JDBC batch size: 15
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:193) - JDBC batch updates for versioned data: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:198) - Scrollable result sets: enabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:206) - JDBC3 getGeneratedKeys(): enabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:214) - Connection release mode: auto
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:238) - Maximum outer join fetch depth: 2
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:241) - Default batch fetch size: 1
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:245) - Generate SQL with comments: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:249) - Order SQL updates by primary key: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:253) - Order SQL inserts for batching: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:431) - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
  
  INFO [http-thread-pool-8080-(4)] (ASTQueryTranslatorFactory.java:47) - Using ASTQueryTranslatorFactory
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:261) - Query language substitutions: {}
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:266) - JPA-QL strict compliance: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:271) - Second-level cache: enabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:275) - Query cache: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:406) - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:285) - Optimize cache for minimal puts: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:294) - Structured second-level cache entries: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:323) - Statistics: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:327) - Deleted entity synthetic identifier rollback: disabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:343) - Default entity-mode: pojo
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:347) - Named query checking : enabled
  
  INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:351) - Check Nullability in Core (should be disabled when Bean Validation is on): disabled
  
  INFO [http-thread-pool-8080-(4)] (SessionFactoryImpl.java:200) - building session factory
  
  
  INFO [http-thread-pool-8080-(4)] (SessionFactoryObjectFactory.java:109) - Factory name: java:comp/env/hibernate/SessionFactory
  
  INFO [http-thread-pool-8080-(4)] (NamingHelper.java:49) - JNDI InitialContext properties:{}
  
  INFO [http-thread-pool-8080-(4)] (NamingHelper.java:91) - Creating subcontext: hibernate
  
  WARN [http-thread-pool-8080-(4)] (SessionFactoryObjectFactory.java:121) - Could not bind factory to JNDI
  
  javax.naming.NamingException: java:comp namespace cannot be modified
  at com.sun.enterprise.naming.impl.JavaURLContext.createSubcontext(JavaURLContext.java:326)
  at org.hibernate.util.NamingHelper.bind(NamingHelper.java:92)
  </code></pre>
  
  <p>So, for what I've seen, hibernate is correctly using jdbc/Test as the datasource, but when it tries to bind the SessionFactory to java:comp/env/hibernate/SessionFactory, it gets the "javax.naming.NamingException: java:comp namespace cannot be modified".</p>
  
  <p>Am I missing something in the configuration of glassfish?</p>
  
  <p>Related: <a href="https://stackoverflow.com/questions/2508466/how-to-set-up-hibernate-to-use-glassfish-connection-pool">How to set up hibernate to use Glassfish connection pool?</a></p>
  
  <p>[1] <a href="http://woodencircuit.com/?page_id=42" rel="nofollow noreferrer">http://woodencircuit.com/?page_id=42</a></p>