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