This is a rookie question, sorry.
I developed a jsf-2 app (on Tomcat) which has a big controller bean declared in session scope.
Now, the mistake I made was to put all session scoped variables in this bean as static variables, thinking they would not be shared between different instances of the app. But they are – static variables are shared across all instances of the app on a same JVM, which makes sense actually. Anyway, all my code is currently like that:
@SessionScoped
@ManagedBean
public ControllerBean{
static private String aString = "session wide value for a string";
//static getter and setter for astring
}
@viewscoped
@ManagedBean
public class OneRandomViewScopedBean{
String oneString = ControllerBean.getAString();
//operations on this string...
ControllerBean.setAString(newValueForString);
}
Could I get pointers as to how I should refactor my code to remove the static variables in my ControllerBean? I suppose the solution is dead simple but I can’t see it now.
Note: I don’t need to persist the data because the volumes are small and they can vanish after the app is closed
Thx!
Remove the
staticmodifier (that was indeed a huge mistake; this problem is not JSF specific, but just basic Java. I’d really invest some more time in learning basic Java before continuing with JSF) and use@ManagedPropertyto inject other beans or its properties.See also: