java.lang.ClassCastException: models.Task нельзя привести к моделям. Задача в Play Framework
Я создал очередь заданий в Play Framework, используя актеров Akka, я запускаю систему акторов из глобального объекта. Актер JobManager (который показан ниже) проверяет базу данных каждую минуту и, если есть незавершенное задание, отправляет сообщение актеру Worker для его обработки. Под этим вы можете увидеть мою модель задачи.
case class CheckDatabase()
class JobManager extends Actor {
def receive = { case CheckDatabase() => CheckIt }
def CheckIt = {
val allTasks: List[Task] = new Model.Finder(classOf[String], classOf[Task]).all()
val taskBuffer = new ArrayBuffer[Boolean]
for(i <- 0 until allTasks.size){ taskBuffer += allTasks.get(i).isRunning }
if(taskBuffer.forall(taskIsRunning => taskIsRunning == false)){
val nextTask = nextOntheLine
if(nextTask != null ){
val worker = context.system.actorOf(Props[Worker], name = nextTask.id)
worker ! StartWorking(nextTask)
} else {
println("Status: idle...")
}
}
}
def nextOntheLine: Task = {
val tasks = new Model.Finder(classOf[String], classOf[Task])
.where
.eq("isDone", false)
.eq("isCancelled", false)
.eq("isRunning", false)
.orderBy("uploadDate asc")
.findList()
if(tasks.size > 0){
tasks.get(0)
} else {
null
}
}
}
@Entity
public class Task extends Model {
@Id
public String id;
public String email;
public boolean isDone;
public void setIsDone(boolean _isdone){
isDone = _isdone;
}
public boolean isRunning;
public void setIsRunning(boolean _isrunning){
isRunning = _isrunning;
}
public boolean isCancelled;
public void setIsCancelled(boolean _iscancelled){
isCancelled = _iscancelled;
}
@Formats.DateTime(pattern="hh:mm:ss, dd/MM/yyyy")
public Date uploadDate = new Date();
}
Он начинает работать отлично, когда я отправляю запросы, запускает задания и завершает их, но во время обработки задания (при проверке базы данных с помощью JobManager) я получаю java.lang.ClassCastException: models.Task cannot be cast to models.Task
ошибка. Как вы можете видеть, актеры написаны на Scala, а моя модель написана на Java. Может ли это быть вызвано этим?
1 ответ
Я сделал еще один класс на Java и переписал все методы внутри JobManager
как статические методы. Затем я импортировал их в код Scala, и проблема была решена. Кажется, проблема в том, что это был проект Java, и модели работают в соответствии с этим.