These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Question: How to use JTA with multiple session factories (on
PostPosted: Fri May 19, 2006 2:13 am 
Newbie

Joined: Fri May 19, 2006 12:24 am
Posts: 3
Hi guys,

I'm facing the scenario coordinating multiple session factories in JTA with Weglogic 8.1 SP5, the database is sybase. In my case, there are multiple databaes existing, so I have to create multiple session factories per the databases. For coordinating them in JTA, I set up multiple xa style database pools in Weblogic and assign them to related session factory in multiple hibernate config files. And I have implemented a interceptor for catching the method needing JTA transaction, the pseudocodes like below:
=========================================================================================
try {
Context ctx = JndiHelper.instance().getContext();
String jtstransaction = "javax.transaction.UserTransaction";

if(JndiHelper.instance().getJndiParam("jta.UserTransaction")!=null){
jtstransaction = JndiHelper.instance().getJndiParam("jta.UserTransaction");
}

//Get the UserTransaction
tx = (UserTransaction)ctx.lookup(jtstransaction);

tx.begin();
Object retObject = method.invoke(target, args);
tx.commit();

return retObject;
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
throw new Exception(e.getCause());
}
}else{
return method.invoke(target, args);
}
=========================================================================================

When I insert data in JTA, there are different exception thrown according to the different sybase XA drivers(one is Jconn another is bea build-in xa driver). When using Jconn driver, it seems like transaction timeout, but I test only with inserting one record, if it runs more than 30 seconds, maybe it's too boring. Then using Bea build-in driver, the exception is unsupported method: Connection.prepareStatement. Why hibernate will invoke it when saving a data? How can I avoid it in my case? Perhaps it's my misunderstanding on hibernate config, please give me some advice on them.

Also some basic information follow below:


Hibernate version:3.1.3

Mapping documents:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd

Name and version of the database you are using:Sybae 12.5

Below is the exception detail information for your reference.

1.Jconn:
[javax.transaction.TransactionRolledbackException: Transaction timed out after 31 seconds
BEA1-00002BA49E6EF4FB0348]
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_JTAConnection_weblogic_jdbc_wrapper_XAConnection_com_sybase_jdbc2_jdbc_SybConnectionProxy_815_WLStub.getAutoCommit(Unknown Source)
at weblogic.jdbc.rmi.SerialConnection_weblogic_jdbc_rmi_internal_ConnectionImpl_weblogic_jdbc_wrapper_JTAConnection_weblogic_jdbc_wrapper_XAConnection_com_sybase_jdbc2_jdbc_SybConnectionProxy_815_WLStub.getAutoCommit(Unknown Source)
at org.hibernate.jdbc.ConnectionManager.isAutoCommit(ConnectionManager.java:185)
at org.hibernate.jdbc.ConnectionManager.isAggressiveRelease(ConnectionManager.java:208)
at org.hibernate.jdbc.ConnectionManager.afterStatement(ConnectionManager.java:264)
at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:480)
at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:218)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1981)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at efom.core.dao.GenericDaoImpl.create(GenericDaoImpl.java:57)

2.Bea build-in:
java.sql.SQLException: [BEA][Sybase JDBC Driver]Unsupported method: Connection.prepareStatement
at weblogic.jdbc.base.BaseExceptions.createException(Unknown Source)
at weblogic.jdbc.base.BaseExceptions.getException(Unknown Source)
at weblogic.jdbc.base.BaseConnection.prepareStatement(Unknown Source)
at weblogic.jdbcx.base.BasePooledConnection.prepareStatement(Unknown Source)
at weblogic.jdbcx.base.BaseConnectionWrapper.prepareStatement(Unknown Source)
at weblogic.jdbc.wrapper.XAConnection.prepareStatement(XAConnection.java:896)
at weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_weblogic_jdbcx_base_BaseConnectionWrapper.prepareStatement(Unknown Source)
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_JTAConnection_weblogic_jdbc_wrapper_XAConnection_weblogic_jdbcx_base_BaseConnectionWrapper.prepareStatement(Unknown Source)
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_JTAConnection_weblogic_jdbc_wrapper_XAConnection_weblogic_jdbcx_base_BaseConnectionWrapper_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:492)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:435)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:430)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)

Thanks,
Amax


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 22, 2006 2:25 am 
Newbie

Joined: Fri May 19, 2006 12:24 am
Posts: 3
Anyone can help me on it?


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 31, 2006 1:14 pm 
Newbie

Joined: Wed May 10, 2006 1:15 pm
Posts: 2
We have experienced the same problem with Weblogic 8 & Oracle. Check the Weblogic JTA setting, and increase the Timeout Seconds to a larger value (under mydomain>services>JTA). Also we found JDBC drivers play an important role, so be caution about the drivers you used.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.