Какие переменные или объекты должны быть связаны с временным ключевым словом? - PullRequest
3 голосов
/ 15 декабря 2011

Я читал о части теории сериализации, где говорится, что это требуется, когда необходимо сохранить состояние объекта. Я написал приложение веб-службы, где оно будет работать на разных виртуальных машинах

Я нахожусь в процессе повышения производительности моего веб-сервиса, поэтому я решил использовать ключевое слово transient для некоторых моих переменных внутри моего Webservice класса

У меня есть несколько вопросов, связанных с этим: какой объект должен быть сериализован, а какой не должен

1. Сначала для моего регистратора я буду использовать ключевое слово transient Например:

private transient static final Logger logger = Logger.getLogger(Tata.class);

2. Но как насчет переменных экземпляра внутри класса? мы должны использовать переходный процесс для них или нет? Например:

String strategyData = null;
String errorText = null;
Properties prop = null;

Пожалуйста, поделитесь своими данными.

Ответы [ 6 ]

1 голос
/ 15 декабря 2011

если переменная объявлена ​​как временная, она не будет сохранена. Это основная цель переходного ключевого слова.

так что все те переменные, которые вам не нужно хранить в постоянном состоянии объекта, могут быть объявлены как временные.

см. http://www.javabeat.net/tips/168-what-is-transient-keyword-in-java.html для более подробной информации

0 голосов
/ 15 декабря 2011

перейдите по ссылке, которая может быть вам полезна ..

http://javarevisited.blogspot.com/2011/09/transient-keyword-variable-in-java.html

0 голосов
/ 15 декабря 2011

Что вы подразумеваете под "работать на разных JVM"?

Если он будет работать одновременно на нескольких JVM (например, на распределенном сервере), чем no , переменные, которые представляют состояние вашего объекта, не должны быть переходными.

В противном случае другие экземпляры серверов приведут вашу службу в несогласованное состояние.

0 голосов
/ 15 декабря 2011

Сам класс веб-службы никогда не сериализуется. Объекты данных, которые возвращаются методами веб-службы, а также их аргументы, сериализуются. Они должны содержать информацию, необходимую получателю объекта.

Если получателю не нужна некоторая информация, и если объект не будет вызывать исключения, если для этой информации задано значение null, вы можете пометить ее как временную. Но если он не нужен получателю, он, вероятно, не должен быть частью объекта.

Если вы используете регистратор внутри DTO, то этот регистратор определенно не должен быть сериализован. Но убедитесь, что регистратор не равен нулю при каждом его использовании, тогда.

0 голосов
/ 15 декабря 2011

Вы должны отметить как переходные все поля, которые не могут или не должны быть сериализованы вместе с другими полями объекта.

Поле, которое само по себе не сериализуемо, не может быть сериализовано и поэтому должно быть помечено как переходное, если оно относится к сериализуемому классу.Примером является класс, который содержит несколько полей, и одним из них является Thread.Очевидно, что поток не может быть сериализован.Поэтому пометьте его как временный и реализуйте механизм, который создает новый поток при восстановлении объекта после сериализации.

Другой пример - когда поле может быть, но не должно быть сериализовано.Например, идентификатор процесса.Предположим, что ваша программа содержит идентификатор процесса другого процесса.Сам идентификатор процесса int, поэтому его не нужно сериализовать.Но это не имеет никакого смысла в другой среде или в той же среде через несколько минут (потому что этот процесс, вероятно, уже не существует).

0 голосов
/ 15 декабря 2011

Сериализация используется в тех случаях, когда вам необходимо сохранить состояние вашего объекта. Или необходимо перенести состояние объекта между разными машинами (или виртуальными машинами, если вы используете более одного vm на одной машине) и т. Д.

Например Если вы изменили состояние объекта даже после перезагрузки системы, можно использовать сериализацию.

Кроме того, вам может не потребоваться сохранять все состояние объекта. Для этого вы можете объявить эту переменную как переходную.

Если вам нужно только strategyData, чтобы сохранить, вы можете объявить две другие переменные как переходные.

Примечание. Если вам нужно сериализовать объект. Все объекты, указанные внутри, также должны быть Serializable, или вам нужно объявить их как временные.

...