Reputation: 1686
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
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