質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

1回答

1990閲覧

PlayFrameworkで定期メールを送りたいがエラーで送信出来ない【Java】

sequence

総合スコア29

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2017/01/17 14:09

編集2022/01/12 10:55

やりたいこと

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になってしまっております。

どなたか解決方法がわかる方いらっしゃいましたら、ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

もし、SettingMailerがMailerClientを返すだけのコントローラだとするならば、わざわざインスタンスを作成せずに以下のようにGlobalでapplication.injector().instanceOf(MailerClient.class)で、直接MailerClientを取得すればよいと思います。

public class Global extends GlobalSettings { private Cancellable canceller = null; @Override public void onStart(Application application) { super.onStart(application); MailerClient mailerClient = application.injector().instanceOf(MailerClient.class); ActorRef actor = Akka.system() .actorOf(Props.create(CheckGiftDate.class, mailerClient)); canceller = Akka.system().scheduler().schedule(FiniteDuration.create(5, TimeUnit.SECONDS), FiniteDuration.create(5, TimeUnit.SECONDS), actor, "do", Akka.system().dispatcher(), null); } }

投稿2017/01/19 06:29

makotribe

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問