Как сохранить состояние Java bean в не веб-приложении?

В рамках моей RFT QA Automation я должен хранить состояние (объект) Java-бина и должен получать доступ к объекту во всем приложении, Singleton может здесь не работать, поскольку это не веб-приложение, не могли бы вы предложить какой-либо другой подход для хранения состояния java bean-компонентов.

Ценю твою помощь.

Спасибо


person TP_JAVA    schedule 03.01.2018    source источник
comment
синглтон не имеет ничего общего с веб-приложением   -  person ACV    schedule 03.01.2018
comment
вы можете использовать синглтон   -  person ACV    schedule 03.01.2018
comment
Но к тому времени, когда я попытаюсь получить доступ к объекту, он может быть запрошен GC, и он создаст новый экземпляр, и я потеряю состояние. Я хотел бы удерживать одно и то же состояние в приложении, пока мои тестовые сценарии не будут завершены.   -  person TP_JAVA    schedule 03.01.2018
comment
GC не коснется вашего синглтона, потому что он ссылается на себя.   -  person ACV    schedule 04.01.2018


Ответы (2)


Я не уверен, что понимаю вашу проблему, но почему бы и нет:

  • сериализовать объекты на диск/базу данных/...
  • использовать статическое хранилище (статический синглтон)
person Mumrah81    schedule 03.01.2018
comment
Я могу создать класс со статической картой, которая имеет все значения, но мне нужен класс с сеттерами и геттерами, такими как java bean. - person TP_JAVA; 03.01.2018
comment
Вы также можете создать: класс, содержащий статические объекты или статическую карту, содержащую объекты, тогда вы можете использовать геттер и сеттер: -MyClass.myStaticObject.getX()/MyClass.MyStaticObject.setX(val) -MyClass.myStaticMap.get(objId) .getX()/MyClass.myStaticMap.get(objId).setX(val) - person Mumrah81; 04.01.2018
comment
Ваш объект никогда не будет собран GC, пока существует ссылка на объект. Единственным исключением из этого правила является использование слабой ссылки (WeakHashMap,...) - person Mumrah81; 04.01.2018

В основном это типичная проблема сериализации/десериализации. В общем, вам нужна возможность записывать состояние класса на постоянный уровень, а затем иметь возможность восстанавливать «тот же» экземпляр из постоянного уровня. Есть встроенный механизм Java, работающий через Serializable интерфейс. Однако он редко используется из-за его неудобства. Один из самых популярных способов сделать это — сериализовать экземпляры вашего класса в формат JSON или XML, а затем прочитать их и создать экземпляр из этого формата. Если вам нужно, чтобы текст был удобочитаемым для человека, XML предпочтительнее, в противном случае JSON является обычным выбором. Лучшим инструментом для сериализации JSON является JSON Jackson (FasterXML/jackson). Вот соответствующие ссылки: Json Jackson дома. Основной класс, который вам нужно будет использовать, это ObjectMapper. Это простой в использовании. Вот статья с примером. Как только вы получите строку Json своего экземпляра, запишите ее в файл или БД, а затем прочитайте ее и используйте ObjectMapper для воссоздания вашего экземпляра. Это просто и очень хорошо работает

person Michael Gantman    schedule 03.01.2018