Временные поля в EJB, действующих в пределах сеанса, не могут аварийно переключаться

Это правило отмечает поля с модификатором transient в классах, имеющих аннотацию @SessionScoped. В реализации Contexts and Dependency Injection (CDI) 1.0 OpenWebBeans приложению разрешено задавать значения полей transient прямо в EJB, действующих в пределах сеанса. В реализации CDI 1.2 Weld поле transient, значение которого было задано напрямую, не будет заполнено после аварийного переключения, что может привести к непредсказуемым результатам в приложении.

Убедитесь в том, что все отмеченные этим правилом поля transient задаются только с помощью метода, предусмотренного в том классе, который их содержит. Если для поля не предусмотрен метод set, добавьте его и используйте вызов этого метода, вместо того чтобы задавать значение поля напрямую.

В следующем примере класс UserBean имеет аннотацию @SessionScoped. Этот класс содержит поле с модификатором transient, которое задается с помощью метода set.


@Named(value = "userBean")
@SessionScoped
public class UserBean реализует UserInterface, Serializable {
	String name; transient String nickName;

	...

	public void setNickName (String nick)
	{
	    nickName = nick;
	}
}

За дополнительной информацией о реализации CDI 1.2 в Java Platform, Enterprise Edition (Java EE) 7 обратитесь к документу Contexts and Dependency Injection 1.2: изменение принципов работы.