Problem: Wie kann man aus einer Webanwendung große Mails versenden, ohne das die Anwendung “hängt”?

Lösung: Per AOP jede Mailmethode mit einem Thread ummanteln!

Der Mailadvice:

public class MailAdvice
{
	private static final Logger logger = Logger.getLogger(MailAdvice.class);

	public void fork(final ProceedingJoinPoint point)
	{

		Executors.newSingleThreadExecutor().execute(new Runnable()
		{

			@Override
			public void run()
			{
				logger.info("Forking method execution in a new Thread in MailAdvice for JoinPoint: "+ point);
				try
				{
					point.proceed();

				}catch (Throwable t)
				{
					logger.error(t.getMessage());
				}
			}

		});
	}

}

Der Aspekt in der context.xml



	
		
			
		
	

Der MailService:

public class MailServiceImpl implements MailService
{

	private static final Logger logger = Logger.getLogger(MailServiceImpl.class);

	private JavaMailSender mailSender;

	@Override
	public void sendMail(String[] to, String subject, String text, boolean html,Locale locale,File attachment)
	{
		MimeMessage message = mailSender.createMimeMessage();
		try
		{
			MimeMessageHelper helper 	= new MimeMessageHelper(message,html);
                       ...............
                }
       }

	@Override
	public void sendMailToAdmin(String subject, String text, boolean html,Locale locale)
	{
	         ...............
       }
        @Override
	public void sendMailToXYZ(String subject, String text, boolean html,Locale locale)
	{
	         ...............
       }
}


Tags: