Search...
FAQs
Subscribe
Pie
FAQs
Recent topics
Flagged topics
Hot topics
Best topics
Search...
Search within Spring
Search Coderanch
Advance search
Google search
Register / Login
Post Reply
Bookmark Topic
Watch Topic
New Topic
programming forums
Java
Mobile
Certification
Databases
Caching
Books
Engineering
Micro Controllers
OS
Languages
Paradigms
IDEs
Build Tools
Frameworks
Application Servers
Open Source
This Site
Careers
Other
Pie Elite
all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Campbell Ritchie
Jeanne Boyarsky
Ron McLeod
Paul Clapham
Liutauras Vilda
Sheriffs:
paul wheaton
Rob Spoor
Devaka Cooray
Saloon Keepers:
Stephan van Hulst
Tim Holloway
Carey Brown
Frits Walraven
Tim Moores
Bartenders:
Mikalai Zaikin
Forum:
Spring
Access hibernate session inside onMessage using ActiveMQ
zabet tyan
Ranch Hand
Posts: 32
posted 14 years ago
Number of slices to send:
Optional 'thank-you' note:
Send
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
Posts: 32
posted 14 years ago
Number of slices to send:
Optional 'thank-you' note:
Send
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
Don't get me started about those stupid
light bulbs
.
reply
reply
Bookmark Topic
Watch Topic
New Topic
Boost this thread!
Similar Threads
Queue and session is closed! problem
Hibernate insert fails due to generate key failure
JDBCContext returning TransactionManager as null
unsatisfied Dependancy exception
Dirty Checking not occuring.
More...