You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2007/08/02 01:19:08 UTC

svn commit: r561987 - in /myfaces: core/trunk/impl/src/main/java/org/apache/myfaces/application/ core/trunk/impl/src/main/java/org/apache/myfaces/config/ core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/ core/trunk/impl/src/main/java/org/apac...

Author: mmarinschek
Date: Wed Aug  1 16:19:06 2007
New Revision: 561987

URL: http://svn.apache.org/viewvc?view=rev&rev=561987
Log:
https://issues.apache.org/jira/browse/MYFACES-1689: Reload of faces-config-files if changes are detected

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXml.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXmlParser.java
    myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationFactoryImpl.java Wed Aug  1 16:19:06 2007
@@ -44,8 +44,16 @@
 
     public ApplicationFactoryImpl()
     {
+        createAndLogNewApplication();
+    }
+
+    private void createAndLogNewApplication() {
         _application = new ApplicationImpl();
         if (log.isTraceEnabled()) log.trace("New ApplicationFactory instance created");
+    }
+
+    public void purgeApplication(){
+        createAndLogNewApplication();
     }
 
     public Application getApplication()

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Wed Aug  1 16:19:06 2007
@@ -31,6 +31,7 @@
 import org.apache.myfaces.lifecycle.LifecycleFactoryImpl;
 import org.apache.myfaces.renderkit.RenderKitFactoryImpl;
 import org.apache.myfaces.renderkit.html.HtmlRenderKitImpl;
+import org.apache.myfaces.shared_impl.config.MyfacesConfig;
 import org.apache.myfaces.shared_impl.util.ClassUtils;
 import org.apache.myfaces.shared_impl.util.LocaleUtils;
 import org.apache.myfaces.shared_impl.util.StateUtils;
@@ -54,6 +55,7 @@
 import java.io.*;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.*;
@@ -100,6 +102,8 @@
     private static final String META_INF_MANIFEST_SUFFIX = "!/META-INF/MANIFEST.MF";
     private static final String JAR_PREFIX = "jar:";
 
+    private static long lastUpdate;
+
     public static final String MYFACES_API_PACKAGE_NAME = "myfaces-api";
     public static final String MYFACES_IMPL_PACKAGE_NAME = "myfaces-impl";
     public static final String MYFACES_TOMAHAWK_PACKAGE_NAME = "tomahawk";
@@ -113,6 +117,83 @@
 
     }
 
+    private long getResourceLastModified(String resource){
+        try {
+            URL url =  _externalContext.getResource(resource);
+            if (url != null) {
+                return url.openConnection().getLastModified();
+            }
+        } catch (IOException e) {
+            log.error("Could not read resource " + resource, e);
+        }
+        return 0;
+    }
+
+    private long getLastModifiedTime(){
+        long lastModified = 0;
+        long resModified;
+
+        resModified = getResourceLastModified(DEFAULT_FACES_CONFIG);
+        if (resModified > lastModified)
+            lastModified = resModified;
+
+
+        List configFilesList = getConfigFilesList();
+
+        for (int i = 0; i < configFilesList.size(); i++) {
+            String systemId = (String) configFilesList.get(i);
+
+            resModified = getResourceLastModified(systemId);
+                if (resModified > lastModified)
+                    lastModified = resModified;
+
+        }
+
+        return lastModified;
+    }
+
+    public void update(){
+        long refreshPeriod = (MyfacesConfig.getCurrentInstance(_externalContext).getConfigRefreshPeriod())*1000;
+
+        if (refreshPeriod > 0){
+            long ttl = lastUpdate + refreshPeriod;
+            if ((System.currentTimeMillis() > ttl) && (getLastModifiedTime() > ttl)) {
+                try {
+                    purgeConfiguration();
+                } catch (NoSuchMethodException e) {
+                    log.error("Configuration objects do not support clean-up. Update aborted");
+                    return;
+                } catch (IllegalAccessException e) {
+                    log.fatal("Error during configuration clean-up" + e.getMessage());
+                } catch (InvocationTargetException e) {
+                    log.fatal("Error during configuration clean-up" + e.getMessage());
+                }
+                configure();
+            }
+        }
+    }
+
+    private void purgeConfiguration() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+
+        Method purgeMethod;
+        Class[] emptyParameterList = new Class[]{};
+
+        ApplicationFactory applicationFactory = (ApplicationFactory) FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+        purgeMethod = applicationFactory.getClass().getMethod("purgeApplication", emptyParameterList);
+        purgeMethod.invoke(applicationFactory, emptyParameterList);
+
+        RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        purgeMethod = renderKitFactory.getClass().getMethod("purgeRenderKit", emptyParameterList);
+        purgeMethod.invoke(renderKitFactory, emptyParameterList);
+
+        RuntimeConfig.getCurrentInstance(_externalContext).purge();
+
+        LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
+        purgeMethod = lifecycleFactory.getClass().getMethod("purgeLifecycle", emptyParameterList);
+        purgeMethod.invoke(lifecycleFactory, emptyParameterList);
+
+        // factories and serial factory need not be purged...
+    }
 
     public void configure()
         throws FacesException
@@ -150,6 +231,9 @@
         configureRuntimeConfig();
         configureLifecycle();
         handleSerialFactory();
+
+        //record the time of update
+        lastUpdate = System.currentTimeMillis();
     }
 
     private void feedStandardConfig() throws IOException, SAXException
@@ -502,32 +586,44 @@
 
     private void feedContextSpecifiedConfig() throws IOException, SAXException
     {
+        List configFilesList = getConfigFilesList();
+        for (int i = 0; i < configFilesList.size(); i++) {
+            String systemId = (String) configFilesList.get(i);
+            InputStream stream = _externalContext.getResourceAsStream(systemId);
+            if (stream == null)
+            {
+                log.error("Faces config resource " + systemId + " not found");
+                continue;
+            }
+
+            if (log.isInfoEnabled()) log.info("Reading config " + systemId);
+            _dispenser.feed(_unmarshaller.getFacesConfig(stream, systemId));
+            stream.close();
+        }
+    }
+
+    private List getConfigFilesList() {
         String configFiles = _externalContext.getInitParameter(FacesServlet.CONFIG_FILES_ATTR);
+        List configFilesList = new ArrayList();
         if (configFiles != null)
         {
             StringTokenizer st = new StringTokenizer(configFiles, ",", false);
             while (st.hasMoreTokens())
             {
                 String systemId = st.nextToken().trim();
-                
+
                 if(log.isWarnEnabled() && DEFAULT_FACES_CONFIG.equals(systemId))
-                    log.warn(DEFAULT_FACES_CONFIG + " has been specified in the " + 
+                    log.warn(DEFAULT_FACES_CONFIG + " has been specified in the " +
                             FacesServlet.CONFIG_FILES_ATTR + " context parameter of " +
-                            "the deployment descriptor. This should be removed, " +
-                            "as it will be loaded twice.  See JSF spec 1.1, 10.3.2");
-                
-                InputStream stream = _externalContext.getResourceAsStream(systemId);
-                if (stream == null)
-                {
-                    log.error("Faces config resource " + systemId + " not found");
-                    continue;
-                }
+                            "the deployment descriptor. This will automatically be removed, " +
+                            "if we wouldn't do this, it would be loaded twice.  See JSF spec 1.1, 10.3.2");
+                else
+                    configFilesList.add(systemId);
+
 
-                if (log.isInfoEnabled()) log.info("Reading config " + systemId);
-                _dispenser.feed(_unmarshaller.getFacesConfig(stream, systemId));
-                stream.close();
             }
         }
+        return configFilesList;
     }
 
 
@@ -724,12 +820,35 @@
 
         }
 
+        removePurgedBeansFromSessionAndApplication(runtimeConfig);
+
         for (Iterator iterator = _dispenser.getNavigationRules(); iterator.hasNext();)
         {
             NavigationRule rule = (NavigationRule) iterator.next();
             runtimeConfig.addNavigationRule(rule);
 
         }
+    }
+
+    private void removePurgedBeansFromSessionAndApplication(RuntimeConfig runtimeConfig) {
+        Map oldManagedBeans = runtimeConfig.getManagedBeansNotReaddedAfterPurge();
+        if(oldManagedBeans!=null) {
+            Iterator it=oldManagedBeans.entrySet().iterator();
+            while(it.hasNext()) {
+                Map.Entry entry = (Map.Entry) it.next();
+                ManagedBean bean = (ManagedBean) entry.getValue();
+
+                String scope = bean.getManagedBeanScope();
+
+                if(scope!=null && scope.equalsIgnoreCase("session")) {
+                    _externalContext.getSessionMap().remove(entry.getKey());
+                }
+                else if(scope!=null && scope.equalsIgnoreCase("application")) {
+                    _externalContext.getApplicationMap().remove(entry.getKey());
+                }
+            }
+        }
+        runtimeConfig.resetManagedBeansNotReaddedAfterPurge();
     }
 
 

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java Wed Aug  1 16:19:06 2007
@@ -40,6 +40,7 @@
 
     private Collection _navigationRules = new ArrayList();
     private Map _managedBeans = new HashMap();
+    private Map _oldManagedBeans = new HashMap();
     private Map _managedBeansPerLocation = new HashMap();
     private boolean _navigationRulesChanged=false;
 
@@ -56,6 +57,14 @@
         return runtimeConfig;
     }
 
+    public void purge(){
+        _navigationRules = new ArrayList();
+        _oldManagedBeans = _managedBeans;
+        _managedBeans = new HashMap();
+        _managedBeansPerLocation = new HashMap();
+        _navigationRulesChanged = false;
+    }
+
     /**
      * Return the navigation rules that can be used by the NavigationHandler implementation.
      * @return a Collection of {@link org.apache.myfaces.config.element.NavigationRule NavigationRule}s
@@ -116,6 +125,9 @@
     public void addManagedBean(String name, ManagedBean managedBean)
     {
         _managedBeans.put(name, managedBean);
+        if(_oldManagedBeans!=null)
+            _oldManagedBeans.remove(name);
+
         List li = (List) _managedBeansPerLocation.get(name);
 
         if(li == null) {
@@ -124,5 +136,13 @@
         }
 
         li.add(managedBean);
+    }
+
+    public Map getManagedBeansNotReaddedAfterPurge() {
+        return _oldManagedBeans;
+    }
+
+    public void resetManagedBeansNotReaddedAfterPurge() {
+        _oldManagedBeans = null;
     }
 }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java Wed Aug  1 16:19:06 2007
@@ -40,6 +40,11 @@
         addLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE, new LifecycleImpl());
     }
 
+    public void purgeLifecycle(){
+        _lifecycles.clear();
+        addLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE, new LifecycleImpl());
+    }
+
     public void addLifecycle(String id, Lifecycle lifecycle)
     {
         synchronized (_lifecycles)

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleImpl.java Wed Aug  1 16:19:06 2007
@@ -30,6 +30,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.util.DebugUtils;
+import org.apache.myfaces.config.FacesConfigurator;
+import org.apache.myfaces.shared_impl.webapp.webxml.WebXml;
 
 /**
  * Implements the lifecycle as described in Spec. 1.0 PFD Chapter 2
@@ -65,6 +67,10 @@
     }
 
     public void execute(FacesContext facesContext) throws FacesException {
+        //refresh all configuration information if according web-xml parameter is set.
+        WebXml.update(facesContext.getExternalContext());        
+        new FacesConfigurator(facesContext.getExternalContext()).update();
+
         PhaseListenerManager phaseListenerMgr = new PhaseListenerManager(this, facesContext, getPhaseListeners());
         for(int executorIndex = 0;executorIndex < lifecycleExecutors.length;executorIndex++) {
         	if(executePhase(facesContext, lifecycleExecutors[executorIndex], phaseListenerMgr)) {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/RenderKitFactoryImpl.java Wed Aug  1 16:19:06 2007
@@ -45,6 +45,9 @@
     {
     }
 
+    public void purgeRenderKit(){
+        _renderkits.clear();
+    }
 
     public void addRenderKit(String renderKitId, RenderKit renderKit)
     {

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/config/MyfacesConfig.java Wed Aug  1 16:19:06 2007
@@ -48,6 +48,9 @@
 
     private static final String APPLICATION_MAP_PARAM_NAME = MyfacesConfig.class.getName();
 
+    public static final String INIT_PARAM_CONFIG_REFRESH_PERIOD = "org.apache.myfaces.CONFIG_REFRESH_PERIOD";
+    public static final long INIT_PARAM_CONFIG_REFRESH_PERIOD_DEFAULT = 2;
+
     public static final String  INIT_PARAM_RESOURCE_VIRTUAL_PATH = "org.apache.myfaces.RESOURCE_VIRTUAL_PATH";
     public static final String  INIT_PARAM_RESOURCE_VIRTUAL_PATH_DEFAULT = "/faces/myFacesExtensionResource";
 
@@ -77,6 +80,7 @@
     private boolean _detectJavascript;
     private boolean _allowJavascript;
     private boolean _autoScroll;
+    private long _configRefreshPeriod;
     private String _addResourceClass;
     private String _resourceVirtualPath;
     private boolean _checkExtensionsFilter;
@@ -158,6 +162,9 @@
         myfacesConfig.setReadonlyAsDisabledForSelect(getBooleanInitParameter(extCtx, INIT_READONLY_AS_DISABLED_FOR_SELECT,
                                                                  INIT_READONLY_AS_DISABLED_FOR_SELECT_DEFAULT));
 
+        myfacesConfig.setConfigRefreshPeriod(getLongInitParameter(extCtx, INIT_PARAM_CONFIG_REFRESH_PERIOD,
+                INIT_PARAM_CONFIG_REFRESH_PERIOD_DEFAULT));
+
         if (TOMAHAWK_AVAILABLE)
         {
             myfacesConfig.setDetectJavascript(getBooleanInitParameter(extCtx, INIT_PARAM_DETECT_JAVASCRIPT,
@@ -228,6 +235,27 @@
         }
     }
 
+    private static long getLongInitParameter(ExternalContext externalContext,
+                                                   String paramName,
+                                                   long defaultValue)
+    {
+        String strValue = externalContext.getInitParameter(paramName);
+        if (strValue == null)
+        {
+            if (log.isInfoEnabled()) log.info("No context init parameter '" + paramName + "' found, using default value " + defaultValue);
+            return defaultValue;
+        }
+        else
+        {
+            try {
+                return Long.parseLong(paramName);
+            } catch (NumberFormatException e) {
+                if (log.isWarnEnabled()) log.warn("Wrong context init parameter '" + paramName + "' (='" + strValue + "'), using default value " + defaultValue);
+            }
+            return defaultValue;
+        }
+    }
+
     private static String getStringInitParameter(ExternalContext externalContext,
                                                  String paramName,
                                                  String defaultValue)
@@ -363,4 +391,12 @@
 	{
 		_checkExtensionsFilter = extensionsFilter;
 	}
+
+    public long getConfigRefreshPeriod() {
+        return _configRefreshPeriod;
+    }
+
+    public void setConfigRefreshPeriod(long configRefreshPeriod) {
+        _configRefreshPeriod = configRefreshPeriod;
+    }
 }

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXml.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXml.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXml.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXml.java Wed Aug  1 16:19:06 2007
@@ -28,6 +28,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.shared.config.MyfacesConfig;
 
 /**
  * @author Manfred Geiler (latest modification by $Author$)
@@ -35,7 +36,12 @@
  */
 public class WebXml
 {
-    private static final Log log = LogFactory.getLog(WebXmlParser.class);
+    private static final Log log = LogFactory.getLog(WebXml.class);
+
+
+    private static long refreshPeriod;
+
+    private long parsingTime;
 
     private Map _servlets = new HashMap();
     private Map _servletMappings = new HashMap();
@@ -185,6 +191,21 @@
         return _facesExtensionsFilterMappings;
     }
 
+    protected void setParsingTime(long parsingTime){
+        this.parsingTime = parsingTime;
+    }
+
+    protected boolean isOld(ExternalContext context) {
+        if (refreshPeriod > 0) {
+            long ttl = this.parsingTime + refreshPeriod;
+            if (System.currentTimeMillis() > ttl) {
+                long lastModified = WebXmlParser.getWebXmlLastModified(context);
+                return lastModified == 0 || lastModified > ttl;
+            }
+        }
+        return false;
+    }
+
     private static final String WEB_XML_ATTR = WebXml.class.getName();
     public static WebXml getWebXml(ExternalContext context)
     {
@@ -206,5 +227,13 @@
         WebXmlParser parser = new WebXmlParser(context);
         WebXml webXml = parser.parse();
         context.getApplicationMap().put(WEB_XML_ATTR, webXml);
+        long configRefreshPeriod = MyfacesConfig.getCurrentInstance(context).getConfigRefreshPeriod();
+        webXml.setParsingTime(System.currentTimeMillis());
+        refreshPeriod = (configRefreshPeriod * 1000);
+    }
+    public static void update(ExternalContext context){
+        if (getWebXml(context).isOld(context)){
+            WebXml.init(context);
+        }
     }
 }

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXmlParser.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXmlParser.java?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXmlParser.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/webapp/webxml/WebXmlParser.java Wed Aug  1 16:19:06 2007
@@ -116,6 +116,17 @@
         }
     }
 
+    public static long getWebXmlLastModified(ExternalContext context) {
+        try {
+            URL url = context.getResource(WEB_XML_PATH);
+            if (url != null)
+                return url.openConnection().getLastModified();
+        } catch (IOException e) {
+            log.error("Could not find web.xml in path " + WEB_XML_PATH);
+        }
+        return 0L;
+    }
+
 
     private InputSource createContextInputSource(String publicId, String systemId)
     {

Modified: myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml?view=diff&rev=561987&r1=561986&r2=561987
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml (original)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml Wed Aug  1 16:19:06 2007
@@ -19,13 +19,6 @@
         <managed-bean-class>org.apache.myfaces.examples.convertStringUtils.ConvertStringUtilsBean</managed-bean-class>
         <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>
-    
-    
-	 <managed-bean>
-		  <managed-bean-name>passwordStrengthBean</managed-bean-name>
-		  <managed-bean-class>org.apache.myfaces.examples.passwordStrength.PasswordStrengthBean</managed-bean-class>
-		  <managed-bean-scope>request</managed-bean-scope>
-	 </managed-bean>    
 
     <!-- managed bean for notifierBean-->