This week's book giveaway is in the
Agile and other Processes
forum.
We're giving away four copies of
The Mikado Method
and have Ola Ellnestam and Daniel Brolund on-line!
See
this thread
for details.
A friendly place for programming greenhorns!
Big Moose Saloon
Search
|
Java FAQ
|
Recent Topics
Register / Login
Win a copy of
The Mikado Method
this week in the
Agile and other Processes
forum!
JavaRanch
»
Java Forums
»
Frameworks
»
Spring
Author
Access hibernate session inside onMessage using ActiveMQ
zabet tyan
Ranch Hand
Joined: Jan 14, 2009
Posts: 32
posted
Oct 27, 2009 11:09:49
0
Hi
Can someone point me to a document/site that could help me figure out how to get hibernate session inside onMessage method of a
MessageListener
?
When I inject a finder in my messageListener, I always get org.hibernate.SessionException: Session is closed!
Here is what I have so far:
public class IncomingMessageHandler implements MessageListener { private IStaticDataFinder finder; public void onMessage(Message message) { Area canada = finder.findAreaByName("Canada"); } public void setFinder(IStaticDataFinder finder) { this.finder = finder; } }
and findAreaByName :
public Area findAreaByName(String name) { Query q = entityManager.getNamedQuery("Area.findAreaByName"); q.setString("name", name); return (Area) q.uniqueResult(); }
and my entityManager code:
public class EntityManager extends HibernateDaoSupport implements IEntityManager { public Query getNamedQuery(String queryName) { //calls HibernateDaoSupport.getSession() return getSession().getNamedQuery(queryName); } }
configuration:
<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" lazy-init="true"> <property name="targetDataSource"> <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>WEB-INF/conf/jdbc.properties</value> <value>WEB-INF/conf/log4j.properties</value> </list> </property> </bean> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingLocations"> <value>classpath:**/hb/*.hbm.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernatespatial.postgis.PostgisDialect </prop> <prop key="hibernate.show_sql"> true </prop> <prop key="hibernate.generate_statistics"> false </prop> </props> </property> <property name="eventListeners"> <map> <entry key="merge"> <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" /> </entry> </map> </property> </bean> <!-- The transaction attributes for the propertyMapManager bean --> <bean id="entityManager" parent="transactionProxyFactoryBean"> <property name="target"> <!-- Entity Manager implementation --> <bean class="com.database.general.EntityManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> <property name="allowCreate"> <value>true</value> </property> </bean> </property> </bean> <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="transactionProxyFactoryBean" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="perform*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="parse*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> <property name="preInterceptors"> <list> <ref bean="hibernateInterceptor"/> </list> </property> </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> <property name="nestedTransactionAllowed" value="true" /> </bean> <!-- JdbcTemplate implementation --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" abstract="false" lazy-init="default" autowire="default" dependency-check="default"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean id="abstractTransactionProxyFactoryBean" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> </bean> <bean id="Queue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0"> <value>Queue</value> </constructor-arg> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" > <ref local="connectionFactory" /> </property> </bean> <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager"> <property name="connectionFactory" ref="connectionFactory" /> </bean> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL"> <value>vm:broker:(tcp://localhost:61616)</value> </property> </bean> <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="Queue" /> <property name="messageListener" ref="incomingMessageHandler" /> <property name="transactionManager" ref="jmsTransactionManager" /> </bean>
zabet tyan
Ranch Hand
Joined: Jan 14, 2009
Posts: 32
posted
Oct 27, 2009 12:47:14
0
Finally after days of beating myself in the head with a hammer
I solved the problem!... only if could read more books
anyways here is the solution, wrap the messageHandler in transactionProxy
<!-- incomingMessageHandler --> <bean id="incomingMessageHandler" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <!-- Entity Manager implementation --> <bean class="com.something.IncomingMessageHandler"> </bean> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> <property name="preInterceptors"> <list> <ref bean="hibernateInterceptor"/> </list> </property> </bean>
Now off to the next problem
I agree. Here's the link:
http://aspose.com/file-tools
subject: Access hibernate session inside onMessage using ActiveMQ
Similar Threads
Hibernate insert fails due to generate key failure
unsatisfied Dependancy exception
spring 2 with hibernate 3
Queue and session is closed! problem
JDBCContext returning TransactionManager as null
All times are in JavaRanch time: GMT-6 in summer, GMT-7 in winter