From: Scott M S. <sco...@at...> - 2003-05-16 21:06:47
|
The CaseStatus class has been obtained from the new deployment while the = objects in the resulting iterator are clearly from the previous deployment. = Track down where the iterator content objects are created. The most likely problem is some = factory or cache class outside of the deployment holding on to the previous = deployment version of the classes. xxxxxxxxxxxxxxxxxxxxxxxx Scott Stark Chief Technology Officer JBoss Group, LLC xxxxxxxxxxxxxxxxxxxxxxxx ----- Original Message -----=20 From: Dan Norcross=20 To: jbo...@li...=20 Sent: Thursday, May 15, 2003 8:45 PM Subject: [JBoss-user] ClassCastException when hot redeploy application = as a single ear in JBoss 3.2.1 I am stumped by a ClassCastException. Lately I have been on the "hot = redeploy" bandwagon, and have read up on all past postings on the = mailing list, the jboss.org forums. The "Class Loading Architecture." = PDF was also very helpful. Before, we were deploying all "components" as = separate .jar files. They were quite inter-dependent, not just via = interfaces but also sharing POJOs such as DTO and org.apache.enum = classes. So I wasn't surprised when redeploying one jar would cause the = other's to raise ClassCastExceptions on these POJOs. Our solution was to put everything in a single .ear. The .jar's are = still separate, but are deployed together in the .ear. We also ugraded = to JBoss 3.2.1. However, ClassCastExceptions are still cropping up. Most things work. The web-tier app is able to invoke the fa=E7ade = which invokes entity beans without any problem. But this code doesn't = work after redeploy: public Collection getStatusLabels() throws RemoteException { Collection statusLabels =3D new ArrayList(); Iterator caseStateIter =3D = CaseStatus.getEnumList().iterator(); CaseStatus status =3D null; logger.debug("** 1: = status.getClass().getClassLoader()"+CaseStatus.class.getClassLoader()); while (caseStateIter.hasNext()) { Object o =3D caseStateIter.next(); logger.debug("** 2: = o.getClass().getClassLoader()"+o.getClass().getClassLoader()); status =3D (CaseStatus) o; statusLabels.add(new LabelValueBean(status.getName(), = status.getValue())); } return statusLabels; } This code is a class called "CaseFacadeBean" in a jar called = "Fa=E7ade". The problematic "CaseStatus" class is a simple = implementation of org.apache.ValueEnum in a separate jar called "Case". After redeploy, the output from the log statements is telling: 11:25:59,402 DEBUG [CaseFacadeBean:459]=20 ********1: status.getClass().getClassLoader() org.jboss.mx.loading.UnifiedClassLoader3@10cdec1{=20 = url=3Dfile:/C:/jboss-3.2.1_tomcat-4.1.24/server/default/tmp/deploy/server= /default/deploy/qa2-dashboard.ear/43.qa2-dashboard.ear , addedOrder=3D32} 11:25:59,402 DEBUG [CaseFacadeBean:462]=20 ********2: o.getClass().getClassLoader() org.jboss.mx.loading.UnifiedClassLoader3@ae1393{=20 = url=3Dfile:/C:/jboss-3.2.1_tomcat-4.1.24/server/default/tmp/deploy/server= /default/deploy/qa2-dashboard.ear/42.qa2-dashboard.ear , addedOrder=3D31} CONCLUSION: Any ideas what is going on here? Why does CaseStatus have the = UnifiedClassLoader3@10cdec1 classloader, and caseStateIter.next() the = UnifiedClassLoader3@ae1393? Thanks for any help!=20 Daniel Norcross |