title: Spring Transaction - noRollbackFor won't commit when exception occurs
body: <p>I want that if i get an E-Mail Exception, to NOT rollback the transaction.</p>
  
  <p>I am using <code>HibernateTransactionManager</code> and </p>
  
  <pre><code>set  property name="nestedTransactionAllowed" value="true"
  </code></pre>
  
  <p>because i have nested transactions.</p>
  
  <p>Also because i call <code>this.getService()</code> i have set</p>
  
  <p><code>lookup-method name="getService" bean="enrollmentProcessorService"</code> . </p>
  
  <p>This way i should get the Spring Proxy.</p>
  
  <p>But if exceptions occurs, the transaction is still rolledback.
  my code looks like this:</p>
  
  <pre><code>@Override
  @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
  public void processConfirmation() throws SystemException {
          //do something
          this.getService().processConfirmationData(as400ContractId);
  
  
  }
  @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {MailException.class})
  public void processConfirmationData(final long as400ContractDataId) throws SystemException {
      final AS400ContractData as400ContractData = this.readAS400ContractData(as400ContractDataId, false);
  
      this.populateEnrollmentOptionAnswers(as400ContractData.getContractData());
  
      final PersonalData personalData = this.readPersonalData(as400ContractData.getContractData()
              .getEpiphanyPersonalData().getPersonalData().getId(), true);
  
      try {
          personalData.setConfirmMailSent(true);
          as400ContractData.getContractData().getEpiphanyPersonalData().getPersonalData().setConfirmMailSent(true);
          this.personalDataDAO.flush();
          this.emailService.sendConfirmationMailToLOI(as400ContractData); //commit if exception is thrown here
      } catch (final DataAccessException dae) {
          LOGGER.error(CANNOT_UPDATE_PERSONAL_DATA_OBJECT, dae);
          throw new SystemException(StringUtils.EMPTY, CANNOT_UPDATE_PERSONAL_DATA_OBJECT, dae);
      } catch (final MessagingException e) {
          LOGGER.error(CANNOT_SEND_CONFIRMATION_EMAIL, e);
          throw new SystemException(StringUtils.EMPTY, CANNOT_SEND_CONFIRMATION_EMAIL, e);
      } catch (final MailException e) {
          Throwable rootCause = e.getRootCause();
          System.out.println("caught");
  </code></pre>