[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;