[210497] Ejb validator does not complete in 12h for 10 ejb relations.
diff --git a/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/CMPBeanClassVRule.java b/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/CMPBeanClassVRule.java
index 0bc8c64..797ae20 100644
--- a/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/CMPBeanClassVRule.java
+++ b/plugins/org.eclipse.jst.j2ee.core/j2ee-validation/org/eclipse/jst/j2ee/model/internal/validation/CMPBeanClassVRule.java
@@ -237,7 +237,9 @@
 			}
 		}
 		
-		List cmpFields = cmp.getFilteredFeatures(LocalModelledPersistentAttributeFilter.singleton());
+		LocalModelledPersistentAttributeFilter filter = LocalModelledPersistentAttributeFilter.singleton();
+		filter.enableCache(true);
+		List cmpFields = cmp.getFilteredFeatures(filter);
 		if(cmpFields != null && !cmpFields.isEmpty()) {
 		iterator = cmpFields.iterator();
 		while(iterator.hasNext()) {
@@ -247,6 +249,7 @@
 			}
 		  }
 		}
+		filter.clearCache();
 	}
 	
 	public void validateEjbCreateMethod(IEJBValidationContext vc, EnterpriseBean bean, JavaClass clazz, Method method, List[] methodsExtendedList) throws ValidationCancelledException, InvalidInputException, ValidationException {
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRelationshipRoleAttributeFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRelationshipRoleAttributeFilter.java
index a05f6ee..f7cfdb7 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRelationshipRoleAttributeFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRelationshipRoleAttributeFilter.java
@@ -9,6 +9,7 @@
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.jst.j2ee.ejb.internal.impl;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -16,84 +17,29 @@
 import org.eclipse.jst.j2ee.ejb.CommonRelationshipRole;
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
 
-
-/**
- * Insert the type's description here.
- * Creation date: (11/28/2000 7:06:49 PM)
- * @author: Administrator
- */
-public abstract class AbstractRelationshipRoleAttributeFilter extends ContainerManagedEntityFilter {
-/**
- * AbstractRelationshipRoleAttributeFilter constructor comment.
- */
-public AbstractRelationshipRoleAttributeFilter() {
-	super();
-}
-/**
- * filter method comment.
- */
-public List filter(ContainerManagedEntity cmp) {
-	List attributes = new ArrayList();
-	Iterator it = getSourceRoles(cmp).iterator();
-	CommonRelationshipRole role;
-	while (it.hasNext()) {
-		role = (CommonRelationshipRole) it.next();
-		attributes.addAll(role.getAttributes());
+public abstract class AbstractRelationshipRoleAttributeFilter extends
+		ContainerManagedEntityFilter {
+	/**
+	 * AbstractRelationshipRoleAttributeFilter constructor comment.
+	 */
+	public AbstractRelationshipRoleAttributeFilter() {
+		super();
 	}
-	return attributes;
+
+	protected List filterNotcached(ContainerManagedEntity cmp) {
+		List attributes = new ArrayList();
+		Iterator it = getSourceRoles(cmp).iterator();
+		CommonRelationshipRole role;
+		while (it.hasNext()) {
+			role = (CommonRelationshipRole) it.next();
+			attributes.addAll(role.getAttributes());
+		}
+		return attributes;
+	}
+
+	/**
+	 * Return the proper list of roles from cmpExt.
+	 */
+	protected abstract java.util.List getSourceRoles(
+			ContainerManagedEntity cmpExt);
 }
-/**
- * Return the proper list of roles from cmpExt.
- */
-protected abstract java.util.List getSourceRoles(ContainerManagedEntity cmpExt) ;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRequiredRelationshipRoleFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRequiredRelationshipRoleFilter.java
index 765ec1e..8065ebd 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRequiredRelationshipRoleFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/AbstractRequiredRelationshipRoleFilter.java
@@ -27,10 +27,7 @@
 public AbstractRequiredRelationshipRoleFilter() {
 	super();
 }
-/**
- * filter method comment.
- */
-public List filter(ContainerManagedEntity cmp) {
+protected List filterNotcached(ContainerManagedEntity cmp) {
 	List roles = new ArrayList();
 	List allRoles = getRolesToFilter(cmp);
 	CommonRelationshipRole role;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ContainerManagedEntityFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ContainerManagedEntityFilter.java
index 206558b..2a7d799 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ContainerManagedEntityFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ContainerManagedEntityFilter.java
@@ -12,7 +12,9 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.jst.j2ee.ejb.CMPAttribute;
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
@@ -23,25 +25,26 @@
 import org.eclipse.jst.j2ee.internal.IEJBModelExtenderManager;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 
-
-/**
- * Insert the type's description here. Creation date: (11/28/2000 6:28:39 PM)
- * @author: Administrator
- */
 public abstract class ContainerManagedEntityFilter implements EJBExtensionFilter {
- 
+ 	
+	private static ThreadLocal<CMPCache> _cache = new ThreadLocal<CMPCache>();
 
-    /**
-     * AttributeFilter constructor comment.
-     */
-    public ContainerManagedEntityFilter() {
-        super();
+    public List filter(ContainerManagedEntity cmp){
+    	List list = getCache(this, cmp);
+    	if (list != null)return list;
+    	
+    	list = filterNotcached(cmp);
+    	setCache(this, cmp, list);
+    	return list;
     }
-
+    
     /**
-     * filter method comment.
+     * Subclasses that don't implement the filter method need to override this method 
+     * to provided the filtered results. 
      */
-    public abstract List filter(ContainerManagedEntity cmp);
+    protected List filterNotcached(ContainerManagedEntity cmp){
+    	return new ArrayList();
+    }
 
     /**
      * All CMPAttributeFilters only operate on ContainerManagedEntityExtension
@@ -98,4 +101,100 @@
         if(extensionHelper != null)
             collectRelationshipRoles((ContainerManagedEntity) extensionHelper.getSuperType(cmp), extensionHelper, containerList);        
     }
+    
+    /**
+     * Clear the cache and turn off caching.
+     */
+	public void clearCache(){
+		if (_cache == null)return;
+		getCache().clear();
+		getCache().setEnabled(false);
+	}
+	
+	
+	protected void setCache(ContainerManagedEntityFilter filter, ContainerManagedEntity cmp, List list) {
+		getCache().set(filter, cmp, list);
+	}
+
+
+	protected List getCache(ContainerManagedEntityFilter filter, ContainerManagedEntity cmp) {
+		return getCache().get(filter, cmp);
+	}
+	
+	/**
+	 * Answer the CMPCache for this thread.
+	 * @return
+	 */
+	private CMPCache getCache(){
+		CMPCache cache = _cache.get();
+		if (cache == null){
+			cache = new CMPCache();
+			_cache.set(cache);
+		}
+		return cache;
+	}
+	
+	/**
+	 * This method needs to be called (with the parameter true) if you wish the 
+	 * filter results to be cached. By default the results are not cached.
+	 * <p>
+	 * The cache is thread based. When done the clearCache method should be called.
+	 * 
+	 * @param isEnabled set this to true to have the filter results cached.
+	 */
+	public void enableCache(boolean isEnabled){
+		getCache().setEnabled(isEnabled);
+	}
+
+    /**
+     * Keep a thread local cache of filtered results.
+     * @author karasiuk
+     *
+     */
+	private static class CMPCache {
+		
+		/*
+		 * We discovered some very deep code paths when validating EJBs. In one example project that 
+		 * only had a few beans, it took 12 hours to validate. Keeping a cache during validation
+		 * reduced the time to seconds.
+		 */
+		
+		private Map 		_map = new HashMap(30);
+		
+		/** Is the cache turned on, by default it is not. */
+		private boolean		_enabled;
+		
+		public void setEnabled(boolean isEnabled){
+			_enabled = isEnabled;
+		}
+
+		public List get(ContainerManagedEntityFilter filter, ContainerManagedEntity cmp) {
+			if (!_enabled)return null;
+			
+			Map map = (Map)_map.get(filter);
+			if (map == null){
+				map = new HashMap(100);
+				_map.put(filter, map);
+			}
+			return (List)map.get(cmp);
+		}
+
+		public void set(ContainerManagedEntityFilter filter, ContainerManagedEntity cmp, List list) {
+			if (!_enabled)return; 
+			
+			Map map = (Map)_map.get(filter);
+			if (map == null){
+				map = new HashMap(100);
+				_map.put(filter, map);
+			}
+			
+			map.put(cmp, list);			
+		}
+		
+		public void clear(){
+			_map.clear();
+		}
+		
+	}
+
 }
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/KeyRelationshipRoleFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/KeyRelationshipRoleFilter.java
index 01b7bea..bf7cb79 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/KeyRelationshipRoleFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/KeyRelationshipRoleFilter.java
@@ -29,10 +29,7 @@
 
     private static KeyRelationshipRoleFilter singleton;
 
-    /**
-     * filter method comment.
-     */
-    public java.util.List filter(ContainerManagedEntity cmp) {
+    protected List filterNotcached(ContainerManagedEntity cmp) {
         List keyRoles = new ArrayList();
         Iterator it = getRelationshipRoles(cmp).iterator();
         CommonRelationshipRole role;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/LocalOppositeRelationshipRoleFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/LocalOppositeRelationshipRoleFilter.java
index 0348357..f6ad374 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/LocalOppositeRelationshipRoleFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/LocalOppositeRelationshipRoleFilter.java
@@ -32,7 +32,7 @@
     /**
      * Return a List with the opposite roles for the local relationship roles.
      */
-    public List filter(ContainerManagedEntity cmp) {
+    protected List filterNotcached(ContainerManagedEntity cmp) {
         List oppositeRoles = new ArrayList();
         Iterator it = getLocalRelationshipRoles(cmp).iterator();
         CommonRelationshipRole role, opposite;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledKeyAttributeFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledKeyAttributeFilter.java
index aef838d..93da3ea 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledKeyAttributeFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledKeyAttributeFilter.java
@@ -9,97 +9,54 @@
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.jst.j2ee.ejb.internal.impl;
+
+import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
 
 /**
- * This filter will return a subset of the keyAttributes from the 
- * ContainerManagedEntityExtension that is passed as an argument to the filter method.
- * It will remove any keyAttributes that are held by EjbRelationshipRole objects (including
- * inherited EjbRelationshipRole attributes).
- * That means the returned list of CMPAttributes will be key attributes that were defined locally
- * and all inherited key attributes minus any key attributes pointed to by EjbRelationshipRoles, thus the
- * key attributes will only be key attributes that were defined by the user.
- * Creation date: (11/28/2000 8:09:10 PM)
+ * This filter will return a subset of the keyAttributes from the
+ * ContainerManagedEntityExtension that is passed as an argument to the filter
+ * method. It will remove any keyAttributes that are held by EjbRelationshipRole
+ * objects (including inherited EjbRelationshipRole attributes). That means the
+ * returned list of CMPAttributes will be key attributes that were defined
+ * locally and all inherited key attributes minus any key attributes pointed to
+ * by EjbRelationshipRoles, thus the key attributes will only be key attributes
+ * that were defined by the user. Creation date: (11/28/2000 8:09:10 PM)
+ * 
  * @author: Administrator
  */
 public class ModelledKeyAttributeFilter extends ContainerManagedEntityFilter {
 	private static ModelledKeyAttributeFilter singleton;
-/**
- * filter method comment.
- */
-public List filter(ContainerManagedEntity cmp) {
-	return getSourceAttributes(cmp);
+
+	protected List filterNotcached(ContainerManagedEntity cmp) {
+		return getSourceAttributes(cmp);
+	}
+
+	/**
+	 * Return the proper list of attributes from cmpExt. Return all attributes
+	 * minus those added due to Relationship Roles.
+	 */
+	protected List getSourceAttributes(ContainerManagedEntity cmp) {
+		List all, localRoleKeyAttributes;
+		all = new ArrayList(cmp.getKeyAttributes());
+		localRoleKeyAttributes = cmp
+				.getFilteredFeatures(KeyRelationshipRoleAttributeFilter
+						.singleton());
+		filterRoleAttributesByName(all, localRoleKeyAttributes);
+		return all;
+	}
+
+	/**
+	 * Insert the method's description here. Creation date: (11/28/2000 5:36:00
+	 * PM)
+	 * 
+	 * @return com.ibm.ejs.models.base.extensions.ejbext.impl.ModelledKeyAttributeFilter
+	 */
+	public static ModelledKeyAttributeFilter singleton() {
+		if (singleton == null)
+			singleton = new ModelledKeyAttributeFilter();
+		return singleton;
+	}
 }
-/**
- * Return the proper list of attributes from cmpExt.
- * Return all attributes minus those added due to Relationship Roles.
- */
-protected java.util.List getSourceAttributes(ContainerManagedEntity cmp) {
-	java.util.List all, localRoleKeyAttributes;
-	all = new java.util.ArrayList(cmp.getKeyAttributes());
-	localRoleKeyAttributes = cmp.getFilteredFeatures(KeyRelationshipRoleAttributeFilter.singleton());
-	filterRoleAttributesByName(all, localRoleKeyAttributes);
-	return all;
-}
-/**
- * Insert the method's description here.
- * Creation date: (11/28/2000 5:36:00 PM)
- * @return com.ibm.ejs.models.base.extensions.ejbext.impl.ModelledKeyAttributeFilter
- */
-public static ModelledKeyAttributeFilter singleton() {
-	if (singleton == null)
-		singleton = new ModelledKeyAttributeFilter();
-	return singleton;
-}
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledPersistentAttributeFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledPersistentAttributeFilter.java
index e68e8d0..99d38af 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledPersistentAttributeFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/ModelledPersistentAttributeFilter.java
@@ -9,97 +9,54 @@
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.jst.j2ee.ejb.internal.impl;
+
+import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
 
 /**
- * This filter will return a subset of the persistentAttributes from the 
- * ContainerManagedEntityExtension that is passed as an argument to the filter method.
- * It will remove any persistentAttributes that are held by EjbRelationshipRole objects (including
- * inherited EjbRelationshipRole attributes).
- * That means the returned list of CMPAttributes will be attributes that were defined locally
- * and all inherited attributes minus any attributes pointed to by EjbRelationshipRoles, thus the
- * attributes will only be attributes that were defined by the user.
- * Creation date: (11/28/2000 7:31:42 PM)
- * @author: Administrator
+ * This filter will return a subset of the persistentAttributes from the
+ * ContainerManagedEntityExtension that is passed as an argument to the filter
+ * method. It will remove any persistentAttributes that are held by
+ * EjbRelationshipRole objects (including inherited EjbRelationshipRole
+ * attributes). That means the returned list of CMPAttributes will be attributes
+ * that were defined locally and all inherited attributes minus any attributes
+ * pointed to by EjbRelationshipRoles, thus the attributes will only be
+ * attributes that were defined by the user. 
  */
-public class ModelledPersistentAttributeFilter extends ContainerManagedEntityFilter {
+public class ModelledPersistentAttributeFilter extends
+		ContainerManagedEntityFilter {
+	
 	private static ModelledPersistentAttributeFilter singleton;
-/**
- * filter method comment.
- */
-public List filter(ContainerManagedEntity cmp) {
-	return getSourceAttributes(cmp);
+
+	protected List filterNotcached(ContainerManagedEntity cmp) {
+		return getSourceAttributes(cmp);
+	}
+
+	/**
+	 * Return the proper list of attributes from cmpExt. Return all attributes
+	 * minus those added due to Relationship Roles.
+	 */
+	protected List getSourceAttributes(ContainerManagedEntity cmp) {
+		List all, roleAttributes;
+		all = new ArrayList(cmp.getPersistentAttributes());
+		roleAttributes = cmp
+				.getFilteredFeatures(RelationshipRoleAttributeFilter
+						.singleton());
+		filterRoleAttributesByName(all, roleAttributes);
+		return all;
+	}
+
+	/**
+	 * Insert the method's description here. Creation date: (11/28/2000 5:36:00
+	 * PM)
+	 * 
+	 * @return com.ibm.ejs.models.base.extensions.ejbext.impl.ModelledPersistentAttributeFilter
+	 */
+	public static ModelledPersistentAttributeFilter singleton() {
+		if (singleton == null)
+			singleton = new ModelledPersistentAttributeFilter();
+		return singleton;
+	}
 }
-/**
- * Return the proper list of attributes from cmpExt.
- * Return all attributes minus those added due to Relationship Roles.
- */
-protected java.util.List getSourceAttributes(ContainerManagedEntity cmp) {
-	java.util.List all, roleAttributes;
-	all = new java.util.ArrayList(cmp.getPersistentAttributes());
-	roleAttributes = cmp.getFilteredFeatures(RelationshipRoleAttributeFilter.singleton());
-	filterRoleAttributesByName(all, roleAttributes);
-	return all;
-}
-/**
- * Insert the method's description here.
- * Creation date: (11/28/2000 5:36:00 PM)
- * @return com.ibm.ejs.models.base.extensions.ejbext.impl.ModelledPersistentAttributeFilter
- */
-public static ModelledPersistentAttributeFilter singleton() {
-	if (singleton == null)
-		singleton = new ModelledPersistentAttributeFilter();
-	return singleton;
-}
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/NonKeyRequiredRoleFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/NonKeyRequiredRoleFilter.java
index e31f73c..ad6c029 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/NonKeyRequiredRoleFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/NonKeyRequiredRoleFilter.java
@@ -24,20 +24,11 @@
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
 
 
-/**
- * @author jlanuti
- * 
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
 public class NonKeyRequiredRoleFilter extends ContainerManagedEntityFilter {
 
     private static NonKeyRequiredRoleFilter singleton;
 
-    /**
-     * filter method comment.
-     */
-    public List filter(ContainerManagedEntity cmp) {
+    protected List filterNotcached(ContainerManagedEntity cmp) {
         List roles = new ArrayList();
         Iterator it = getRelationshipRoles(cmp).iterator();
         CommonRelationshipRole role;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/RequiredRelationshipRoleFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/RequiredRelationshipRoleFilter.java
index 1404f3c..42ce821 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/RequiredRelationshipRoleFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/RequiredRelationshipRoleFilter.java
@@ -18,18 +18,11 @@
 import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
 
 
-/**
- * Insert the type's description here. Creation date: (8/6/2001 11:26:10 AM)
- * @author: Administrator
- */
 public class RequiredRelationshipRoleFilter extends ContainerManagedEntityFilter {
 
     private static RequiredRelationshipRoleFilter singleton;
 
-    /**
-     * filter method comment.
-     */
-    public List filter(ContainerManagedEntity cmp) {
+    protected List filterNotcached(ContainerManagedEntity cmp) {
         List roles = new ArrayList();
         Iterator it = getRelationshipRoles(cmp).iterator();
         CommonRelationshipRole role;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/SupertypeCMPAttributeFilter.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/SupertypeCMPAttributeFilter.java
index 7e203cd..7e5236a 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/SupertypeCMPAttributeFilter.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/SupertypeCMPAttributeFilter.java
@@ -18,11 +18,6 @@
 import org.eclipse.jst.j2ee.internal.EjbModuleExtensionHelper;
 
 
-/**
- * Insert the type's description here.
- * Creation date: (11/28/2000 6:54:26 PM)
- * @author: Administrator
- */
 public abstract class SupertypeCMPAttributeFilter extends ContainerManagedEntityFilter {
 /**
  * SupertypeCMPAttributeFilter constructor comment.
@@ -30,10 +25,8 @@
 public SupertypeCMPAttributeFilter() {
 	super();
 }
-/**
- * filter method comment.
- */
-public List filter(ContainerManagedEntity cmp) {
+
+protected List filterNotcached(ContainerManagedEntity cmp) {
 	ContainerManagedEntity supertype = null;
 	EjbModuleExtensionHelper extensionHelper = getEjbModuleExtHelper(cmp);
 	if(extensionHelper != null)
@@ -45,7 +38,7 @@
 /**
  * filter method comment.
  */
-protected java.util.List filterUsingSupertype(ContainerManagedEntity cmp, ContainerManagedEntity supertype) {
+protected List filterUsingSupertype(ContainerManagedEntity cmp, ContainerManagedEntity supertype) {
 	ContainerManagedEntity superEntity = supertype;
 	List result = new ArrayList();
 	Iterator it = getSourceAttributes(cmp).iterator();
@@ -60,7 +53,7 @@
 /**
  * Return the proper list of attributes from cmpExt.
  */
-protected abstract java.util.List getSourceAttributes(ContainerManagedEntity cmp) ;
+protected abstract List getSourceAttributes(ContainerManagedEntity cmp) ;
 /**
  * Return a boolean indicating whether anAttribute also exists in the superEntity.
  */