Безопасно ли помечать интерфейс диалога CDI как временный?
Является ли интерфейс диалога, который вы можете добавить в bean-компоненте @ConversationScoped, безопасным для обозначения переходного процесса (т. Е. Будет ли CDI работать с ним во время сериализации), или мне нужен специальный read / writeObject?
@ConversationScoped
public class CDIConversationScopedBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private transient Conversation conversation; // <<-- transient ok?
FindBugs жалуется на непереходное не сериализуемое поле экземпляра.
1 ответ
TL;DR: Да, это безопасно. Объяснение:
Так как Conversation
класс не реализует Serializable
интерфейс также статические анализаторы обычно жалуются, что все поля должны быть либо Serializable
или переходный процесс, даже если класс никогда не сериализован или десериализован.
Во-первых, ваш фрагмент немного сомнителен, почему вы реализуете этот интерфейс маркера - так вы планируете сериализовать этот класс? Возможно, вы захотите добавить сгенерированный или серийный UID версии по умолчанию.
Чтобы решить эту проблему, сделайте поле transient
если вы не планируете де / сериализацию класса - это безвредно и не повлияет на поведение Conversation
, См. Спецификацию Java 8, глава 8.3.1.3.
Переменные могут быть помечены как переходные, чтобы указать, что они не являются частью постоянного состояния объекта.
Если вы планируете, сделать Conversation
воплощать в жизнь Serializable
и относиться к его полям таким же образом.