Subversion Repositories SmartDukaan

Rev

Rev 36059 | Rev 36245 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 36059 Rev 36067
Line 7... Line 7...
7
import org.apache.logging.log4j.LogManager;
7
import org.apache.logging.log4j.LogManager;
8
import org.apache.logging.log4j.Logger;
8
import org.apache.logging.log4j.Logger;
9
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.beans.factory.annotation.Qualifier;
10
import org.springframework.beans.factory.annotation.Qualifier;
11
import org.springframework.beans.factory.annotation.Value;
11
import org.springframework.beans.factory.annotation.Value;
12
import org.springframework.context.annotation.Lazy;
-
 
13
import org.springframework.core.io.ByteArrayResource;
12
import org.springframework.core.io.ByteArrayResource;
14
import org.springframework.core.io.InputStreamSource;
13
import org.springframework.core.io.InputStreamSource;
15
import org.springframework.mail.javamail.JavaMailSender;
14
import org.springframework.mail.javamail.JavaMailSender;
16
import org.springframework.mail.javamail.MimeMessageHelper;
15
import org.springframework.mail.javamail.MimeMessageHelper;
17
import org.springframework.scheduling.annotation.Async;
-
 
18
import org.springframework.stereotype.Service;
16
import org.springframework.stereotype.Service;
19
import org.springframework.transaction.annotation.Propagation;
17
import org.springframework.transaction.annotation.Propagation;
20
import org.springframework.transaction.annotation.Transactional;
18
import org.springframework.transaction.annotation.Transactional;
21
import org.springframework.transaction.support.TransactionSynchronization;
-
 
22
import org.springframework.transaction.support.TransactionSynchronizationManager;
-
 
23
 
19
 
24
import javax.mail.internet.InternetAddress;
20
import javax.mail.internet.InternetAddress;
25
import javax.mail.internet.MimeMessage;
21
import javax.mail.internet.MimeMessage;
26
import java.io.File;
22
import java.io.File;
27
import java.io.IOException;
23
import java.io.IOException;
Line 50... Line 46...
50
 
46
 
51
    @Autowired
47
    @Autowired
52
    private MailOutboxRepository mailOutboxRepository;
48
    private MailOutboxRepository mailOutboxRepository;
53
 
49
 
54
    @Autowired
50
    @Autowired
55
    @Lazy
-
 
56
    private MailOutboxService self;
-
 
57
 
-
 
58
    @Autowired
-
 
59
    @Qualifier("mailSender")
51
    @Qualifier("mailSender")
60
    private JavaMailSender sendgridMailSender;
52
    private JavaMailSender sendgridMailSender;
61
 
53
 
62
    @Autowired
54
    @Autowired
63
    @Qualifier("googleMailSender")
55
    @Qualifier("googleMailSender")
Line 186... Line 178...
186
                    mailOutboxRepository.persistAttachment(attachment);
178
                    mailOutboxRepository.persistAttachment(attachment);
187
                }
179
                }
188
            }
180
            }
189
        }
181
        }
190
 
182
 
191
        if (TransactionSynchronizationManager.isSynchronizationActive()) {
-
 
192
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
-
 
193
                @Override
-
 
194
                public void afterCommit() {
-
 
195
                    self.sendMailAsync(mail.getId());
-
 
196
                }
-
 
197
            });
-
 
198
        } else {
-
 
199
            // No active transaction — send immediately async
-
 
200
            self.sendMailAsync(mail.getId());
-
 
201
        }
-
 
202
    }
-
 
203
 
-
 
204
    @Async("mailOutboxExecutor")
-
 
205
    @Transactional(propagation = Propagation.REQUIRES_NEW)
-
 
206
    public void sendMailAsync(long mailOutboxId) {
-
 
207
        try {
-
 
208
            MailOutbox mail = mailOutboxRepository.findById(mailOutboxId);
-
 
209
            if (mail == null) {
-
 
210
                LOGGER.warn("Mail not found for id={}", mailOutboxId);
-
 
211
                return;
-
 
212
            }
-
 
213
            if (!"PENDING".equals(mail.getStatus())) {
-
 
214
                return;
-
 
215
            }
-
 
216
            sendAndUpdateStatus(mail);
-
 
217
        } catch (Exception e) {
-
 
218
            LOGGER.error("Async mail send failed for mailOutboxId={}", mailOutboxId, e);
-
 
219
        }
-
 
220
    }
183
    }
221
 
184
 
222
    @Transactional(propagation = Propagation.REQUIRES_NEW)
185
    @Transactional(propagation = Propagation.REQUIRES_NEW)
223
    public void processPendingMails() {
186
    public void processPendingMails() {
224
        List<MailOutbox> pendingMails = mailOutboxRepository.selectPending();
187
        List<MailOutbox> pendingMails = mailOutboxRepository.selectPending();