【Playframework2.5】JavaAkkaのschedulerが利用できない

投稿者: Anonymous

以下の環境でJavaAkkaを利用した定期処理を実装したいのですが、コンパイルエラーがとれない状況です。

解決法をご存知の方がいらっしゃいましたら手助けしていただけないでしょうか。

・IDE:eclipse Neon.1a Release (4.6.1)
・java:jdk1.8.0_91
・コンパイラ:java 1.8
・フレームワーク:playframework 2.5

package services;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.inject.Singleton;

import akka.actor.ActorSystem;
import play.Logger;
import play.inject.ApplicationLifecycle;

@Singleton
public class MyApplicationGlobal {

    @Inject
    public MyApplicationGlobal(final ActorSystem system, ApplicationLifecycle lifecycle) {

        // サーバ起動時の動作
        Logger.info("----------------------------------- Start application... ------------------------------");

        system.scheduler().schedule(
                Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
                Duration.create(30, TimeUnit.MINUTES),     //Frequency 30 minutes
                null,
                "tick",
                system.dispatcher(),
                null
            );

        lifecycle.addStopHook(() -> {
            Logger.info("----------------------------------- Stop application... ------------------------------");
            return CompletableFuture.completedFuture(null);
        });
    }
}

コンパイルエラー発生箇所・内容
1行目:

この行に複数マーカーがあります
– 型 scala.Function0 を解決できません。必要な .class ファイルから間接的に参照されていま す
– 型 scala.runtime.BoxedUnit を解決できません。必要な .class ファイルから間接的に参照 されています
– 型 scala.concurrent.ExecutionContext を解決できません。必要な .class ファイルから間 接的に参照されています
– 型 scala.concurrent.duration.FiniteDuration を解決できません。必要な .class ファイルか ら間接的に参照されています

22,23行目のDuration:
インポート対象にscala.concurrent.duration.Durationが出てきません

26行目のsystem.dispatcher():

この行に複数マーカーがあります
– 型 ActorSystem のメソッド dispatcher() は存在しない型 ExecutionContextExecutor を 参照しています
– 型 scala.concurrent.ExecutionContextExecutor を解決できません。必要な .class ファイ ルから間接的に参照されています

・build.sbtのライブラリ依存性設定箇所

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  filters,
  evolutions,
  "org.postgresql" % "postgresql" % "9.4.1210",  
  "com.amazonaws" % "aws-java-sdk-ses" % "1.11.51",
  "com.amazonaws" % "aws-java-sdk-s3" % "1.11.51"
)

どうやら全体的にscalaのライブラリを参照できていないようなのですが、なにか必要な記述やライブラリが抜けているのでしょうか。

解決

下記の手順でプロジェクトをインポートしましたが、私の環境ではEclipseのエディタ上でエラーは発生せず、scala.concurrent.duration.Durationの定義元へ移動することもできました。
ご参考ください。

既に同様の手順で環境構築をされていて、エラーが発生している場合はご容赦ください。
(Eclipseは既に1年以上使用しておらず、個人的にはIntelliJを推奨します…)

環境:

  • Windows 10(64bit)
  • sbt 0.13.13
  • JDK 1.8.0_102
  • Scala 2.11.8
    Scala IDEのために必要…?

手順:

  1. Eclipse Neon.1a Release (4.6.1)をインストール
  2. Scala IDE (Eclipse plugin)をインストール
    http://scala-ide.org/
  3. project/plugins.sbtaddSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.0.1")を追加
    https://github.com/typesafehub/sbteclipse
  4. sbt eclipseを実行し、Eclipseプロジェクトへ変換
  5. Eclipseで[File]-[Import...]を選択後、General > Existing Projects into Workspaceでプロジェクトを読み込む
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *