{"id":42,"date":"2009-09-11T20:33:16","date_gmt":"2009-09-11T18:33:16","guid":{"rendered":"http:\/\/www.pmannel.de\/wordpress\/?p=42"},"modified":"2010-09-16T20:36:40","modified_gmt":"2010-09-16T18:36:40","slug":"mails-per-aop-aus-der-webanwendung-versenden","status":"publish","type":"post","link":"https:\/\/www.pmannel.de\/wordpress\/?p=42","title":{"rendered":"Mails per AOP aus der Webanwendung versenden"},"content":{"rendered":"<p><strong>Problem:<\/strong> Wie kann man aus einer Webanwendung gro\u00dfe Mails versenden, ohne das die Anwendung \u201ch\u00e4ngt\u201d?<\/p>\n<p><strong>L\u00f6sung: <\/strong>Per AOP jede Mailmethode mit einem Thread ummanteln!<\/p>\n<p>Der Mailadvice:<\/p>\n<pre class=\"brush:java\">\r\npublic class MailAdvice\r\n{\r\n\tprivate static final Logger logger = Logger.getLogger(MailAdvice.class);\r\n\r\n\tpublic void fork(final ProceedingJoinPoint point)\r\n\t{\r\n\r\n\t\tExecutors.newSingleThreadExecutor().execute(new Runnable()\r\n\t\t{\r\n\r\n\t\t\t@Override\r\n\t\t\tpublic void run()\r\n\t\t\t{\r\n\t\t\t\tlogger.info(\"Forking method execution in a new Thread in MailAdvice for JoinPoint: \"+ point);\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tpoint.proceed();\r\n\r\n\t\t\t\t}catch (Throwable t)\r\n\t\t\t\t{\r\n\t\t\t\t\tlogger.error(t.getMessage());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n}\r\n\r\n<\/pre>\n<p>Der Aspekt in der context.xml<\/p>\n<pre class=\"brush:xml\">\r\n<bean id=\"mailAdvice\" class=\"de.pmannel.test.advices.MailAdvice\">\r\n\r\n\t<aop:config>\r\n\t\t<aop:aspect ref=\"mailAdvice\">\r\n\t\t\t<aop:around method=\"fork\" pointcut=\"execution(* de.pmannel.test.service.MailServiceImpl.send*(..))\">\r\n\t\t<\/aop:around>\r\n\t<\/aop:aspect>\r\n<\/aop:config><\/bean>\r\n<\/pre>\n<p>Der MailService:<\/p>\n<pre class=\"brush:java\">\r\npublic class MailServiceImpl implements MailService\r\n{\r\n\r\n\tprivate static final Logger logger = Logger.getLogger(MailServiceImpl.class);\r\n\r\n\tprivate JavaMailSender mailSender;\r\n\r\n\t@Override\r\n\tpublic void sendMail(String[] to, String subject, String text, boolean html,Locale locale,File attachment)\r\n\t{\r\n\t\tMimeMessage message = mailSender.createMimeMessage();\r\n\t\ttry\r\n\t\t{\r\n\t\t\tMimeMessageHelper helper \t= new MimeMessageHelper(message,html);\r\n                       ...............\r\n                }\r\n       }\r\n\r\n\t@Override\r\n\tpublic void sendMailToAdmin(String subject, String text, boolean html,Locale locale)\r\n\t{\r\n\t         ...............\r\n       }\r\n        @Override\r\n\tpublic void sendMailToXYZ(String subject, String text, boolean html,Locale locale)\r\n\t{\r\n\t         ...............\r\n       }\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Problem: Wie kann man aus einer Webanwendung gro\u00dfe Mails versenden, ohne das die Anwendung \u201ch\u00e4ngt\u201d? L\u00f6sung: 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(&#8222;Forking method execution in&#8230; <\/p>\n<div class=\"read-more\"><a href=\"https:\/\/www.pmannel.de\/wordpress\/?p=42\">Weiterlesen<\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[25,26],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-spring","tag-aop","tag-mail"],"_links":{"self":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=42"}],"version-history":[{"count":2,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}