J'écris le programme RaspberryPi pour exécuter des tâches à un moment donné. J'ai écrit TaskManager qui conserve toutes les tâches dans Map (awaitingTasks) synchronisé et les gère. Une de ses méthodes estComment est-ce que je me souviens de la méthode afin que je puisse l'utiliser quand le serveur redémarre?
addInTimeTasks (...)
public static int addInTimeTask(Callable task, DateTime time) {
synchronized (awaitingTasks) {
final int id = assignNewId();
awaitingTasks.put(id, scheduledThreadPool.schedule(new CallableTask(task, new CallableTask.MyCallback() {
@Override
public void onFinish() {
awaitingTasks.remove(id);
}
}), TimeDiffCalc.secToDate(time), TimeUnit.SECONDS));
return id;
}
}
comme vous pouvez le voir Tâche (penser à ce qui en fait la classe si elle a d'autres attributs) avoir son propre ID, la date et la méthode qu'il exécute .
Je veux gérer la situation lorsque le serveur redémarre et que toutes les tâches à temps disparaissent. Je pensais à tenir des tâches dans la base de données. Je peux contenir TaskID et Date mais comment déterminer la méthode que la tâche donnée devrait exécuter?
J'aime la flexibilité de cette méthode parce que je peux rendre n'importe quelle méthode exécutable dans le temps. Par exemple est ici méthode de la classe LED RVB (qui ont des méthodes mutltiple qui peuvent être exécutées dans le temps)
public int lightLed(final LedColor color, DateTime dateTime){
return TaskManager.addInTimeTask(new Callable<Void>() {
public Void call() throws Exception {
//here is code that makes led lighting
return null;
}
},dateTime);
}
Ce qui est venu dans mon esprit était d'attribuer à chaque ID de méthode, puis obtenir la méthode par id mais je ne pense que c'est passable. Je parierais qu'il y avait beaucoup de questions avec le même problème mais je ne peux pas simplement les trouver. Je ne peux pas spécifier la question correctement (donc s'il vous plaît le changer)
Merci!
Vous souhaitez conserver vos données. Pourrait être int un fichier texte sérialisé pour le garder simple, ou une base de données. Insérez vos tâches dessus et marquez-les (ou supprimez-les) quand elles sont terminées. Lorsque le système démarre, la première chose à faire est de charger le tableau avec les tâches de fichier/base de données. – danielbathke
Je ne pense pas que nous nous sommes compris. Chaque classe a plusieurs méthodes qui peuvent être exécutées à temps. Lorsque j'ajoute une tâche, je remplace une méthode. Et le problème est que j'ai besoin d'avoir un gestionnaire de cette méthode particulière enregistrée quelque part.Ainsi, lorsque les serveurs reviendront, ils récupéreront la méthode appropriée. –
Lorsque vous sérialiser, vous allez enregistrer le type de classe, vous pouvez alors accéder à votre méthode. Vous devez enregistrer le type de classe, il sera donc possible de le recréer. – danielbathke