[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - hibernate getCurrentSession() with JTA

stjanda do-not-reply at jboss.com
Mon Dec 3 17:30:01 EST 2007


I am trying to have Jboss (4.2.2) and hibernate work together with JTA.  I deploy my hibernate classes via a .har file.  I've seen this issue mentioned in some threads, but never resolved.  I feel like I am just missing a simple setting or something.  Any help would be appreciated.

I have great success using the following:
ctx = new InitialContext();
factory  = (SessionFactory)ctx.lookup("java:/hibernate/SessionFactory");
Session hSess = factory.openSession();
Transaction tx = hSess.beginTransaction();

But I cannot get the following to work:
Session hSess = factory.getCurrentSession();

The error thrown is:
org.hibernate.HibernateException: Unable to locate current JTA transaction at org.hibernate.context.JTASessionContext.currentSession(JTASessionContext.java:61) at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:544) at test.TestServlet.processRequest(TestServlet.java:57) at test.TestServlet.doGet(TestServlet.java:129) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:393) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:595) 

Obvously no transaction is obtained from the TransactionManager, but why?  I thought that was the point of the method call to deal with opening the session for you.

I have the following properties setup.

  | <mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
  |         <depends>jboss:service=Naming</depends>
  |         <depends>jboss:service=TransactionManager</depends>        
  |         <attribute name="DatasourceName">java:/MyDS</attribute>
  |         <attribute name="Dialect">org.hibernate.dialect.Oracle9Dialect</attribute>
  |         <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute>
  |         <attribute name="Password">xxx</attribute>
  |         <attribute name="Username">xxx</attribute>        
  |         <attribute name="CacheProviderClass">org.hibernate.cache.NoCacheProvider</attribute>       
  |         <attribute name="QueryCacheEnabled">false</attribute>
  |         <attribute name="MinimalPutsEnabled">false</attribute>
  |         <attribute name="MaxFetchDepth">3</attribute>       
  |         <attribute name="ShowSqlEnabled">true</attribute>        
  |     </mbean>
  | 
  | hibernate.cfg.xml (i don't think this is actually needed):
  | <hibernate-configuration>
  |     <session-factory>
  |         <property name="current_session_context_class">jta</property>
  |         <property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
  |         <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>        
  |     </session-factory>
  | </hibernate-configuration>
  | 
  | datasource config:
  | <xa-datasource>
  |     <jndi-name>MyDS</jndi-name>
  |     <track-connection-by-tx/>
  |     <isSameRM-override-value>false</isSameRM-override-value>
  |     <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
  |     <xa-datasource-property name="URL">jdbc:oracle:oci8:@db</xa-datasource-property>
  |     <!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
  |     <!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
  |     
  |    <!-- Oracles XA datasource cannot reuse a connection outside a transaction once enlisted in a global transaction and vice-versa -->
  |     <no-tx-separate-pools/>
  | 
  |       <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
  |       <metadata>
  |          <type-mapping>Oracle9i</type-mapping>
  |       </metadata>
  |   </xa-datasource>
  | 
Hibernate log after server starts reads ok by my interpretation:
2007-12-03 16:44:41,580 INFO  [org.hibernate.cfg.Environment] Hibernate 3.2.4.sp1
2007-12-03 16:44:41,595 INFO  [org.hibernate.cfg.Environment] hibernate.properties not found
2007-12-03 16:44:41,595 INFO  [org.hibernate.cfg.Environment] Bytecode provider name : javassist
2007-12-03 16:44:41,611 INFO  [org.hibernate.cfg.Environment] using JDK 1.4 java.sql.Timestamp handling
2007-12-03 16:44:41,705 INFO  [org.hibernate.cfg.Configuration] Searching for mapping documents in jar: my.har
2007-12-03 16:44:41,720 INFO  [org.hibernate.cfg.Configuration] Found mapping document in jar: beans/tn3270_inactivity.hbm.xml
2007-12-03 16:44:41,751 DEBUG [org.hibernate.util.DTDEntityResolver] trying to resolve system-id [http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd]
2007-12-03 16:44:41,751 DEBUG [org.hibernate.util.DTDEntityResolver] recognized hibernate namespace; attempting to resolve on classpath under org/hibernate/
2007-12-03 16:44:41,767 DEBUG [org.hibernate.util.DTDEntityResolver] located [http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd] in classpath
2007-12-03 16:44:42,017 INFO  [org.hibernate.cfg.HbmBinder] Mapping class: beans.InactiveDeviceBean -> tn3270.inactivity
2007-12-03 16:44:42,205 INFO  [org.hibernate.util.NamingHelper] JNDI InitialContext properties:{}
2007-12-03 16:44:42,220 INFO  [org.hibernate.connection.DatasourceConnectionProvider] Using datasource: java:/MyDS
2007-12-03 16:44:42,611 DEBUG [org.hibernate.cfg.SettingsFactory] could not get database version from JDBC metadata
2007-12-03 16:44:42,611 INFO  [org.hibernate.cfg.SettingsFactory] RDBMS: Oracle, version: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
2007-12-03 16:44:42,611 INFO  [org.hibernate.cfg.SettingsFactory] JDBC driver: Oracle JDBC driver, version: 9.2.0.1.0
2007-12-03 16:44:42,642 INFO  [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.Oracle9Dialect
2007-12-03 16:44:42,642 WARN  [org.hibernate.dialect.Oracle9Dialect] The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect or Oracle10gDialect instead
2007-12-03 16:44:42,642 INFO  [org.hibernate.transaction.TransactionFactoryFactory] Transaction strategy: org.hibernate.transaction.JTATransactionFactory
2007-12-03 16:44:42,642 INFO  [org.hibernate.util.NamingHelper] JNDI InitialContext properties:{}
2007-12-03 16:44:42,642 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
2007-12-03 16:44:42,658 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] instantiated TransactionManagerLookup
2007-12-03 16:44:42,658 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
2007-12-03 16:44:42,658 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] instantiated TransactionManagerLookup
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Automatic flush during beforeCompletion(): enabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Automatic session close at end of transaction: enabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] JDBC batch size: 15
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] JDBC batch updates for versioned data: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Scrollable result sets: enabled
2007-12-03 16:44:42,658 DEBUG [org.hibernate.cfg.SettingsFactory] Wrap result sets: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] JDBC3 getGeneratedKeys(): disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Connection release mode: after_statement
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Maximum outer join fetch depth: 3
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Default batch fetch size: 1
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Generate SQL with comments: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Order SQL updates by primary key: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Order SQL inserts for batching: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2007-12-03 16:44:42,658 INFO  [org.hibernate.hql.ast.ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Query language substitutions: {}
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] JPA-QL strict compliance: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Second-level cache: enabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Query cache: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Cache provider: org.hibernate.cache.NoCacheProvider
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Optimize cache for minimal puts: disabled
2007-12-03 16:44:42,658 INFO  [org.hibernate.cfg.SettingsFactory] Structured second-level cache entries: disabled
2007-12-03 16:44:42,673 INFO  [org.hibernate.cfg.SettingsFactory] Echoing all SQL to stdout
2007-12-03 16:44:42,673 INFO  [org.hibernate.cfg.SettingsFactory] Statistics: disabled
2007-12-03 16:44:42,673 INFO  [org.hibernate.cfg.SettingsFactory] Deleted entity synthetic identifier rollback: disabled
2007-12-03 16:44:42,673 INFO  [org.hibernate.cfg.SettingsFactory] Default entity-mode: pojo
2007-12-03 16:44:42,673 INFO  [org.hibernate.cfg.SettingsFactory] Named query checking : enabled
2007-12-03 16:44:42,720 INFO  [org.hibernate.impl.SessionFactoryImpl] building session factory
2007-12-03 16:44:42,720 DEBUG [org.hibernate.impl.SessionFactoryImpl] Session factory constructed with filter configurations : {}
2007-12-03 16:44:42,720 DEBUG [org.hibernate.impl.SessionFactoryImpl] instantiating session factory with properties: {hibernate.cache.use_minimal_puts=false, hibernate.transaction.flush_before_completion=true, hibernate.transaction.auto_close_session=true, hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider, hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup, hibernate.dialect=org.hibernate.dialect.Oracle9Dialect, hibernate.cache.use_query_cache=false, hibernate.max_fetch_depth=3, hibernate.connection.agressive_release=true, hibernate.connection.username=xxx, hibernate.connection.datasource=java:/MyDS, hibernate.show_sql=true, hibernate.connection.password=antelope, hibernate.connection.release_mode=after_statement, hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory}
2007-12-03 16:44:43,064 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] initializing class SessionFactoryObjectFactory
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] registered: 8a1f66ba16a1f7d70116a1f7d9380000 (unnamed)
2007-12-03 16:44:43,080 INFO  [org.hibernate.impl.SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryImpl] instantiated session factory
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryImpl] obtaining JTA TransactionManager
2007-12-03 16:44:43,080 INFO  [org.hibernate.util.NamingHelper] JNDI InitialContext properties:{}
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryImpl] Checking 0 named HQL queries
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryImpl] Checking 0 named SQL queries
2007-12-03 16:44:43,080 DEBUG [org.hibernate.impl.SessionFactoryImpl] Returning a Reference to the SessionFactory

Any ideas?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4110031#4110031

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4110031




More information about the jboss-user mailing list