Hi gnodet,
Iam attaching my complete example(most of the configuration i took from
one of the threads http://forum.springframework.org/showthread.php?t=32063)
Please see that iam using sessionFactory.getCurrentSession() as it is
said in the documentation this is used to associate a session object with
JTATransaction(If JTA is enabled)
My question is can i use session object like this across multiple
threads, but it is said that session object is not thread safe(but here iam
using JTATransaction) little bit confused.
It will be a great help for me if you look into my code and clarify.
Thanks a lot in advance.
########## spring.xml ###########
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- XID factory -->
<bean id="xidFactory"
class="org.apache.geronimo.transaction.manager.XidFactoryImpl" />
<!-- Transaction log -->
<bean id="transactionLog" class="org.jencks.factory.HowlLogFactoryBean">
<property name="logFileDir" value="./log/txlog"/>
<property name="xidFactory" ref="xidFactory"/>
</bean>
<!-- #### Transaction Manager #### -->
<bean id="transactionContextManager"
class="org.jencks.factory.TransactionContextManagerFactoryBean"
abstract="false" singleton="true"
lazy-init="default" autowire="default"
dependency-check="default">
<property name="transactionLog" ref="transactionLog"/>
</bean>
<bean id="userTransaction"
class="org.jencks.factory.GeronimoTransactionManagerFactoryBean"
abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default" />
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager"
abstract="false" singleton="true" lazy-init="default"
autowire="default"
dependency-check="default">
<property name="userTransaction" ref="userTransaction" />
</bean>
<!-- #### Connection Manager #### -->
<bean id="connectionTracker"
class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator"/>
<bean id="connectionManager"
class="org.jencks.factory.ConnectionManagerFactoryBean">
<property name="transactionSupport">
<bean class="org.jencks.factory.XATransactionFactoryBean">
<property name="useTransactionCaching" value="true" />
<property name="useThreadCaching" value="true" />
</bean>
</property>
<property name="poolingSupport">
<bean class="org.jencks.factory.SinglePoolFactoryBean">
<property name="maxSize" value="2" />
<property name="minSize" value="1" />
<property name="blockingTimeoutMilliseconds" value="60"
/>
<property name="idleTimeoutMinutes" value="60" />
<property name="matchOne" value="true" />
<property name="matchAll" value="true" />
<property name="selectOneAssumeMatch" value="true" />
</bean>
</property>
<property name="connectionTracker" ref="connectionTracker"/>
</bean>
<!-- Datasource and Hibernate setup: -->
<bean id="ta20dbMCF"
class="org.jencks.tranql.XAPoolDataSourceMCF" lazy-init="true">
<property name="driverName" value="com.mysql.jdbc.Driver" />
<property name="user" value="root" />
<property name="password" value="" />
<property name="url" value="jdbc:mysql://localhost/test" />
</bean>
<bean id="ta20dbDataSource" lazy-init="true"
class="org.springframework.jca.support.LocalConnectionFactoryBean">
<property name="managedConnectionFactory">
<ref local="ta20dbMCF"/>
</property>
<property name="connectionManager">
<ref bean="connectionManager"/>
</property>
</bean>
<bean id="ta20dbHibernateProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop
key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop
key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>
</props>
</property>
</bean>
<bean id="ta20dbMappingResources" class="java.util.Vector">
<constructor-arg>
<list>
<value>com/epe/Honey.hbm.xml</value>
<value>com/epe/HoneyExtraInfo.hbm.xml</value>
</list>
</constructor-arg>
</bean>
<bean id="ta20dbSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="ta20dbDataSource"/>
</property>
<property name="hibernateProperties">
<ref bean="ta20dbHibernateProperties" />
</property>
<!-- OR mapping files. -->
<property name="mappingResources" ref="ta20dbMappingResources"/>
<property name="jtaTransactionManager">
<ref bean="userTransaction"/>
</property>
</bean>
<bean id="myEpe" class="com.epe.MyEPE">
<property name="sessionFactory" ref="ta20dbSessionFactory"/>
<property name="transactionManager" ref="txManager"/>
</bean>
</beans>
######## MyEPE.java #########
package com.epe;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class MyEPE{
private SessionFactory sessionFactory;
private PlatformTransactionManager transactionManager;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory=sessionFactory;
}
public void execute(){
Honey forestHoney = new Honey();
forestHoney.setName("forest honey");
forestHoney.setTaste("very sweet");
Honey countryHoney = new Honey();
countryHoney.setName("countryi honey");
countryHoney.setTaste("tasty");
DefaultTransactionDefinition definition=new
DefaultTransactionDefinition();
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus
status=transactionManager.getTransaction(definition);
try{
Thread arr[]=new Thread[100];
for(int i=0;i<100;i++){
Honey obj = new Honey();
obj.setName("Honey"+i);
arr[i]= new AddRule(sessionFactory,obj);
}
for(int i=0;i<100;i++)
arr[i].start();
for(int i=0;i<100;i++)
arr[i].join();
Session tmp=((AddRule)arr[0]).getSession();
System.out.println("Conn Status before
commit/rollback:"+tmp.isOpen());
transactionManager.commit(status);
System.out.println("Conn Status after
commit/rollback:"+tmp.isOpen());
}catch(Exception e){
e.printStackTrace();
}
}
public PlatformTransactionManager getTransactionManager() {
return transactionManager;
}
public void setTransactionManager(PlatformTransactionManager
transactionManager) {
this.transactionManager = transactionManager;
}
}
########## BaseRule.java #########
package com.epe;
import org.hibernate.Session;
public abstract class BaseRule extends Thread {
Session session;
BaseRule(Session session){
this.session=session;
}
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
}
######### AddRule.java ######
package com.epe;
import org.hibernate.SessionFactory;
public class AddRule extends BaseRule {
Honey honey;
AddRule(SessionFactory sessionFactory,Honey data){
super(sessionFactory.getCurrentSession());
this.honey=data;
}
public void run(){
try {
session.persist(honey);
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}
gnodet wrote:
>
> I'm not sure what you are trying to do, but you can't expect a single
> transaction to be splitted across different threads at the same time.
> You can find some example configurations using jencks in the source
> tree:
>
> http://svn.jencks.codehaus.org/browse/jencks/trunk/jencks/src/test/resources/org/jencks
>
> On 9/25/07, Arif Mohd <[EMAIL PROTECTED]> wrote:
>>
>> Hi gnodet,
>>
>> It will be a great help for me if you could help me with small code
>> snippet. Iam entirely new to this technologies and iam trying to evaluate
>> how i can make use of jencks.
>>
>> As you said iam having a controller entity which will be creating new
>> threads(hybernate sessions) parallely and i want to make use of jencks
>> here
>> in controller entity for maintaining distributed transactions.
>>
>> Just help me how can i do stand alone setup for jencks(with out any
>> app server stuff) with resource adapters.
>>
>> gnodet wrote:
>> >
>> > Transactions usually occur within a single thread, even when
>> > distributed. You'd have to sequence your processing somehow...
>> >
>> > On 9/25/07, Arif Mohd <[EMAIL PROTECTED]> wrote:
>> >>
>> >> Hi,
>> >>
>> >> Iam new to this jencks and even to hybernate. Just i want to know
>> can
>> >> i
>> >> integrate jencks with hybernate. My requirement is there are 3
>> threads, 2
>> >> of
>> >> them are hybernate session threads doing some DB operation and one
>> more
>> >> thread is using ActiveMQ. I want to make use of jenks for maintaing
>> >> distributed transactions over these threads
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/Does-jencks-canbe-integrated-with-hybernate--tf4514305.html#a12875825
>> >> Sent from the jencks - user mailing list archive at Nabble.com.
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe from this list please visit:
>> >>
>> >> http://xircles.codehaus.org/manage_email
>> >>
>> >>
>> >
>> >
>> > --
>> > Cheers,
>> > Guillaume Nodet
>> > ------------------------
>> > Blog: http://gnodet.blogspot.com/
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe from this list please visit:
>> >
>> > http://xircles.codehaus.org/manage_email
>> >
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Does-jencks-canbe-integrated-with-hybernate--tf4514305.html#a12876311
>>
>> Sent from the jencks - user mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list please visit:
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
>
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
> http://xircles.codehaus.org/manage_email
>
>
>
--
View this message in context:
http://www.nabble.com/Does-jencks-canbe-integrated-with-hybernate--tf4514305.html#a13014241
Sent from the jencks - user mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email