GermanK
GermanK

Reputation: 1686

Configuring Hibernate to use a Glassfish ConnectionPool

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.

Back to hibernate, my hibernate.cfg.xml file looks like this:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory name="java:comp/env/hibernate/SessionFactory">
         <property name="connection.datasource">jdbc/Test</property>
         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    </session-factory>
</hibernate-configuration>

When I run

config.configure("hibernate.cfg.xml");

I get this output from hibernate:

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

Then, when I run

 config.buildSessionFactory();

I get this log:

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 ->
       name : MySQL
    version : 5.1.58-1ubuntu1
      major : 5
      minor : 1

INFO [http-thread-pool-8080-(4)] (SettingsFactory.java:123) - Driver ->
       name : MySQL-AB JDBC Driver
    version : mysql-connector-java-5.1.18 ( Revision: [email protected] )
      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)

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".

Am I missing something in the configuration of glassfish?

Related: How to set up hibernate to use Glassfish connection pool?

[1] http://woodencircuit.com/?page_id=42

Upvotes: 2

Views: 7909

Answers (1)

axtavt
axtavt

Reputation: 242686

Your exception is not related to using Glassfish pool, it's related to JNDI-bound SessionFactory.

If all that you need is to use a Glassfish pool in Hibernate, you don't need to bind SessionFactory to JNDI, just remove name="java:comp/env/hibernate/SessionFactory" and use it as before (with HibernateUtils or something like that).

Regarding the exception itself, it identifies the problem pretty clearly. If you want to obtain session factory from JNDI, try to use some other JNDI namespace, for example, name = "java:hibernate/SessionFactory".

See also:

Upvotes: 4

Related Questions