Как правильно восстановить состояние системы после завершения работы в Java с помощью класса Restore?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно восстановить состояние системы после завершения работы в Java с помощью класса Restore?

Сообщение Anonymous »

Проблема:

Я работаю над проектом Java, в котором мне нужно восстановить состояние системы после завершения работы, вызванного событием (например, PowerOut или WindowMalfunction) . При восстановлении системы она должна возобновлять только те события, которые происходят после завершения работы, а не воспроизводить все события с самого начала.
Однако текущая реализация выводит все события с самого начала, даже те, что произошли до отключения. Я хочу, чтобы он возобновился только с точки после события выключения. Я использую сериализацию для сохранения и восстановления состояния системы и реализовал интерфейс Fixable для решения проблем во время восстановления.
Ожидаемое поведение >:

При запуске команды java GreenhouseControls -d dump.out она должна восстановить систему и выводить события только после события, вызвавшего завершение работы. .
Например:

Код: Выделить всё

System restored from dump.out
Restored system state:
Power On: false
Resuming system...
Bing!
Terminate
Фактическое поведение:

Вместо возобновления работы после завершения работы он выводит все события с начала:

Код: Выделить всё

Restored system state:
Power On: false
Resuming system...
Restarting system
Thermostat on night setting
Light is on
Light is off
...
(Outputs everything from the start)
Код:
Вот соответствующая часть кода, показывающая, как я пытаюсь восстановить систему. состояние.

Код: Выделить всё

// Minimal example: GreenhouseControls.java
import java.io.*;

public class GreenhouseControls implements Serializable {
protected boolean light = false;
protected boolean water = false;
protected String thermostat = "Day";
protected boolean fans = false;
protected boolean windowok = true;
protected boolean poweron = true;
private int errorcode;

public interface Fixable {
void fix();
void log();
}

public class PowerOn implements Fixable {
@Override
public void fix() {
poweron = true;
errorcode = 0;
}
@Override
public void log() {
System.out.println("Power restored");
}
}

public int getError() {
return errorcode;
}

public Fixable getFixable(int errorcode) {
if (errorcode == 2) return new PowerOn();
return null;
}

public void shutdown(int errorcode, String errorMessage) {
this.errorcode = errorcode;
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("dump.out"))) {
out.writeObject(this);
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
}
}

Код: Выделить всё

// Minimal example: Restore.java
import java.io.*;

public class Restore {
private GreenhouseControls gc;

public Restore(String filename) {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename))) {
gc = (GreenhouseControls) in.readObject();
System.out.println("System restored from " + filename);
} catch (IOException | ClassNotFoundException e) {
System.out.println("Error during system restore: " + e.getMessage());
e.printStackTrace();
}
}

public void fixAndResume() {
if (gc != null) {
System.out.println("Restored system state:");
System.out.println("Power On: " + gc.poweron);
if (gc.getError() != 0) {
GreenhouseControls.Fixable fixable = gc.getFixable(gc.getError());
fixable.fix();
fixable.log();
}
System.out.println("Resuming system...");
// Instead of resuming all events, it should only resume from after the shutdown
}
}

public static void main(String[] args) {
Restore restore = new Restore("dump.out");
restore.fixAndResume();
}
}
Что я пробовал:
  • Я реализовал Класс Restore, который десериализует объект GreenhouseControls, сохраненный во время завершения работы.
  • Состояние системы восстанавливается правильно, и проблема, вызвавшая завершение работы, устраняется с помощью интерфейса Fixable. Однако программа выводит все события с начала, а не возобновляет работу только с момента, следующего за событием, вызвавшим завершение работы.
< h3>Вопрос:
Как я могу изменить свой класс Restore или системную логику, чтобы при запуске java GreenhouseControls -d dump.out, он возобновляет события только после завершения работы, а не повторяет все события с начала?

Подробнее здесь: https://stackoverflow.com/questions/790 ... tore-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»