[226527] fix NPE in jee content providers
diff --git a/plugins/org.eclipse.jst.jee.ui/plugin.xml b/plugins/org.eclipse.jst.jee.ui/plugin.xml
index b9329c5..b5a1e30 100644
--- a/plugins/org.eclipse.jst.jee.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.jee.ui/plugin.xml
@@ -881,9 +881,6 @@
       <viewerActionBinding viewerId="org.eclipse.ui.navigator.ProjectExplorer">
          <includes>
             <actionExtension pattern="org.eclipse.jst.javaee.ui.JEEActionProvider"/>
-            <actionExtension
-                  pattern="org.eclipse.ui.navigator.resources.SAPNewActions">
-            </actionExtension>
          </includes>
       </viewerActionBinding>
    </extension>
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/AppClient5ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/AppClient5ContentProvider.java
index 5670bc6..140c87f 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/AppClient5ContentProvider.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/AppClient5ContentProvider.java
@@ -14,22 +14,11 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
-import org.eclipse.jst.j2ee.navigator.internal.J2EEContentProvider;
 import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
 import org.eclipse.jst.jee.ui.internal.navigator.appclient.GroupAppClientProvider;
 import org.eclipse.jst.jee.ui.internal.navigator.ear.ModulesNode;
-import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
-import org.eclipse.swt.widgets.Display;
 
 /**
  * Ear 5.0 Content provider is Deployment Descriptor content provider, 
@@ -37,13 +26,9 @@
  * 
  * @author Dimitar Giormov
  */
-public class AppClient5ContentProvider  extends J2EEContentProvider implements IResourceChangeListener, IResourceDeltaVisitor{
+public class AppClient5ContentProvider extends JEE5ContentProvider {
 
 	
-	private static final String DD_NAME = "application-client.xml"; //$NON-NLS-1$
-	private static final Class IPROJECT_CLASS = IProject.class;
-	private Viewer viewer;
-
 	public Object[] getChildren(Object aParentElement) {
 		IProject project = null;
 		List children = new ArrayList();
@@ -60,49 +45,8 @@
 		return children.toArray();
 	}
 
-	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
-		viewer = aViewer;
-	}
 
-	@Override
-	public void dispose() {
-		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
-	}
 
-	public void resourceChanged(IResourceChangeEvent event) {
-		try {
-			event.getDelta().accept(this);
-		} catch (CoreException e) {
-			String msg = "Error in the JEEContentProvider.resourceChanged()"; //$NON-NLS-1$
-			JEEUIPlugin.getDefault().logError(msg, e);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
-	 */
-	public boolean visit(IResourceDelta delta) {
-		if (delta.getResource().getType() == IResource.FILE) {
-			IResource resource = delta.getResource();
-			if (DD_NAME.equals(resource.getName())) {
-				Runnable refreshThread = new Runnable(){
-					public void run(){
-						if (viewer != null && ! viewer.getControl().isDisposed()){
-							viewer.refresh();
-						}
-					}
-				};
-				Display.getDefault().asyncExec(refreshThread);
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof GroupAppClientProvider) {
 			return !((GroupAppClientProvider) element).getChildren().isEmpty();
@@ -116,4 +60,8 @@
 		}
 		return null;
 	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
 }
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java
index 26b2271..d79cd50 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ear5ContentProvider.java
@@ -16,22 +16,13 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.j2ee.componentcore.util.EARVirtualComponent;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
-import org.eclipse.jst.j2ee.internal.provider.J2EEUtilityJarItemProvider;
-import org.eclipse.jst.j2ee.navigator.internal.J2EEContentProvider;
 import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
 import org.eclipse.jst.jee.ui.internal.Messages;
 import org.eclipse.jst.jee.ui.internal.navigator.ear.AbstractEarNode;
@@ -39,7 +30,6 @@
 import org.eclipse.jst.jee.ui.internal.navigator.ear.GroupEARProvider;
 import org.eclipse.jst.jee.ui.internal.navigator.ear.ModulesNode;
 import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
@@ -53,13 +43,10 @@
  * 
  * @author Dimitar Giormov
  */
-public class Ear5ContentProvider  extends J2EEContentProvider implements IResourceChangeListener, IResourceDeltaVisitor{
+public class Ear5ContentProvider extends JEE5ContentProvider {
 
-	private static final Class IPROJECT_CLASS = IProject.class;
 	public final static String EAR_DEFAULT_LIB = "lib"; //$NON-NLS-1$
 
-	private Viewer viewer;
-
 	private List getComponentReferencesAsList(List componentTypes, IVirtualComponent virtualComponent, IPath runtimePath) {
 		List components = new ArrayList();
 		IVirtualComponent earComponent = virtualComponent;
@@ -72,10 +59,6 @@
 				if (componentTypes == null || componentTypes.size() == 0) {
 					components.add(refComponents[i]);
 				} else {
-					//                    IPath runPath = refComponents[i].getRuntimePath();
-					//                    if (runPath != null) {
-					//                        if (runPath.equals(runtimePath) && componentTypes.contains(JavaEEProjectUtilities.getJ2EEComponentType(module))) components.add(refComponents[i]);
-					//                    } else 
 					if (componentTypes.contains(JavaEEProjectUtilities.getJ2EEComponentType(module))) {
 						components.add(refComponents[i]);
 					}
@@ -189,49 +172,6 @@
 		return children.toArray();
 	}
 
-	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
-		viewer = aViewer;
-	}
-
-	@Override
-	public void dispose() {
-		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
-	}
-
-	public void resourceChanged(IResourceChangeEvent event) {
-		try {
-			event.getDelta().accept(this);
-		} catch (CoreException e) {
-			String msg = "Error in the JEEContentProvider.resourceChanged()"; //$NON-NLS-1$
-			JEEUIPlugin.getDefault().logError(msg, e);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
-	 */
-	public boolean visit(IResourceDelta delta) {
-		if (delta.getResource().getType() == IResource.FILE) {
-			IResource resource = delta.getResource();
-			if (J2EEUtilityJarItemProvider.isComponentFile(resource)) {
-				Runnable refreshThread = new Runnable(){
-					public void run(){
-						if (viewer != null && ! viewer.getControl().isDisposed()){
-							viewer.refresh();
-						}
-					}
-				};
-				Display.getDefault().asyncExec(refreshThread);
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof AbstractEarNode) {
 			return ((AbstractEarNode) element).getModules().size() > 0;
@@ -246,4 +186,8 @@
 		}
 		return null;
 	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
 }
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ejb3ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ejb3ContentProvider.java
index 07705ed..164ffe5 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ejb3ContentProvider.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Ejb3ContentProvider.java
@@ -11,22 +11,12 @@
 package org.eclipse.jst.jee.ui.internal.navigator;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.j2ee.model.IModelProvider;
-import org.eclipse.jst.j2ee.model.IModelProviderEvent;
-import org.eclipse.jst.j2ee.model.IModelProviderListener;
-import org.eclipse.jst.j2ee.model.ModelProviderManager;
-import org.eclipse.jst.j2ee.navigator.internal.J2EEContentProvider;
 import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
 import org.eclipse.jst.javaee.ejb.EJBJar;
 import org.eclipse.jst.javaee.ejb.EntityBean;
@@ -38,7 +28,6 @@
 import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanNode;
 import org.eclipse.jst.jee.ui.internal.navigator.ejb.GroupEJBProvider;
 import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
@@ -49,236 +38,189 @@
  * 
  * @author Dimitar Giormov
  */
-public class Ejb3ContentProvider extends J2EEContentProvider implements IModelProviderListener{
+public class Ejb3ContentProvider extends JEE5ContentProvider {
 
 
-  private static final Class IPROJECT_CLASS = IProject.class;
+	public Object[] getChildren(Object aParentElement) {
+		List<Object> children = new ArrayList<Object>();
+		IProject project = null;
 
-  private Viewer viewer;
+		if (aParentElement instanceof AbstractGroupProvider) {
+			List lst = ((AbstractGroupProvider) aParentElement).getChildren();
+			children.addAll(lst);
+		} else if (aParentElement instanceof AbstractDDNode) {
+			List lst = ((AbstractDDNode) aParentElement).getChildren();
+			children.addAll(lst);
+		} else if (aParentElement instanceof SessionBean) {
+			SessionBean sb = ((SessionBean)aParentElement);
+			addSessionBeanSubNodes(sb, children);
 
-  private static HashMap<IProject, IModelProvider> groupProvidersMap = new HashMap<IProject, IModelProvider>();
+		} else if (aParentElement instanceof EntityBean) {
+			EntityBean eb = ((EntityBean)aParentElement);
 
-  public Object[] getChildren(Object aParentElement) {
- 
-    List<Object> children = new ArrayList<Object>();
-    IProject project = null;
+			addEntityBeanSubNodes(eb, children);
 
-    if (aParentElement instanceof AbstractGroupProvider) {
-      List lst = ((AbstractGroupProvider) aParentElement).getChildren();
-      children.addAll(lst);
-    } else if (aParentElement instanceof AbstractDDNode) {
-      List lst = ((AbstractDDNode) aParentElement).getChildren();
-      children.addAll(lst);
-    } else if (aParentElement instanceof SessionBean) {
-      SessionBean sb = ((SessionBean)aParentElement);
-      addSessionBeanSubNodes(sb, children);
+		} else if (aParentElement instanceof MessageDrivenBean) {
+			Object msgBean = new BeanNode((MessageDrivenBean) aParentElement);
+			addActivationConfigProperties((MessageDrivenBean) aParentElement, children);
+			children.add(msgBean);
+		} else 
+			if (aParentElement instanceof IAdaptable) {
+				project = (IProject) ((IAdaptable) aParentElement)
+				.getAdapter(IPROJECT_CLASS);
+				if (project != null) {
+					if (isEjbModuleProject(project)) {
+						IModelProvider modelProvider = getCachedModelProvider(project);
+						GroupEJBProvider element = new GroupEJBProvider((EJBJar) modelProvider.getModelObject());
+						element.setProjectName(project.getName());
+						children.add(element);
+					}
+				}
+			}
+		return children.toArray();
+	}
 
-    } else if (aParentElement instanceof EntityBean) {
-      EntityBean eb = ((EntityBean)aParentElement);
-      
-      addEntityBeanSubNodes(eb, children);
+	private void addActivationConfigProperties(MessageDrivenBean parentElement,
+			List<Object> children) {
+		if (parentElement.getActivationConfig() != null && parentElement.getActivationConfig().getActivationConfigProperties() != null && !parentElement.getActivationConfig().getActivationConfigProperties().isEmpty()){
+			children.add(new ActivationConfigProperties(parentElement.getActivationConfig().getActivationConfigProperties()));
+		}
+	}
 
-    } else if (aParentElement instanceof MessageDrivenBean) {
-      Object msgBean = new BeanNode((MessageDrivenBean) aParentElement);
-      addActivationConfigProperties((MessageDrivenBean) aParentElement, children);
-      children.add(msgBean);
-    } else 
-      if (aParentElement instanceof IAdaptable) {
-        project = (IProject) ((IAdaptable) aParentElement)
-        .getAdapter(IPROJECT_CLASS);
-        if (project != null) {
-          if (isEjbModuleProject(project)) {
-            IModelProvider modelProvider = (IModelProvider) groupProvidersMap.get(project);
-            if (modelProvider != null) {
-              GroupEJBProvider element = new GroupEJBProvider((EJBJar) modelProvider.getModelObject());
-              element.setProjectName(project.getName());
-              children.add(element);
-            } else {
-              modelProvider = ModelProviderManager.getModelProvider(project);
-              modelProvider.addListener(this);
-              GroupEJBProvider element = new GroupEJBProvider((EJBJar) modelProvider.getModelObject());
-              element.setProjectName(project.getName());
-              children.add(element);
-              groupProvidersMap.put(project, modelProvider);
-            }
-          }
-        }
-      }
-    return children.toArray();
-  }
+	private void addEntityBeanSubNodes(EntityBean eb, List<Object> children) {
+		if (eb.getLocal() != null) {
+			children.add(new BeanInterfaceNode(eb, (String)eb.getLocal(), BeanInterfaceNode.KINDS.LOCAL));
+		}
+		if (eb.getLocalHome() != null) {
+			children.add(new BeanInterfaceNode(eb, (String)eb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME));
+		}
 
-  private void addActivationConfigProperties(MessageDrivenBean parentElement,
-      List<Object> children) {
-    if (parentElement.getActivationConfig() != null && parentElement.getActivationConfig().getActivationConfigProperties() != null && !parentElement.getActivationConfig().getActivationConfigProperties().isEmpty()){
-      children.add(new ActivationConfigProperties(parentElement.getActivationConfig().getActivationConfigProperties()));
-    }
-  }
-
-  private void addEntityBeanSubNodes(EntityBean eb, List<Object> children) {
-    if (eb.getLocal() != null) {
-      children.add(new BeanInterfaceNode(eb, (String)eb.getLocal(), BeanInterfaceNode.KINDS.LOCAL));
-    }
-    if (eb.getLocalHome() != null) {
-      children.add(new BeanInterfaceNode(eb, (String)eb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME));
-    }
-
-    if (eb.getRemote() != null) {
-      children.add(new BeanInterfaceNode(eb, (String)eb.getRemote(), BeanInterfaceNode.KINDS.REMOTE));
-    }
-    if (eb.getHome() != null) {
-      children.add(new BeanInterfaceNode(eb, (String)eb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME));
-    }
+		if (eb.getRemote() != null) {
+			children.add(new BeanInterfaceNode(eb, (String)eb.getRemote(), BeanInterfaceNode.KINDS.REMOTE));
+		}
+		if (eb.getHome() != null) {
+			children.add(new BeanInterfaceNode(eb, (String)eb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME));
+		}
 
 
-    children.add(new BeanNode((EntityBean) eb));
-    
-  }
+		children.add(new BeanNode((EntityBean) eb));
 
-  private void addSessionBeanSubNodes(SessionBean sb, List children) {
-    addClassRelatedInfo(sb, children);
-    addSessionJNDIRefInfo(sb, children);
-  }
+	}
 
-  private void addSessionJNDIRefInfo(SessionBean sb, List children) {
-    if (sb.getEjbLocalRefs() != null && !sb.getEjbLocalRefs().isEmpty()){
-      children.add(new JndiRefNode(sb.getEjbLocalRefs(), KINDS.EJBLOCALREF));
-    }
-    
-    if (sb.getEjbRefs() != null && !sb.getEjbRefs().isEmpty()){
-      children.add(new JndiRefNode(sb.getEjbRefs(), KINDS.EJBREF));
-    }
-    
-    if (sb.getResourceEnvRefs() != null && !sb.getResourceEnvRefs().isEmpty()){
-      children.add(new JndiRefNode(sb.getResourceEnvRefs(), KINDS.RESENVENTY));
-    }
-    if (sb.getEnvEntries() != null && !sb.getEnvEntries().isEmpty()){
-      children.add(new JndiRefNode(sb.getEnvEntries(), KINDS.ENVENTRY));
-    }
-    
-    if (sb.getResourceRefs() != null && !sb.getResourceRefs().isEmpty()){
-      children.add(new JndiRefNode(sb.getResourceRefs(), KINDS.RESREF));
-    }
-    
-    if (sb.getServiceRefs() != null && !sb.getServiceRefs().isEmpty()){
-      children.add(new JndiRefNode(sb.getServiceRefs(), KINDS.SERVICEREF));
-    }
-  }
-  
-  private void addSessionJNDIRefInfo(EntityBean eb, List children) {
-    if (eb.getEjbLocalRefs() != null && !eb.getEjbLocalRefs().isEmpty()){
-      children.add(new JndiRefNode(eb.getEjbLocalRefs(), KINDS.EJBLOCALREF));
-    }
-    
-    if (eb.getEjbRefs() != null && !eb.getEjbRefs().isEmpty()){
-      children.add(new JndiRefNode(eb.getEjbRefs(), KINDS.EJBREF));
-    }
-    
-    if (eb.getResourceEnvRefs() != null && !eb.getResourceEnvRefs().isEmpty()){
-      children.add(new JndiRefNode(eb.getResourceEnvRefs(), KINDS.RESENVENTY));
-    }
-    if (eb.getEnvEntries() != null && !eb.getEnvEntries().isEmpty()){
-      children.add(new JndiRefNode(eb.getEnvEntries(), KINDS.ENVENTRY));
-    }
-    
-    if (eb.getResourceRefs() != null && !eb.getResourceRefs().isEmpty()){
-      children.add(new JndiRefNode(eb.getResourceRefs(), KINDS.RESREF));
-    }
-    
-    if (eb.getServiceRefs() != null && !eb.getServiceRefs().isEmpty()){
-      children.add(new JndiRefNode(eb.getServiceRefs(), KINDS.SERVICEREF));
-    }
-  }
+	private void addSessionBeanSubNodes(SessionBean sb, List children) {
+		addClassRelatedInfo(sb, children);
+		addSessionJNDIRefInfo(sb, children);
+	}
 
-  private void addClassRelatedInfo(SessionBean sb, List children) {
-    if (sb.getLocal() != null) {
-      children.add(new BeanInterfaceNode(sb, (String)sb.getLocal(), BeanInterfaceNode.KINDS.LOCAL));
-    }
-    if (sb.getLocalHome() != null) {
-      children.add(new BeanInterfaceNode(sb, (String)sb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME));
-    }
+	private void addSessionJNDIRefInfo(SessionBean sb, List children) {
+		if (sb.getEjbLocalRefs() != null && !sb.getEjbLocalRefs().isEmpty()){
+			children.add(new JndiRefNode(sb.getEjbLocalRefs(), KINDS.EJBLOCALREF));
+		}
 
-    if (sb.getRemote() != null) {
-      children.add(new BeanInterfaceNode(sb, (String)sb.getRemote(), BeanInterfaceNode.KINDS.REMOTE));
-    }
-    if (sb.getHome() != null) {
-      children.add(new BeanInterfaceNode(sb, (String)sb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME));
-    }
+		if (sb.getEjbRefs() != null && !sb.getEjbRefs().isEmpty()){
+			children.add(new JndiRefNode(sb.getEjbRefs(), KINDS.EJBREF));
+		}
+
+		if (sb.getResourceEnvRefs() != null && !sb.getResourceEnvRefs().isEmpty()){
+			children.add(new JndiRefNode(sb.getResourceEnvRefs(), KINDS.RESENVENTY));
+		}
+		if (sb.getEnvEntries() != null && !sb.getEnvEntries().isEmpty()){
+			children.add(new JndiRefNode(sb.getEnvEntries(), KINDS.ENVENTRY));
+		}
+
+		if (sb.getResourceRefs() != null && !sb.getResourceRefs().isEmpty()){
+			children.add(new JndiRefNode(sb.getResourceRefs(), KINDS.RESREF));
+		}
+
+		if (sb.getServiceRefs() != null && !sb.getServiceRefs().isEmpty()){
+			children.add(new JndiRefNode(sb.getServiceRefs(), KINDS.SERVICEREF));
+		}
+	}
+
+	private void addSessionJNDIRefInfo(EntityBean eb, List children) {
+		if (eb.getEjbLocalRefs() != null && !eb.getEjbLocalRefs().isEmpty()){
+			children.add(new JndiRefNode(eb.getEjbLocalRefs(), KINDS.EJBLOCALREF));
+		}
+
+		if (eb.getEjbRefs() != null && !eb.getEjbRefs().isEmpty()){
+			children.add(new JndiRefNode(eb.getEjbRefs(), KINDS.EJBREF));
+		}
+
+		if (eb.getResourceEnvRefs() != null && !eb.getResourceEnvRefs().isEmpty()){
+			children.add(new JndiRefNode(eb.getResourceEnvRefs(), KINDS.RESENVENTY));
+		}
+		if (eb.getEnvEntries() != null && !eb.getEnvEntries().isEmpty()){
+			children.add(new JndiRefNode(eb.getEnvEntries(), KINDS.ENVENTRY));
+		}
+
+		if (eb.getResourceRefs() != null && !eb.getResourceRefs().isEmpty()){
+			children.add(new JndiRefNode(eb.getResourceRefs(), KINDS.RESREF));
+		}
+
+		if (eb.getServiceRefs() != null && !eb.getServiceRefs().isEmpty()){
+			children.add(new JndiRefNode(eb.getServiceRefs(), KINDS.SERVICEREF));
+		}
+	}
+
+	private void addClassRelatedInfo(SessionBean sb, List children) {
+		if (sb.getLocal() != null) {
+			children.add(new BeanInterfaceNode(sb, (String)sb.getLocal(), BeanInterfaceNode.KINDS.LOCAL));
+		}
+		if (sb.getLocalHome() != null) {
+			children.add(new BeanInterfaceNode(sb, (String)sb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME));
+		}
+
+		if (sb.getRemote() != null) {
+			children.add(new BeanInterfaceNode(sb, (String)sb.getRemote(), BeanInterfaceNode.KINDS.REMOTE));
+		}
+		if (sb.getHome() != null) {
+			children.add(new BeanInterfaceNode(sb, (String)sb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME));
+		}
 
 
-    children.add(new BeanNode((SessionBean) sb));
-    List r = sb.getBusinessLocals();
-    for (Object locals : r) {
-      children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_LOCAL));
-    }
-    r = sb.getBusinessRemotes();
-    for (Object locals : r) {
-      children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_REMOTE));
-    }
-  }
+		children.add(new BeanNode((SessionBean) sb));
+		List r = sb.getBusinessLocals();
+		for (Object locals : r) {
+			children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_LOCAL));
+		}
+		r = sb.getBusinessRemotes();
+		for (Object locals : r) {
+			children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_REMOTE));
+		}
+	}
 
-  private boolean isEjbModuleProject(IProject project) {
-    try {
-      IFacetedProject facetedProject = ProjectFacetsManager.create(project);
-      IProjectFacetVersion installedVersion = facetedProject.getInstalledVersion(ProjectFacetsManager.getProjectFacet(IJ2EEFacetConstants.EJB).getVersion(IJ2EEFacetConstants.EJB_30.getVersionString()).getProjectFacet());
-      return installedVersion != null;
-    } catch (CoreException e) {
-      JEEUIPlugin.logError("Can not acces project", e); //$NON-NLS-1$
-    }
-    return false;
-  }
+	private boolean isEjbModuleProject(IProject project) {
+		try {
+			IFacetedProject facetedProject = ProjectFacetsManager.create(project);
+			IProjectFacetVersion installedVersion = facetedProject.getInstalledVersion(ProjectFacetsManager.getProjectFacet(IJ2EEFacetConstants.EJB).getVersion(IJ2EEFacetConstants.EJB_30.getVersionString()).getProjectFacet());
+			return installedVersion != null;
+		} catch (CoreException e) {
+			JEEUIPlugin.logError("Can not acces project", e); //$NON-NLS-1$
+		}
+		return false;
+	}
 
-  public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
-    viewer = aViewer;
-  }
+	public boolean hasChildren(Object element) {
+		if (element instanceof AbstractGroupProvider) {
+			return ((AbstractGroupProvider) element).hasChildren();
+		} else if (element instanceof AbstractDDNode) {
+			return ((AbstractDDNode) element).hasChildren();
+		} else if (element instanceof SessionBean) {
+			return true;
+		} else if (element instanceof EntityBean) {
+			return true;
+		}else if (element instanceof MessageDrivenBean) {
+			return true;
+		} else
+			return false;
+	}
 
-  @Override
-  public boolean hasChildren(Object element) {
-    if (element instanceof AbstractGroupProvider) {
-      return ((AbstractGroupProvider) element).hasChildren();
-    } else if (element instanceof AbstractDDNode) {
-      return ((AbstractDDNode) element).hasChildren();
-    } else if (element instanceof SessionBean) {
-      return true;
-    } else if (element instanceof EntityBean) {
-      return true;
-    }else if (element instanceof MessageDrivenBean) {
-      return true;
-    } else
-      return false;
-  }
+	public Object getParent(Object element) {
+		return null;
+	}
 
-  public void projectChanged(final IProject project) {
-    // TODO refresh only the Deployment Description tree of the affected
-    // project instead of the DD tree of all projects.
-    //		j2eeRefreshContent();
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
 
-    try {
-      Runnable refreshThread = new Runnable() {
-        public void run() {
-          if (viewer != null) {
-            ISelection sel = ((TreeViewer) viewer).getSelection();
-            ITreeContentProvider contentProvider = ((ITreeContentProvider) ((TreeViewer) viewer)
-                .getContentProvider());
-            contentProvider.getChildren(project);
-            ((StructuredViewer) viewer).refresh(project);
-            ((TreeViewer) viewer).setSelection(sel);
-          }
-        }
-      };
-      Display.getDefault().asyncExec(refreshThread);
-    } catch (Exception e) {
-      JEEUIPlugin.logError("Error during refresh", e); //$NON-NLS-1$
-    }
-  }
-
-  public void modelsChanged(IModelProviderEvent event) {
-    projectChanged(event.getProject());
-
-  }
-
-@Override
-public void dispose() {
-	groupProvidersMap.clear();
-}
-
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/JEE5ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/JEE5ContentProvider.java
new file mode 100644
index 0000000..1d78e4c
--- /dev/null
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/JEE5ContentProvider.java
@@ -0,0 +1,117 @@
+/***********************************************************************
+ * Copyright (c) 2008 by SAP AG, Walldorf. 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     SAP AG - initial API and implementation
+ ***********************************************************************/
+package org.eclipse.jst.jee.ui.internal.navigator;
+
+import java.util.HashMap;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jst.j2ee.model.IModelProvider;
+import org.eclipse.jst.j2ee.model.IModelProviderEvent;
+import org.eclipse.jst.j2ee.model.IModelProviderListener;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.j2ee.navigator.internal.EMFRootObjectProvider.IRefreshHandlerListener;
+import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.progress.UIJob;
+
+public abstract class JEE5ContentProvider implements ITreeContentProvider, IRefreshHandlerListener, IModelProviderListener {
+
+	protected Viewer viewer;
+	protected static final Class IPROJECT_CLASS = IProject.class;
+	
+	protected static HashMap<IProject, IModelProvider> groupProvidersMap = new HashMap<IProject, IModelProvider>();
+
+
+	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
+		viewer = aViewer;
+	}
+	
+	
+	protected IModelProvider getCachedModelProvider(IProject project) {
+		IModelProvider provider = groupProvidersMap.get(project);
+		if (provider != null){
+			Object mObj = provider.getModelObject();
+		} else{
+			provider = ModelProviderManager.getModelProvider(project);
+			provider.addListener(this);
+			groupProvidersMap.put(project,provider);
+		}
+		return provider;
+	}
+
+	public void projectChanged(final IProject project) {
+		try {
+			Runnable refreshThread = new Runnable() {
+				public void run() {
+					if (viewer != null) {
+						ISelection sel = ((TreeViewer) viewer).getSelection();
+						ITreeContentProvider contentProvider = ((ITreeContentProvider) ((TreeViewer) viewer)
+								.getContentProvider());
+						contentProvider.getChildren(project);
+						((StructuredViewer) viewer).refresh(project);
+						((TreeViewer) viewer).setSelection(sel);
+					}
+				}
+			};
+			Display.getDefault().asyncExec(refreshThread);
+		} catch (Exception e)
+		{
+			JEEUIPlugin.logError("Error during refresh", e); //$NON-NLS-1$
+		}
+	}
+
+	public void modelsChanged(IModelProviderEvent event) {
+		projectChanged(event.getProject());
+	}
+
+	public void onRefresh(final Object element) {
+		if (viewer instanceof AbstractTreeViewer) {
+			if (Display.getCurrent() != null) {
+				((AbstractTreeViewer) viewer).refresh(element, true);
+			} else {
+				/* Create and schedule a UI Job to update the Navigator Content Viewer */
+				Job job = new UIJob("Update the Navigator Content Viewer Job") { //$NON-NLS-1$
+					public IStatus runInUIThread(IProgressMonitor monitor) {
+						((AbstractTreeViewer) viewer).refresh(element, true);
+						return Status.OK_STATUS;
+					}
+				};
+				ISchedulingRule rule = new ISchedulingRule() {
+					public boolean contains(ISchedulingRule rule) {
+						return rule == this;	
+					}
+					public boolean isConflicting(ISchedulingRule rule) {
+						return rule == this;
+					}
+				};
+				if (rule != null) {
+					job.setRule(rule);
+				}
+				job.schedule();
+			}
+		}
+	}
+	
+	public void dispose() {
+		groupProvidersMap.clear();
+	}
+}
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
index a2faab6..3f2b84b 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/OpenJEEResourceAction.java
@@ -46,6 +46,7 @@
 import org.eclipse.jst.jee.ui.internal.navigator.ear.GroupEARProvider;
 import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanInterfaceNode;
 import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanNode;
+import org.eclipse.jst.jee.ui.internal.navigator.ejb.GroupEJBProvider;
 import org.eclipse.jst.jee.ui.internal.navigator.web.WebAppProvider;
 import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
 import org.eclipse.ui.IEditorDescriptor;
@@ -106,6 +107,9 @@
 			IType findType;
 			try {
 				findType = JavaCore.create(project).findType(c);
+				if(findType == null){
+					return;
+				}
 				openAppropriateEditor(findType.getResource());
 			} catch (JavaModelException e) {
 				JEEUIPlugin.logError("Error during open editor", e); //$NON-NLS-1$
@@ -211,30 +215,7 @@
         	return;
 		}
 		if (srcObject instanceof EObject) {
-			EObject ro = (EObject) srcObject;
-			IResource resource = WorkbenchResourceHelper
-			.getFile((EObject) srcObject);
-			if (resource != null) {
-				openAppropriateEditor(resource);
-			} else {
-				ModuleFile moduleFile = ArchiveUtil.getModuleFile(ro);
-				if (moduleFile != null) {
-					ArchiveOptions options = moduleFile.getOptions();
-					if (options instanceof ComponentArchiveOptions) {
-						IVirtualComponent component = ((ComponentArchiveOptions) options)
-						.getComponent();
-						openAppropriateEditor(component);
-					}
-				} else {
-					IArchive archive = JavaEEArchiveUtilities.findArchive(ro);
-					if(archive != null){
-						IVirtualComponent component = JavaEEArchiveUtilities.findComponent(archive);
-						if(component != null){
-							openAppropriateEditor(component);
-						}
-					}
-				}
-			}
+			openEObject((EObject) srcObject);
 		} else if (srcObject instanceof BeanInterfaceNode) {
 			openAppropriateEditor(((BeanInterfaceNode) srcObject).get_fqn());
 			return;
@@ -248,6 +229,8 @@
 				openAppropriateEditor(file);
 				return;
 			}
+		} else if (srcObject instanceof GroupEJBProvider) {
+			openEObject((EObject) ((GroupEJBProvider)srcObject).getEjbJar());
 		} else if (srcObject instanceof GroupEARProvider) {
 			IFile file = ((GroupEARProvider) srcObject).getDDFile();
 			if (file.isAccessible()){
@@ -266,6 +249,34 @@
 					.getFile((Resource) srcObject));
 	}
 
+	private void openEObject(EObject _srcObject) {
+		EObject ro = (EObject) _srcObject;
+		IResource resource = WorkbenchResourceHelper
+		.getFile((EObject) _srcObject);
+		if (resource != null) {
+			openAppropriateEditor(resource);
+		} else {
+			ModuleFile moduleFile = ArchiveUtil.getModuleFile(ro);
+			if (moduleFile != null) {
+				ArchiveOptions options = moduleFile.getOptions();
+				if (options instanceof ComponentArchiveOptions) {
+					IVirtualComponent component = ((ComponentArchiveOptions) options)
+					.getComponent();
+					openAppropriateEditor(component);
+				}
+			} else {
+				IArchive archive = JavaEEArchiveUtilities.findArchive(ro);
+				if(archive != null){
+					IVirtualComponent component = JavaEEArchiveUtilities.findComponent(archive);
+					if(component != null){
+						openAppropriateEditor(component);
+					}
+				}
+			}
+		}
+		
+	}
+
 	/**
 	 * The structured selection has changed in the workbench. Subclasses should
 	 * override this method to react to the change. Returns true if the action
@@ -374,12 +385,17 @@
 						contentType);
 			} else {
 				if(((EObject) beanInterface).eResource() != null){
-					String name = (new Path(((EObject) beanInterface).eResource().getURI()
-							.toString())).lastSegment();
+					String name = (new Path(((EObject) beanInterface).eResource().getURI().toString())).lastSegment();
 					currentDescriptor = registry.getDefaultEditor(name, null);
 				} else {
-					currentDescriptor = null;
-					return false;
+					String fqn = ((BeanInterfaceNode) obj).get_fqn();
+					if (fqn != null){
+						currentDescriptor = registry.getDefaultEditor(((BeanInterfaceNode) obj).getText(), null);
+//						return true;
+					} else {
+						return false;
+					}
+					
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Web25ContentProvider.java b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Web25ContentProvider.java
index 01d0f91..ea9e7b9 100644
--- a/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Web25ContentProvider.java
+++ b/plugins/org.eclipse.jst.jee.ui/src/org/eclipse/jst/jee/ui/internal/navigator/Web25ContentProvider.java
@@ -12,25 +12,13 @@
 
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.j2ee.model.IModelProvider;
-import org.eclipse.jst.j2ee.model.IModelProviderEvent;
-import org.eclipse.jst.j2ee.model.IModelProviderListener;
-import org.eclipse.jst.j2ee.model.ModelProviderManager;
-import org.eclipse.jst.j2ee.navigator.internal.J2EEContentProvider;
 import org.eclipse.jst.javaee.web.WebApp;
 import org.eclipse.jst.jee.ui.internal.navigator.web.WebAppProvider;
-import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
-import org.eclipse.swt.widgets.Display;
 
 /**
  * Web 2.5 Content provider is Deployment Descriptor content provider, 
@@ -38,15 +26,8 @@
  * 
  * @author Dimitar Giormov
  */
-public class Web25ContentProvider extends J2EEContentProvider implements IModelProviderListener {
+public class Web25ContentProvider extends JEE5ContentProvider {
 
-	private static final Class IPROJECT_CLASS = IProject.class;
-
-	private Viewer viewer;
-
-	private static HashMap<IProject, IModelProvider> groupProvidersMap = new HashMap<IProject, IModelProvider>();
-
-	@Override
 	public Object[] getChildren(Object aParentElement) {
 
 		List<Object> children = new ArrayList<Object>();
@@ -54,18 +35,9 @@
 		if (aParentElement instanceof IAdaptable) {
 			project = (IProject) ((IAdaptable) aParentElement).getAdapter(IPROJECT_CLASS);
 			if (project != null) {
-			         IModelProvider provider = groupProvidersMap.get(project);
-					if (provider != null){
-					    Object mObj = provider.getModelObject();
-						children.add(new WebAppProvider((WebApp) mObj,project));
-					} else{
-						provider = ModelProviderManager.getModelProvider(project);
-						provider.addListener(this);
-						Object mObj = provider.getModelObject();
-						WebAppProvider webProvider = new WebAppProvider((WebApp) mObj,project);
-						children.add(webProvider);
-						groupProvidersMap.put(project,provider);
-					}
+				IModelProvider provider = getCachedModelProvider(project);
+			    Object mObj = provider.getModelObject();
+				children.add(new WebAppProvider((WebApp) mObj,project));
 			}
 		} else if (aParentElement instanceof WebAppProvider){
 			children.addAll(((WebAppProvider) aParentElement).getChildren());
@@ -75,17 +47,7 @@
 		return children.toArray();
 	}
 
-	public void inputChanged(Viewer aViewer, Object anOldInput, Object aNewInput) {
-		viewer = aViewer;
-	}
 
-	@Override
-	public void dispose() {
-		groupProvidersMap.clear();
-		
-	}
-
-	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof WebAppProvider) {
 			return true;
@@ -95,49 +57,11 @@
 			return false;
 	}
 
-	private void j2eeRefreshContent() {
-		try {
-			Runnable refreshThread = new Runnable() {
-				public void run() {
-					viewer.refresh();
-				}
-			};
-			Display.getDefault().asyncExec(refreshThread);
-		} catch (Exception e) {
-			 JEEUIPlugin.logError("Error during refresh", e); //$NON-NLS-1$
-		}
+	public Object getParent(Object element) {
+		return null;
 	}
 
-	public void projectChanged(final IProject project) {
-		// TODO refresh only the Deployment Description tree of the affected 
-		// project instead of the DD tree of all projects. 
-//		j2eeRefreshContent();
-
-		try
-		{
-			Runnable refreshThread = new Runnable()
-			{
-				public void run()
-				{
-				  if (viewer != null) {
-		            ISelection sel = ((TreeViewer) viewer).getSelection();
-		            ITreeContentProvider contentProvider = ((ITreeContentProvider) ((TreeViewer) viewer)
-		                .getContentProvider());
-		            contentProvider.getChildren(project);
-		            ((StructuredViewer) viewer).refresh(project);
-		            ((TreeViewer) viewer).setSelection(sel);
-		          }
-		        }
-			};
-			Display.getDefault().asyncExec(refreshThread);
-		} catch (Exception e)
-		{
-			JEEUIPlugin.logError("Error during refresh", e); //$NON-NLS-1$
-		}
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
 	}
-
-  public void modelsChanged(IModelProviderEvent event) {
-    projectChanged(event.getProject());
-    
-  }
 }
diff --git a/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProvider.java b/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProvider.java
index 40a369c..212bd70 100644
--- a/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProvider.java
+++ b/plugins/org.eclipse.jst.jee.web/web/org/eclipse/jst/jee/model/internal/Web25MergedModelProvider.java
@@ -14,8 +14,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
 import org.eclipse.jst.j2ee.model.IModelProvider;
 import org.eclipse.jst.j2ee.model.IModelProviderEvent;
 import org.eclipse.jst.javaee.web.WebApp;
@@ -174,12 +172,7 @@
 			WebAppMerger merger;
 			if (mergedModel == null) {
 				mergedModel = (WebApp) WebFactory.eINSTANCE.createWebApp();
-				Resource resourceDD = ((EObject)ddModel).eResource();
-				Resource resourceMM = ((EObject)mergedModel).eResource();
-				if (resourceDD != null && resourceMM == null){
-				  ResourceImpl resRes = new ResourceImpl(resourceDD.getURI());
-				  resRes.getContents().add((EObject)mergedModel);
-			    }
+				initMergedModelResource((EObject) ddModel);
 			} else {
 				clearModel(mergedModel);
 
@@ -194,5 +187,4 @@
 		}
 		return mergedModel;
 	}
-
 }
diff --git a/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java b/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java
index 0995b28..beed63d 100644
--- a/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java
+++ b/plugins/org.eclipse.jst.jee/common/org/eclipse/jst/jee/model/internal/common/AbstractMergedModelProvider.java
@@ -17,6 +17,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
 import org.eclipse.jst.j2ee.model.IModelProvider;
 import org.eclipse.jst.j2ee.model.IModelProviderEvent;
 import org.eclipse.jst.j2ee.model.IModelProviderListener;
@@ -210,6 +213,16 @@
 		isOnceDisposed = false;
 		return merge(ddModel, annotationModel);
 	}
+	
+	protected void initMergedModelResource(EObject ddModel) {
+		Resource resourceDD = ddModel.eResource();
+		Resource resourceMM = ((EObject)mergedModel).eResource();
+		if (resourceDD != null && resourceMM == null){
+		  ResourceImpl resRes = new ResourceImpl(resourceDD.getURI());
+		  resRes.getContents().add((EObject)mergedModel);
+	    }
+		
+	}
 
 	/**
 	 * The method is used for enabling notifications from the internalProviders.