code: public void run() {
  		// need <bean id="..." class="org.esupportail.commons.context.ApplicationContextHolder" />
  		ApplicationContext applicationContext = ApplicationContextHolder.getContext();
  
  		SessionFactory sessionFactory = HibernateUtils.getSessionFactory(applicationContext);
  		boolean participate = HibernateUtils.openSession(sessionFactory);
  
  		try {
  			if (logger.isDebugEnabled()) {
  				logger.debug("Starting new Thread to manage ack with : " + 
  					     " - smid : " + acknowledgment.getSmsId() + 
  					     " - ack status : " + acknowledgment.getSmsStatus());
  			}
  
  			// Send the ack to the business layer 
  			final AckManagerBusiness ackManagerBusiness = (AckManagerBusiness) applicationContext.getBean(ACK_BUSINESS_MGR_BEAN_NAME);
  			ackManagerBusiness.manageAck(acknowledgment);
  
  		// error case, rollback
  		} catch (RuntimeException e) {
  			logger.error("Catching exception in AckManagerThread, now rollback : ", e);
  			throw e;
  		// close the session every time	
  		} finally {
  		    HibernateUtils.closeSession(sessionFactory, participate);
  		}
  	 }
docs: /* (non-Javadoc)
  @see java.lang.Thread#run()