[346300] Create EJB Client Jar action creates an empty project but with no source code or interfaces
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.j2ee.ejb/META-INF/MANIFEST.MF
index f5a9ac0..be3ee27 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.j2ee.ejb/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.jst.j2ee.ejb; singleton:=true
-Bundle-Version: 1.1.207.qualifier
+Bundle-Version: 1.1.208.qualifier
 Bundle-Activator: org.eclipse.jst.j2ee.ejb.internal.plugin.EjbPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejbarchive/org/eclipse/jst/j2ee/internal/ejb/archiveoperations/EJBClientJarCreationHelper.java b/plugins/org.eclipse.jst.j2ee.ejb/ejbarchive/org/eclipse/jst/j2ee/internal/ejb/archiveoperations/EJBClientJarCreationHelper.java
index 21b4937..7d42960 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejbarchive/org/eclipse/jst/j2ee/internal/ejb/archiveoperations/EJBClientJarCreationHelper.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejbarchive/org/eclipse/jst/j2ee/internal/ejb/archiveoperations/EJBClientJarCreationHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * 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
@@ -47,6 +47,12 @@
 import org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit;
 import org.eclipse.jst.j2ee.ejb.internal.plugin.EjbPlugin;
 import org.eclipse.jst.j2ee.internal.ejb.project.operations.ClientJARCreationConstants;
+import org.eclipse.jst.j2ee.model.IModelProvider;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.javaee.ejb.EnterpriseBeans;
+import org.eclipse.jst.javaee.ejb.EntityBean;
+import org.eclipse.jst.javaee.ejb.SessionBean;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 
 public class EJBClientJarCreationHelper {
@@ -65,29 +71,51 @@
 	
 	public Map getFilesToMove() {
 		
-		
 	    searchHelper = new MySearchHelper(searchEngine, computeBeanTypeNames());
 	
-
 		if( ejbProject.exists() && ejbProject.isAccessible()){
-			EJBArtifactEdit edit = null;
-			try {
-					edit = EJBArtifactEdit.getEJBArtifactEditForRead(ejbProject);
-					EJBJar ejbJar = edit.getEJBJar();
-					if (ejbJar != null) {
-						List enterpriseBeans = ejbJar.getEnterpriseBeans();
-						for (int i = 0; i < enterpriseBeans.size(); i++) {
-							EnterpriseBean ejb = (EnterpriseBean) enterpriseBeans.get(i);
-							computeJavaTypes(ejb);
+			if (JavaEEProjectUtilities.isLegacyJ2EEComponent(ComponentCore.createComponent(ejbProject))) { // the project is older than Java EE 5, i.e. EJB 2.1
+				EJBArtifactEdit edit = null;
+				try {
+						edit = EJBArtifactEdit.getEJBArtifactEditForRead(ejbProject);
+						EJBJar ejbJar = edit.getEJBJar();
+						if (ejbJar != null) {
+							List enterpriseBeans = ejbJar.getEnterpriseBeans();
+							for (int i = 0; i < enterpriseBeans.size(); i++) {
+								EnterpriseBean ejb = (EnterpriseBean) enterpriseBeans.get(i);
+								computeJavaTypes(ejb);
+							}
+						}
+						computeRMICJavaTypes();					
+	
+				} finally {
+					if(edit != null)
+						edit.dispose();
+						  
+				}
+			} 
+			else { // we have an EJB 3.x project, so use the new model for the EJB module
+				IModelProvider modelProvider = ModelProviderManager.getModelProvider(ejbProject);
+				org.eclipse.jst.javaee.ejb.EJBJar ejbJar = (org.eclipse.jst.javaee.ejb.EJBJar) modelProvider.getModelObject();
+				
+				if (ejbJar != null) {
+					EnterpriseBeans enterpriseBeans = ejbJar.getEnterpriseBeans();
+					if (enterpriseBeans != null){
+						List<SessionBean> sessionBeans = enterpriseBeans.getSessionBeans();
+						for (SessionBean sessionBean : sessionBeans) {
+							computeJavaTypes(sessionBean);
+						}
+						
+						List<EntityBean> entityBeans = enterpriseBeans.getEntityBeans();
+						for (EntityBean entityBean : entityBeans) {
+							computeJavaTypes(entityBean);
 						}
 					}
-					computeRMICJavaTypes();					
-
-			} finally {
-				if(edit != null)
-					edit.dispose();
-					  
+				}
+				computeRMICJavaTypes();			
+				
 			}
+			
 		}
 		return javaFilesToMove;
 	}
@@ -164,6 +192,57 @@
 			computeJavaTypes(((Entity)ejb).getPrimaryKey());
 	}
 	
+	private void computeJavaTypes(EntityBean entityBean) {
+		
+		computeJavaTypes(entityBean.getHome());
+		computeJavaTypes(entityBean.getLocalHome());
+		computeJavaTypes(entityBean.getLocal());
+		computeJavaTypes(entityBean.getRemote());
+		
+		computeJavaTypes(entityBean.getPrimkeyField());
+		
+	}
+
+	private void computeJavaTypes(String fqClassName) {
+		if (fqClassName == null) {
+			return;
+		}
+		IJavaProject jProj = JemProjectUtilities.getJavaProject(ejbProject);
+		IType type;
+		try {
+			type = jProj.findType(fqClassName);
+			computeJavaTypes(type);
+		} catch (JavaModelException e) {
+			EjbPlugin.logError(e);
+		}
+		
+		
+	}
+
+	// Dedicated for a session bean representation in the EJB 3.x model
+	private void computeJavaTypes(SessionBean sessionBean) {
+		
+		// do as in the EJB 2.x case
+		computeJavaTypes(sessionBean.getHome());
+		computeJavaTypes(sessionBean.getLocalHome());
+		computeJavaTypes(sessionBean.getLocal());
+		computeJavaTypes(sessionBean.getRemote());
+		
+		
+		// process additionally local business interfaces ...
+		List<String> businessLocals = sessionBean.getBusinessLocals();
+		for (String string : businessLocals) {
+			computeJavaTypes(string);
+		}
+		
+		// ... and remote business interfaces
+		List<String> businessRemotes = sessionBean.getBusinessRemotes();
+		for (String string : businessRemotes) {
+			computeJavaTypes(string);
+		}		
+	}
+	
+	
 	private void computeJavaTypes(JavaClass javaClass) {
 		if (javaClass == null)
 			return;