[309757] - fix for: Create EJB Client Jar action creates an empty project but with no source code or interfaces for projects with Java EE 5+ projects
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 8f48bee..470ab5b 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
@@ -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,11 +71,10 @@
public Map getFilesToMove() {
-
searchHelper = new MySearchHelper(searchEngine, computeBeanTypeNames());
-
if( ejbProject.exists() && ejbProject.isAccessible()){
+ 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);
@@ -88,6 +93,26 @@
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();
+ List<SessionBean> sessionBeans = enterpriseBeans.getSessionBeans();
+ for (SessionBean sessionBean : sessionBeans) {
+ computeJavaTypes(sessionBean);
+ }
+
+ List<EntityBean> entityBeans = enterpriseBeans.getEntityBeans();
+ for (EntityBean entityBean : entityBeans) {
+ computeJavaTypes(entityBean);
+ }
+ }
+ computeRMICJavaTypes();
+
+ }
+
}
return javaFilesToMove;
}
@@ -164,6 +189,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;