Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.philipgloyne.interceptor;
- import org.hibernate.FlushMode;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.springframework.dao.DataAccessResourceFailureException;
- import org.springframework.orm.hibernate3.SessionFactoryUtils;
- import org.springframework.orm.hibernate3.SessionHolder;
- import org.springframework.transaction.support.TransactionSynchronizationManager;
- import org.springframework.ws.context.MessageContext;
- import org.springframework.ws.server.EndpointInterceptor;
- public class OpenSessionInServiceCall implements EndpointInterceptor {
- private final SessionFactory sessionFactory;
- private final FlushMode flushMode = FlushMode.MANUAL;
- public OpenSessionInServiceCall(final SessionFactory sessionFactory) {
- super();
- this.sessionFactory = sessionFactory;
- }
- @Override
- public boolean handleFault(final MessageContext messageContext, final Object endpoint) {
- closeSession();
- return true;
- }
- @Override
- public boolean handleRequest(final MessageContext messageContext, final Object endpoint) throws Exception {
- final Session session = getSession(this.sessionFactory);
- TransactionSynchronizationManager.bindResource(this.sessionFactory, new SessionHolder(session));
- return true;
- }
- @Override
- public boolean handleResponse(final MessageContext messageContext, final Object endpoint) {
- closeSession();
- return true;
- }
- protected Session getSession(final SessionFactory sessionFactory) throws DataAccessResourceFailureException {
- final Session session = SessionFactoryUtils.getSession(sessionFactory, true);
- session.setFlushMode(this.flushMode);
- return session;
- }
- private void closeSession() {
- final SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(this.sessionFactory);
- SessionFactoryUtils.closeSession(sessionHolder.getSession());
- }
- }
Add Comment
Please, Sign In to add comment