Безопасно ли помечать интерфейс диалога 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 и относиться к его полям таким же образом.

Другие вопросы по тегам