User development, A new message was posted in the thread "ClassPool Refactoring":
http://community.jboss.org/message/527265#527265 Author : Flavia Rainone Profile : http://community.jboss.org/people/[email protected] Message: -------------------------------------------------------------- > mailto:[email protected] wrote: > > My fix has never been comitted and consists of adding a check on the classes > cache to BaseClassPool.get: > > *public* *class* BaseClassPool *extends* AbstractClassPool > { > ... > @Override > *public* *final* CtClass get(String classname) *throws* NotFoundException > { > *boolean* trace = logger.isTraceEnabled(); > *if* (trace) logger.trace(*this* + " initiating get of " + classname); > > *if* (this.getClassLoader() == *null*) > { > *throw* *new* IllegalStateException("Illegal call. " + " A class > cannot be retrieved from ClassPool " + > *this* + " because the corresponding > ClassLoader is garbage collected"); > } > *try* > { > >>> *if* (this.classes.containsKey(classname)) > >>> { > >>> *return* (CtClass) classes.get(classname); > >>> } > CtClass clazz = super.get(classname); > *if* (trace) > logger.trace(*this* + " completed get of " + classname + " " + > getClassPoolLogStringForClass(clazz)); > > *return* clazz; > } > *catch* (NotFoundException e) > { > *if* (trace) > logger.trace(classname + " could not be found from " + this, e); > *throw* e; > } > } > } > > > > [....] > > > > While working with Kabir to fix the AOP tests for AS, he pointed out that > there could be an issue related to my fix. It seemed obviously right to me to > look in the classes cache (a cache declared in ScopedClassPool that contains > all classes created by the current class pool) before doing anything else. To > me, if we have a hit in the cache, it means that the current pool is the one > that is supposed to load the class, and that there is no need to look further > by calling super.get method. But Kabir raised the following possibility. What > if the class pool scenario (a reflection of the class loader/domain scenario) > changes after the current class pool loaded the class, in a way that this > class pool is no longer the one responsible for loading that class? In that > case, looking for the class in the classes cache would be a serious mistake. > Is this scenario possible? Does anybody know the answer to this question? I can't commit it without knowing the answer. -------------------------------------------------------------- To reply to this message visit the message page: http://community.jboss.org/message/527265#527265
_______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
