Ограничения

Некоторые объекты Java, например, объекты класса BufferedImage, не могут быть сериализованы. Переменные таких типов должны быть исключены из стандартного механизма сериализации, используемого при сохранении состояния модели. Если же вы все-таки хотите сохранять и восстанавливать состояние таких объектов, то вы можете написать свой собственный код в методах writeCustomData и readCustomData. Этот код должен выполнять нестандартную сериализацию и восстановление основного содержимого несериализуемого объекта.

Например, в случае класса BufferedImage, основным его содержимым являются: высота, ширина, параметры типа изображения (которые используются в конструкторе) и массив int[] цветов пикселей (который может быть получен путем вызова метода getRGB). Код, восстанавливающий объект BufferedImage (в методе readCustomData), должен создавать экземпляр этого класса посредством вызова конструктора с вышеперечисленными параметрами и последующего вызова метода setRGB для восстановления изображения.

Открытые соединения с базами данных и открытые файлы не могут сохранять и восстанавливать свои состояния. Поэтому после восстановления состояния модели файлы и соединения с базами данных будут в закрытом состоянии. Это не означает, что вы не можете продолжать работать с ними. Например, если модель записывает информацию в файл журнала, то вы можете продолжать записывать туда нужные вам данные при условии, что соответствующий текстовый файл находится в режиме "запись с добавлением в конец". Объекты связи с базами данных установят свои соединения при первом доступе к базе данных (как и обычно). Но объекты Statement и ResultSet (если есть таковые) не могут быть включены в сохраняемое состояние модели (они несериализуемы). Рекомендуется открывать объекты ResultSet, работать с ними и закрывать их в теле одной и той же функции (или в коде одного и того же кодового свойства элемента модели). Не рекомендуется хранить ссылки на объекты типа Statement и ResultSet в переменных агента. Также обратите внимание, что файлы состояния не могут влиять на внешние источники данных и в некоторых случаях может потребоваться ручное сохранение и восстановление баз данных.

В настоящий момент исполняющий модуль оптимизатора OptQuest не поддерживает сериализацию, поэтому вы не можете сохранять и восстанавливать состояние оптимизационных экспериментов. Это станет возможно, как только OptTek выпустит версию OptQuest, которая будет поддерживать сериализацию.