2

how to use dcevm with tomcat and eclipse I downloaded the jdk6u25 and I set tomcat7 to work with it in eclipse juno then when I change anything in the managed bean it works, but the change in the xhtml isn't taken into consideration

I think the problem is in tomcat

reevesy
  • 3,452
  • 1
  • 26
  • 23
atbegin-but
  • 263
  • 1
  • 8
  • 19

1 Answers1

0

You have to clean the BeanElResolver and ElMethodCache at least. Following example is for jboss-el implementation:

private void clearJbossElMethodCache()  {
    try {
        Field cacheField = getField(org.jboss.el.util.ReflectionUtil.class, "methodCache");
        cacheField.setAccessible(true);
        Object cache = cacheField.get(null);
        Method m = cache.getClass().getMethod("clear");
        m.invoke(cache);
    }
    catch (Exception e) {
    }
}

public void clearBeanElResolver() {
    BeanELResolver beanELResolver = getSeamBeanELResover();
    doCleanBeanElResolver(beanELResolver);
    doCleanBeanElResolver(ELUtils.BEAN_RESOLVER);
    java.beans.Introspector.flushCaches();
}

private void doCleanBeanElResolver(BeanELResolver beanELResolver) {
        try {
            try {
                Field cacheField = getField(beanELResolver.getClass(), "cache");
                cacheField.setAccessible(true);
                Object cache = cacheField.get(beanELResolver);
                try {
                    Method m = cache.getClass().getMethod("clear");
                    m.invoke(cache);
                } catch (NoSuchMethodException e)
                {
                    Class<?> cacheClass = getClass().getClassLoader().loadClass("javax.el.BeanELResolver$ConcurrentCache");
                    Constructor<?> con = cacheClass.getConstructor(int.class);
                    con.setAccessible(true);
                    Object cacheInstance = con.newInstance(100);
                    cacheField.set(beanELResolver, cacheInstance);
                }

            }
            catch (NoSuchFieldException ee) {
                Field props = getField(beanELResolver.getClass(), "properties");
                props.setAccessible(true);
                Object cache = props.get(beanELResolver);
                Method m = cache.getClass().getMethod("clear");
                m.invoke(cache);
            }
        }
        catch (Exception e) {
        }
}

private BeanELResolver getSeamBeanELResover() {
    if (EL.EL_RESOLVER instanceof CompositeELResolver) {
        CompositeELResolver compositeElResolver = (CompositeELResolver) EL.EL_RESOLVER;
        try {
            Field elResolvesField = getField(CompositeELResolver.class, "resolvers");
            elResolvesField.setAccessible(true);
            ELResolver elResolvers[] = (ELResolver[]) elResolvesField.get(compositeElResolver);
            for (ELResolver elResolver: elResolvers) {
                if (elResolver instanceof BeanELResolver) {
                    return (BeanELResolver) elResolver;
                }
            }
        }
        catch (Exception e) {
        }
    }
    return null;
}
skybber
  • 409
  • 4
  • 13