やりたいこと
JavaのPlayFrameworkでAkkaを用いて定期的にメール送信を行いたいです。
環境
- Java8
- PlayFramework 2.4
現状
Akkaを用いて定期的にメールを送る前段階まで処理はできているのですが、
メールを送信することができずに困っています。
下記、該当コード
①Globalクラス
Java
1public class Global extends GlobalSettings { 2 3 private Cancellable canceller = null; 4 5 @Override 6 public void onStart(Application application) { 7 super.onStart(application); 8 9 SettingMailer settingMailer = new SettingMailer(); 10 ActorRef actor = Akka.system() 11 .actorOf(Props.create(CheckGiftDate.class, settingMailer.getMailer())); 12 13 canceller = Akka.system().scheduler().schedule(FiniteDuration.create(5, TimeUnit.SECONDS), 14 FiniteDuration.create(5, TimeUnit.SECONDS), actor, "do", Akka.system().dispatcher(), null); 15 } 16 17 @Override 18 public void onStop(Application application) { 19 if (canceller != null) { 20 canceller.cancel(); 21 } 22 super.onStop(application); 23 } 24}
②MailerClientを設定するコントローラークラス
Java
1public class SettingMailer extends Controller { 2 3 @Inject 4 MailerClient mailerClient; 5 6 public MailerClient getMailer() { 7 return mailerClient; 8 } 9}
③定期的にメールを送信するクラス
Java
1public class CheckGiftDate extends akka.actor.UntypedActor { 2 3 MailerClient mailerClient; 4 String email = "sample@sample.jp"; 5 6 public CheckGiftDate(MailerClient mailerClient) { 7 this.mailerClient = mailerClient; 8 } 9 10 @Override 11 public void onReceive(Object arg0) throws Exception { 12 new Mail(email); 13 Email email = Mail.remindGift(email); 14 mailerClient.send(email); 15 } 16}
コードのmailerClientがnullになってしまい、send(email)ができない状況です。
@InjectをCotrollerに書かなければならず、なおかつnewでインスタンス化したものは引き継げないらしいです。
なので、今回のコードではnullになってしまっております。
どなたか解決方法がわかる方いらっしゃいましたら、ご教授お願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。