|
I'm having a JSF issue that seems (at least from the stack trace) to
have its root cause in a MyFaces/JBoss class loader issue. I was hoping
someone on this list might be able to help shed some light on the problem. I'm running JBoss 4.0.3SP1, with the EJB3 final draft upgrade (RC5?)
and a version of MyFaces that's been upgraded to 1.1.1. I'm using
Facelets 1.0.3. I have a session scoped bean defined in my managed bean list in faces-config.xml.
It's defined using the XML snippet: <managed-bean> <description>Used for managing
localized dates for weeks.</description>
<managed-bean-name>weekBean</managed-bean-name> <managed-bean-class>us.emotive.challengeme.components.program.WeekBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope> </managed-bean> Now, I should be able to invoke the managed bean creation facility from
Java code. This facility should check for a pre-existing bean with that
name, and create a new WeekBean if one doesn't already exist in scope. I call this facility using a code snippet like: FacesContext facesContext =
FacesContext.getCurrentInstance(); ValueBinding vb =
facesContext.getApplication().createValueBinding("#{weekBean}"); WeekBean weekBean =
(WeekBean)vb.getValue(facesContext); I would expect this to yield a WeekBean. Instead I get an
exception and a long stack trace. In the trace I see this: Caused by: javax.faces.FacesException:
java.lang.ClassNotFoundException: No ClassLoaders found for:
us.emotive.challengeme.components.program.WeekBean at
org.apache.myfaces.util.ClassUtils.simpleClassForName(ClassUtils.java:162) at org.apache.myfaces.util.ClassUtils.newInstance(ClassUtils.java:265) at
org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:49) at
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:311) at
org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:569) at
org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124) at
org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:378) ... 56 more Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for:
us.emotive.challengeme.components.program.WeekBean at
org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:198) at
org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:475) at
org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:377) at
java.lang.ClassLoader.loadClass(ClassLoader.java:251) This is odd because: i) If I use a reference to weekBean in a JSF/Facelets page, as opposed
to a backing bean, everything gets instantiated fine. ii) I can alter the above code to look like: FacesContext facesContext =
FacesContext.getCurrentInstance(); ValueBinding vb =
facesContext.getApplication().createValueBinding("#{sessionScope.weekBean}"); WeekBean weekBean =
(WeekBean)vb.getValue(facesContext); if (weekBean == null) {
weekBean = new WeekBean();
vb.setValue(facesContext, weekBean); } and all the classes get loaded and instantiated just fine. I'm suspecting a bug, but considering the number of different
technologies involved I'm not sure where. I was hoping someone on this
list might have a clue, and help me cut short the process of swapping in and
out different components. Has anyone seen this before? Is this a known issue? Anyone
know whether this is a bug or I'm doing something wrong? Any guidance
would be appreciated. Thanks, Peter |

