[426807] Asynchronous session bean support (wizard changes)
diff --git a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/util/EJBUIMessages.java b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/util/EJBUIMessages.java
index 6a3839f..41e4d0b 100644
--- a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/util/EJBUIMessages.java
+++ b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/util/EJBUIMessages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2014 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
@@ -108,11 +108,13 @@
public static String REMOTE_COMPONENT_INTERFACE_TOOLTIP;
public static String REMOTE_HOME_INTERFACE_TOOLTIP;
public static String EJB_CLIENT_JAR_GROUP;
+ public static String ASYNC;
//EJB Timer
public static String timerWizardTitle;
public static String timerWizardDescription;
public static String timerScheduleLabel;
+ public static String NON_PERSISTENT;
static {
NLS.initializeMessages(BUNDLE_NAME, EJBUIMessages.class);
diff --git a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/IEjbWizardConstants.java b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/IEjbWizardConstants.java
index c3d40fc..ff93b0f 100644
--- a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/IEjbWizardConstants.java
+++ b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/IEjbWizardConstants.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2008 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
@@ -8,6 +8,7 @@
* Contributors:
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
* Ludovic Champenois ludo@java.net
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.ejb.ui.internal.wizard;
@@ -29,6 +30,9 @@
public static final String LOCAL_BUSINESS_INTERFACE = EJBUIMessages.LOCAL_BUSINESS_INTERFACE;
public static final String LOCAL_BUSINESS_INTERFACE_LABEL = EJBUIMessages.LOCAL_BUSINESS_INTERFACE_LABEL;
public static final String NO_INTERFACE = EJBUIMessages.NO_INTERFACE;
+ public static final String ASYNC = EJBUIMessages.ASYNC;
+ public static final String NON_PERSISTENT = EJBUIMessages.NON_PERSISTENT;
+
public static final String EJB_NAME = EJBUIMessages.EJB_NAME;
public final static String TRANSACTION_TYPE_CONTAINER = EJBUIMessages.TRANSACTION_TYPE_CONTAINER;
diff --git a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/NewSessionBeanClassWizardPage.java b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/NewSessionBeanClassWizardPage.java
index d5c0d3e..563d108 100644
--- a/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/NewSessionBeanClassWizardPage.java
+++ b/plugins/org.eclipse.jst.ejb.ui/ejb_ui/org/eclipse/jst/ejb/ui/internal/wizard/NewSessionBeanClassWizardPage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2008 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.ejb.ui.internal.wizard;
@@ -16,6 +17,7 @@
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.REMOTE;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.REMOTE_BUSINESS_INTERFACE;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.STATE_TYPE;
+import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.ASYNC;
import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.INTERFACES;
import java.util.ArrayList;
@@ -33,13 +35,15 @@
import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-public class NewSessionBeanClassWizardPage extends NewEnterpriseBeanClassWizardPage {
+public class NewSessionBeanClassWizardPage extends
+ NewEnterpriseBeanClassWizardPage {
private Label stateTypeLabel;
private Combo stateTypeCombo;
private Button remoteCheckbox;
private Button localCheckbox;
private Button noInterfaceCheckbox;
+ private Button ansyncCheckbox;
private Text remoteInterfaceName;
private Text localInterfaceName;
@@ -47,13 +51,13 @@
String pageDesc, String pageTitle, String moduleType) {
super(model, pageName, pageDesc, pageTitle, moduleType);
}
-
+
@Override
protected Composite createTopLevelComposite(Composite parent) {
Composite composite = super.createTopLevelComposite(parent);
-
+
createBusinessInterfacesGroup(composite);
-
+
return composite;
}
@@ -66,38 +70,48 @@
stateTypeCombo = new Combo(composite, SWT.READ_ONLY);
stateTypeCombo.setLayoutData(gdhspan(1));
- DataModelPropertyDescriptor[] descriptors = model.getValidPropertyDescriptors(STATE_TYPE);
+ DataModelPropertyDescriptor[] descriptors = model
+ .getValidPropertyDescriptors(STATE_TYPE);
for (DataModelPropertyDescriptor descriptor : descriptors) {
stateTypeCombo.add(descriptor.getPropertyDescription());
}
stateTypeCombo.select(0);
synchHelper.synchCombo(stateTypeCombo, STATE_TYPE, null);
-
+
Group group = new Group(composite, SWT.NONE);
- group.setLayoutData(gdhspan(2));
- group.setLayout(new GridLayout(2, false));
- group.setText(IEjbWizardConstants.CREATE_BUSINESS_INTERFACE);
-
+ group.setLayoutData(gdhspan(2));
+ group.setLayout(new GridLayout(2, false));
+ group.setText(IEjbWizardConstants.CREATE_BUSINESS_INTERFACE);
+
remoteCheckbox = new Button(group, SWT.CHECK);
remoteCheckbox.setLayoutData(gdhspan(1));
remoteCheckbox.setText(IEjbWizardConstants.REMOTE_BUSINESS_INTERFACE);
synchHelper.synchCheckbox(remoteCheckbox, REMOTE, null);
remoteInterfaceName = new Text(group, SWT.SINGLE | SWT.BORDER);
- remoteInterfaceName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- synchHelper.synchText(remoteInterfaceName, REMOTE_BUSINESS_INTERFACE, null);
+ remoteInterfaceName
+ .setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ synchHelper.synchText(remoteInterfaceName, REMOTE_BUSINESS_INTERFACE,
+ null);
localCheckbox = new Button(group, SWT.CHECK);
localCheckbox.setLayoutData(gdhspan(1));
localCheckbox.setText(IEjbWizardConstants.LOCAL_BUSINESS_INTERFACE);
synchHelper.synchCheckbox(localCheckbox, LOCAL, null);
localInterfaceName = new Text(group, SWT.SINGLE | SWT.BORDER);
- localInterfaceName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- synchHelper.synchText(localInterfaceName, LOCAL_BUSINESS_INTERFACE, null);
-
+ localInterfaceName
+ .setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ synchHelper.synchText(localInterfaceName, LOCAL_BUSINESS_INTERFACE,
+ null);
+
noInterfaceCheckbox = new Button(group, SWT.CHECK);
noInterfaceCheckbox.setLayoutData(gdhspan(2));
noInterfaceCheckbox.setText(IEjbWizardConstants.NO_INTERFACE);
synchHelper.synchCheckbox(noInterfaceCheckbox, NO_INTERFACE, null);
+
+ ansyncCheckbox = new Button(group, SWT.CHECK);
+ ansyncCheckbox.setLayoutData(gdhspan(2));
+ ansyncCheckbox.setText(IEjbWizardConstants.ASYNC);
+ synchHelper.synchCheckbox(ansyncCheckbox, ASYNC, null);
}
private static GridData gdhspan(int span) {
@@ -110,13 +124,14 @@
protected String[] getValidationPropertyNames() {
ArrayList<String> names = new ArrayList<String>();
names.addAll(Arrays.asList(super.getValidationPropertyNames()));
-
+
names.add(STATE_TYPE);
names.add(INTERFACES);
names.add(LOCAL_BUSINESS_INTERFACE);
names.add(REMOTE_BUSINESS_INTERFACE);
names.add(NO_INTERFACE);
-
+ names.add(ASYNC);
+
return names.toArray(new String[0]);
}
}
diff --git a/plugins/org.eclipse.jst.ejb.ui/property_files/ejb_ui.properties b/plugins/org.eclipse.jst.ejb.ui/property_files/ejb_ui.properties
index e92b933..15e1a8b 100644
--- a/plugins/org.eclipse.jst.ejb.ui/property_files/ejb_ui.properties
+++ b/plugins/org.eclipse.jst.ejb.ui/property_files/ejb_ui.properties
@@ -93,7 +93,9 @@
MESSAGE_LISTENER_INTERFACE_HYPERLINK_TOOLTIP=Set message listener interface
CLICK_TO_SELECT=<click to select>
EJB_CLIENT_JAR_GROUP=EJB Client JAR
+ASYNC=As&ynchronous
timerWizardTitle=Create EJB Timer Callback
timerWizardDescription=Create Java class with an added EJB Timer Callback method.
timerScheduleLabel=Schedule:
+NON_PERSISTENT=&Non-persistent
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/CreateSessionBeanTemplateModel.java b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/CreateSessionBeanTemplateModel.java
index 6917d3e..fa24710 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/CreateSessionBeanTemplateModel.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/CreateSessionBeanTemplateModel.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
@@ -7,7 +7,8 @@
*
* Contributors:
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
- * Roberto Sanchez, rsanchez@mx1.ibm.com - Add remote and local annotations to bean class
+ * Roberto Sanchez, rsanchez@mx1.ibm.com - Add remote and local annotations to bean class
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.j2ee.ejb.internal.operations;
@@ -38,6 +39,8 @@
public static final String QUALIFIED_REMOTE = "javax.ejb.Remote"; //$NON-NLS-1$
public static final String QUALIFIED_REMOTE_HOME = "javax.ejb.RemoteHome"; //$NON-NLS-1$
public static final String QUALIFIED_LOCAL_HOME = "javax.ejb.LocalHome"; //$NON-NLS-1$
+ public static final String QUALIFIED_ASYNCHRONOUS = "javax.ejb.Asynchronous"; //$NON-NLS-1$
+
public static final String QUALIFIED_TRANSACTION_MANAGEMENT = "javax.ejb.TransactionManagement"; //$NON-NLS-1$
public static final String QUALIFIED_TRANSACTION_MANAGEMENT_TYPE = "javax.ejb.TransactionManagementType"; //$NON-NLS-1$
@@ -89,6 +92,10 @@
collection.add(QUALIFIED_LOCAL_BEAN);
}
+ if (isAsynchronous()) {
+ collection.add(QUALIFIED_ASYNCHRONOUS);
+ }
+
List<BusinessInterface> interfaces = getBusinessInterfaces();
if (addBusinessAnnotationToBeanClass()){
for (BusinessInterface iface : interfaces) {
@@ -206,6 +213,10 @@
return dataModel.getBooleanProperty(NO_INTERFACE);
}
+ public boolean isAsynchronous() {
+ return dataModel.getBooleanProperty(ASYNC);
+ }
+
public Map<String, String> getClassAnnotationParams() {
Map<String, String> result = new Hashtable<String, String>();
String dispName = getProperty(EJB_NAME).trim();
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/INewSessionBeanClassDataModelProperties.java b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/INewSessionBeanClassDataModelProperties.java
index 19e03f6..04b6afd 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/INewSessionBeanClassDataModelProperties.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/INewSessionBeanClassDataModelProperties.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
@@ -8,6 +8,7 @@
* Contributors:
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
* Roberto Sanchez, rsanchez@mx1.ibm.com - Add remote and local annotations to bean class
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.j2ee.ejb.internal.operations;
@@ -70,4 +71,20 @@
public static final String BUSINESS_INTERFACE_ANNOTATION_LOCATION = "INewSessionBeanClassDataModelProperties.BUSINESS_INTERFACE_ANNOTATION_LOCATION"; //$NON-NLS-1$
+ /**
+ * Optional, boolean property used to specify whether add the Asynchronous annotation to the class definition or not.
+ * The default value is false.
+ *
+ * @since 3.6
+ */
+ public static final String ASYNC = "INewSessionBeanClassDataModelProperties.ASYNC"; //$NON-NLS-1$
+
+ /**
+ * Optional, boolean property used to specify whether to define the timer as non-persistent or not.
+ * The default value is false.
+ *
+ * @since 3.6
+ */
+ public static final String NON_PERSISTENT = "INewSessionBeanClassDataModelProperties.NON_PERSISTENT"; //$NON-NLS-1$
+
}
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewEnterpriseBeanClassDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewEnterpriseBeanClassDataModelProvider.java
index 993fe34..c6f3f44 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewEnterpriseBeanClassDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewEnterpriseBeanClassDataModelProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008 SAP AG and others.
+ * Copyright (c) 2008, 2014 SAP AG 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.j2ee.ejb.internal.operations;
@@ -25,11 +26,14 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jst.j2ee.ejb.internal.plugin.EjbPlugin;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.jst.j2ee.internal.common.operations.NewJavaClassDataModelProvider;
import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBCreationResourceHandler;
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.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.jst.javaee.ejb.EJBJar;
import org.eclipse.jst.javaee.ejb.EnterpriseBeans;
import org.eclipse.jst.javaee.ejb.SessionBean;
@@ -37,6 +41,7 @@
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
public class NewEnterpriseBeanClassDataModelProvider extends NewJavaClassDataModelProvider {
@@ -179,5 +184,52 @@
}
return Status.OK_STATUS;
}
-
+
+ // constant array used for version tolerance: EJB version, Web version, Web Fragment version
+ private static final int EJB31_VERSIONS[] = {J2EEVersionConstants.VERSION_3_1, J2EEVersionConstants.VERSION_3_0, J2EEVersionConstants.VERSION_3_0};
+ private static final int EJB32_VERSIONS[] = {J2EEVersionConstants.VERSION_3_2, J2EEVersionConstants.VERSION_3_1, J2EEVersionConstants.VERSION_3_1};
+
+ protected boolean ejb3xOrLater(int ejbVersion) {
+ boolean retVal = false;
+ IProject project = getTargetProject();
+ // default to EJB 31
+ int ejbVersions[] = EJB31_VERSIONS;
+ IProjectFacetVersion facetVersion = null;
+ int versionToCheck = ejbVersion;
+
+ switch (ejbVersion) {
+ case J2EEVersionConstants.VERSION_3_1:
+ ejbVersions = EJB31_VERSIONS;
+ break;
+ case J2EEVersionConstants.VERSION_3_2:
+ ejbVersions = EJB32_VERSIONS;
+ break;
+ }
+
+ if (project != null)
+ {
+ if (JavaEEProjectUtilities.isEJBProject(project))
+ {
+ facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.EJB);
+ versionToCheck = ejbVersions[0];
+ }
+ else if (JavaEEProjectUtilities.isDynamicWebProject(project))
+ {
+ facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.DYNAMIC_WEB);
+ versionToCheck = ejbVersions[1];
+ }
+ else if (JavaEEProjectUtilities.isWebFragmentProject(project))
+ {
+ facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.WEBFRAGMENT);
+ versionToCheck = ejbVersions[2];
+ }
+ if (facetVersion != null)
+ {
+ int version = J2EEVersionUtil.convertVersionStringToInt(facetVersion.getVersionString());
+ retVal = version >= versionToCheck;
+ }
+ }
+ return retVal;
+ }
+
}
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewSessionBeanClassDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewSessionBeanClassDataModelProvider.java
index 00fed1b..548d9af 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewSessionBeanClassDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/NewSessionBeanClassDataModelProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
@@ -9,6 +9,7 @@
* Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
* Roberto Sanchez, rsanchez@mx1.ibm.com - Add remote and local annotations to bean class
* Roberto Sanchez, rsanchez@mx1.ibm.com - Allow adopter to change default value of package for interfaces
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.j2ee.ejb.internal.operations;
@@ -18,6 +19,7 @@
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.LOCAL_HOME;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.LOCAL_HOME_INTERFACE;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.NO_INTERFACE;
+import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.ASYNC;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.REMOTE;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.REMOTE_BUSINESS_INTERFACE;
import static org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties.REMOTE_COMPONENT_INTERFACE;
@@ -49,19 +51,15 @@
import org.eclipse.jst.j2ee.ejb.internal.plugin.EjbPlugin;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.internal.common.J2EECommonMessages;
-import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.jst.j2ee.internal.common.operations.NewJavaClassDataModelProvider;
import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBCreationResourceHandler;
import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
-import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
-import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.project.facet.IProductConstants;
public class NewSessionBeanClassDataModelProvider extends NewEnterpriseBeanClassDataModelProvider {
@@ -72,8 +70,8 @@
private static final String REMOTE_HOME_SUFFIX = "RemoteHome"; //$NON-NLS-1$
private static final String LOCAL_COMPONENT_SUFFIX = "LocalComponent"; //$NON-NLS-1$
private static final String REMOTE_COMPONENT_SUFFIX = "RemoteComponent"; //$NON-NLS-1$
-
-
+
+
@Override
public IDataModelOperation getDefaultOperation() {
return new AddSessionBeanOperation(getDataModel());
@@ -95,6 +93,7 @@
propertyNames.add(REMOTE);
propertyNames.add(LOCAL);
propertyNames.add(NO_INTERFACE);
+ propertyNames.add(ASYNC);
propertyNames.add(STATE_TYPE);
propertyNames.add(REMOTE_HOME);
propertyNames.add(LOCAL_HOME);
@@ -127,9 +126,11 @@
else if (propertyName.equals(REMOTE))
return Boolean.FALSE;
else if (propertyName.equals(LOCAL))
- return new Boolean(!ejb31OrLater());
+ return new Boolean(!ejb3xOrLater(J2EEVersionConstants.VERSION_3_1));
else if (propertyName.equals(NO_INTERFACE))
- return new Boolean(ejb31OrLater());
+ return new Boolean(ejb3xOrLater(J2EEVersionConstants.VERSION_3_1));
+ else if (ASYNC.equals(propertyName))
+ return Boolean.FALSE;
else if (propertyName.equals(STATE_TYPE))
return StateType.STATELESS.toString();
else if (propertyName.equals(INTERFACES)) {
@@ -242,6 +243,7 @@
dataModel.notifyPropertyChange(REMOTE, IDataModel.DEFAULT_CHG);
dataModel.notifyPropertyChange(LOCAL, IDataModel.DEFAULT_CHG);
dataModel.notifyPropertyChange(NO_INTERFACE, IDataModel.DEFAULT_CHG);
+ dataModel.notifyPropertyChange(ASYNC, IDataModel.DEFAULT_CHG);
dataModel.notifyPropertyChange(REMOTE_BUSINESS_INTERFACE, IDataModel.DEFAULT_CHG);
dataModel.notifyPropertyChange(LOCAL_BUSINESS_INTERFACE, IDataModel.DEFAULT_CHG);
} else if (CLASS_NAME.equals(propertyName) || JAVA_PACKAGE.equals(propertyName)) {
@@ -275,6 +277,8 @@
if(getLocalProperty() != null){
getLocalProperty().setFullyQualifiedName(propertyValue.toString());
}
+ } else if (propertyName.equals(ASYNC)) {
+ getDataModel().notifyPropertyChange(ASYNC, IDataModel.DEFAULT_CHG);
}
return result;
@@ -286,6 +290,8 @@
return getDataModel().getBooleanProperty(REMOTE);
} else if (LOCAL_BUSINESS_INTERFACE.equals(propertyName)) {
return getDataModel().getBooleanProperty(LOCAL);
+ } else if (ASYNC.equals(propertyName)) {
+ return ejb3xOrLater(J2EEVersionConstants.VERSION_3_1);
}
return super.isPropertyEnabled(propertyName);
@@ -374,6 +380,8 @@
return validateComponentHomeInterfaces();
} else if (INTERFACES.equals(propertyName)) {
return validateInterfacesList();
+ } else if (ASYNC.equals(propertyName) && getBooleanProperty(ASYNC)) {
+ return validateAsynchronous();
}
return super.validate(propertyName);
@@ -381,18 +389,28 @@
protected IStatus validateStateType() {
String value = getStringProperty(STATE_TYPE);
- if (StateType.SINGLETON.toString().equals(value) && !ejb31OrLater()) {
+ if (StateType.SINGLETON.toString().equals(value) && !ejb3xOrLater(J2EEVersionConstants.VERSION_3_1)) {
return WTPCommonPlugin.createErrorStatus(EJBCreationResourceHandler.ERR_SINGLETON_NOT_ALLOWED);
}
return Status.OK_STATUS;
}
protected IStatus validateNoInterface() {
- if (!ejb31OrLater()) {
+ if (!ejb3xOrLater(J2EEVersionConstants.VERSION_3_1)) {
return WTPCommonPlugin.createErrorStatus(EJBCreationResourceHandler.ERR_NO_INTERFACE_NOT_ALLOWED);
}
return Status.OK_STATUS;
}
+
+ protected IStatus validateAsynchronous() {
+ IStatus retVal = Status.OK_STATUS;
+ if (getBooleanProperty(ASYNC)) {
+ if (ejb3xOrLater(J2EEVersionConstants.VERSION_3_1)) {
+ retVal = new Status(IStatus.WARNING, EjbPlugin.PLUGIN_ID, EJBCreationResourceHandler.WRN_EJB31_ASYNC_NOT_SUPPORTED);
+ }
+ }
+ return retVal;
+ }
protected IStatus validateEjbInterface(String fullyQualifiedName) {
IStatus status = validateJavaTypeName(fullyQualifiedName);
@@ -500,7 +518,7 @@
protected IStatus validateInterfacesList() {
List<BusinessInterface> list = (List<BusinessInterface>) getProperty(INTERFACES);
- if (list.isEmpty() && !ejb31OrLater()) {
+ if (list.isEmpty() && !ejb3xOrLater(J2EEVersionConstants.VERSION_3_1)) {
return new Status(IStatus.WARNING, EjbPlugin.PLUGIN_ID, EJBCreationResourceHandler.WRN_NO_CLIENT_VIEW);
}
return Status.OK_STATUS;
@@ -545,32 +563,4 @@
}
return WTPCommonPlugin.OK_STATUS;
}
-
- private boolean ejb31OrLater() {
- boolean retVal = false;
- IProject project = getTargetProject();
- if (project != null)
- {
- if (JavaEEProjectUtilities.isEJBProject(project))
- {
- IProjectFacetVersion facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.EJB);
- int version = J2EEVersionUtil.convertVersionStringToInt(facetVersion.getVersionString());
- retVal = version >= J2EEVersionConstants.VERSION_3_1;
- }
- else if (JavaEEProjectUtilities.isDynamicWebProject(project))
- {
- IProjectFacetVersion facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.DYNAMIC_WEB);
- int version = J2EEVersionUtil.convertVersionStringToInt(facetVersion.getVersionString());
- retVal = version >= J2EEVersionConstants.VERSION_3_0;
- }
- else if (JavaEEProjectUtilities.isWebFragmentProject(project))
- {
- IProjectFacetVersion facetVersion = JavaEEProjectUtilities.getProjectFacetVersion(project, IJ2EEFacetConstants.WEBFRAGMENT);
- int version = J2EEVersionUtil.convertVersionStringToInt(facetVersion.getVersionString());
- retVal = version >= J2EEVersionConstants.VERSION_3_0;
- }
- }
- return retVal;
- }
-
}
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/SessionBeanTemplate.java b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/SessionBeanTemplate.java
index 4da505d..8693ded 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/SessionBeanTemplate.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejb/org/eclipse/jst/j2ee/ejb/internal/operations/SessionBeanTemplate.java
@@ -1,11 +1,12 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 SAP AG and others.
+ * Copyright (c) 2007, 2014 SAP AG 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
* http://www.eclipse.org/legal/epl-v10.html
*
- * This class has been generated from a javajet template.
+ * This class has been generated from a javajet template.
+ * IBM - Async and Non-persistent support
*******************************************************************************/
package org.eclipse.jst.j2ee.ejb.internal.operations;
@@ -53,35 +54,36 @@
protected final String TEXT_27 = ".class)"; //$NON-NLS-1$
protected final String TEXT_28 = NL + "@RemoteHome("; //$NON-NLS-1$
protected final String TEXT_29 = ".class)"; //$NON-NLS-1$
- protected final String TEXT_30 = NL + "public "; //$NON-NLS-1$
- protected final String TEXT_31 = "abstract "; //$NON-NLS-1$
- protected final String TEXT_32 = "final "; //$NON-NLS-1$
- protected final String TEXT_33 = "class "; //$NON-NLS-1$
- protected final String TEXT_34 = " extends "; //$NON-NLS-1$
- protected final String TEXT_35 = " implements "; //$NON-NLS-1$
- protected final String TEXT_36 = ", "; //$NON-NLS-1$
- protected final String TEXT_37 = " {"; //$NON-NLS-1$
- protected final String TEXT_38 = NL + NL + " /**" + NL + " * Default constructor. " + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- protected final String TEXT_39 = "() {" + NL + " // TODO Auto-generated constructor stub" + NL + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- protected final String TEXT_40 = NL + " " + NL + " /**" + NL + " * @see "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- protected final String TEXT_41 = "#"; //$NON-NLS-1$
- protected final String TEXT_42 = "("; //$NON-NLS-1$
- protected final String TEXT_43 = ")" + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- protected final String TEXT_44 = "("; //$NON-NLS-1$
- protected final String TEXT_45 = ") {" + NL + " super("; //$NON-NLS-1$ //$NON-NLS-2$
- protected final String TEXT_46 = ");" + NL + " // TODO Auto-generated constructor stub" + NL + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- protected final String TEXT_47 = NL + NL + "\t/**" + NL + " * @see "; //$NON-NLS-1$ //$NON-NLS-2$
- protected final String TEXT_48 = "#"; //$NON-NLS-1$
- protected final String TEXT_49 = "("; //$NON-NLS-1$
- protected final String TEXT_50 = ")" + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- protected final String TEXT_51 = " "; //$NON-NLS-1$
- protected final String TEXT_52 = "("; //$NON-NLS-1$
- protected final String TEXT_53 = ") {" + NL + " // TODO Auto-generated method stub"; //$NON-NLS-1$ //$NON-NLS-2$
- protected final String TEXT_54 = NL + "\t\t\treturn "; //$NON-NLS-1$
- protected final String TEXT_55 = ";"; //$NON-NLS-1$
- protected final String TEXT_56 = NL + " }"; //$NON-NLS-1$
- protected final String TEXT_57 = NL + NL + "}"; //$NON-NLS-1$
- protected final String TEXT_58 = NL;
+ protected final String TEXT_30 = NL + "@Asynchronous"; //$NON-NLS-1$
+ protected final String TEXT_31 = NL + "public "; //$NON-NLS-1$
+ protected final String TEXT_32 = "abstract "; //$NON-NLS-1$
+ protected final String TEXT_33 = "final "; //$NON-NLS-1$
+ protected final String TEXT_34 = "class "; //$NON-NLS-1$
+ protected final String TEXT_35 = " extends "; //$NON-NLS-1$
+ protected final String TEXT_36 = " implements "; //$NON-NLS-1$
+ protected final String TEXT_37 = ", "; //$NON-NLS-1$
+ protected final String TEXT_38 = " {"; //$NON-NLS-1$
+ protected final String TEXT_39 = NL + NL + " /**" + NL + " * Default constructor. " + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ protected final String TEXT_40 = "() {" + NL + " // TODO Auto-generated constructor stub" + NL + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ protected final String TEXT_41 = NL + " " + NL + " /**" + NL + " * @see "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ protected final String TEXT_42 = "#"; //$NON-NLS-1$
+ protected final String TEXT_43 = "("; //$NON-NLS-1$
+ protected final String TEXT_44 = ")" + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ protected final String TEXT_45 = "("; //$NON-NLS-1$
+ protected final String TEXT_46 = ") {" + NL + " super("; //$NON-NLS-1$ //$NON-NLS-2$
+ protected final String TEXT_47 = ");" + NL + " // TODO Auto-generated constructor stub" + NL + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ protected final String TEXT_48 = NL + NL + "\t/**" + NL + " * @see "; //$NON-NLS-1$ //$NON-NLS-2$
+ protected final String TEXT_49 = "#"; //$NON-NLS-1$
+ protected final String TEXT_50 = "("; //$NON-NLS-1$
+ protected final String TEXT_51 = ")" + NL + " */" + NL + " public "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ protected final String TEXT_52 = " "; //$NON-NLS-1$
+ protected final String TEXT_53 = "("; //$NON-NLS-1$
+ protected final String TEXT_54 = ") {" + NL + " // TODO Auto-generated method stub"; //$NON-NLS-1$ //$NON-NLS-2$
+ protected final String TEXT_55 = NL + "\t\t\treturn "; //$NON-NLS-1$
+ protected final String TEXT_56 = ";"; //$NON-NLS-1$
+ protected final String TEXT_57 = NL + " }"; //$NON-NLS-1$
+ protected final String TEXT_58 = NL + NL + "}"; //$NON-NLS-1$
+ protected final String TEXT_59 = NL;
public String generate(Object argument)
{
@@ -247,31 +249,38 @@
}
- if (model.isPublic()) {
+ if (model.isAsynchronous()) {
stringBuffer.append(TEXT_30);
+
+ }
+
+
+ if (model.isPublic()) {
+
+ stringBuffer.append(TEXT_31);
}
if (model.isAbstract()) {
- stringBuffer.append(TEXT_31);
+ stringBuffer.append(TEXT_32);
}
if (model.isFinal()) {
- stringBuffer.append(TEXT_32);
+ stringBuffer.append(TEXT_33);
}
- stringBuffer.append(TEXT_33);
+ stringBuffer.append(TEXT_34);
stringBuffer.append( model.getClassName() );
String superClass = model.getSuperclassName();
if (superClass != null && superClass.length() > 0) {
- stringBuffer.append(TEXT_34);
+ stringBuffer.append(TEXT_35);
stringBuffer.append( superClass );
}
@@ -279,7 +288,7 @@
List<String> interfaces = model.getInterfaces();
if ( interfaces.size() > 0) {
- stringBuffer.append(TEXT_35);
+ stringBuffer.append(TEXT_36);
}
@@ -287,7 +296,7 @@
String INTERFACE = interfaces.get(i);
if (i > 0) {
- stringBuffer.append(TEXT_36);
+ stringBuffer.append(TEXT_37);
}
@@ -295,13 +304,13 @@
}
- stringBuffer.append(TEXT_37);
+ stringBuffer.append(TEXT_38);
if (!model.hasEmptySuperclassConstructor()) {
- stringBuffer.append(TEXT_38);
- stringBuffer.append( model.getClassName() );
stringBuffer.append(TEXT_39);
+ stringBuffer.append( model.getClassName() );
+ stringBuffer.append(TEXT_40);
}
@@ -310,19 +319,19 @@
for (Constructor constructor : constructors) {
if (constructor.isPublic() || constructor.isProtected()) {
- stringBuffer.append(TEXT_40);
- stringBuffer.append( model.getSuperclassName() );
stringBuffer.append(TEXT_41);
stringBuffer.append( model.getSuperclassName() );
stringBuffer.append(TEXT_42);
- stringBuffer.append( constructor.getParamsForJavadoc() );
+ stringBuffer.append( model.getSuperclassName() );
stringBuffer.append(TEXT_43);
- stringBuffer.append( model.getClassName() );
+ stringBuffer.append( constructor.getParamsForJavadoc() );
stringBuffer.append(TEXT_44);
- stringBuffer.append( constructor.getParamsForDeclaration() );
+ stringBuffer.append( model.getClassName() );
stringBuffer.append(TEXT_45);
- stringBuffer.append( constructor.getParamsForCall() );
+ stringBuffer.append( constructor.getParamsForDeclaration() );
stringBuffer.append(TEXT_46);
+ stringBuffer.append( constructor.getParamsForCall() );
+ stringBuffer.append(TEXT_47);
}
}
@@ -332,36 +341,36 @@
if (model.shouldImplementAbstractMethods()) {
for (Method method : model.getUnimplementedMethods()) {
- stringBuffer.append(TEXT_47);
- stringBuffer.append( method.getContainingJavaClass() );
stringBuffer.append(TEXT_48);
- stringBuffer.append( method.getName() );
+ stringBuffer.append( method.getContainingJavaClass() );
stringBuffer.append(TEXT_49);
- stringBuffer.append( method.getParamsForJavadoc() );
- stringBuffer.append(TEXT_50);
- stringBuffer.append( method.getReturnType() );
- stringBuffer.append(TEXT_51);
stringBuffer.append( method.getName() );
+ stringBuffer.append(TEXT_50);
+ stringBuffer.append( method.getParamsForJavadoc() );
+ stringBuffer.append(TEXT_51);
+ stringBuffer.append( method.getReturnType() );
stringBuffer.append(TEXT_52);
- stringBuffer.append( method.getParamsForDeclaration() );
+ stringBuffer.append( method.getName() );
stringBuffer.append(TEXT_53);
+ stringBuffer.append( method.getParamsForDeclaration() );
+ stringBuffer.append(TEXT_54);
String defaultReturnValue = method.getDefaultReturnValue();
if (defaultReturnValue != null) {
- stringBuffer.append(TEXT_54);
- stringBuffer.append( defaultReturnValue );
stringBuffer.append(TEXT_55);
+ stringBuffer.append( defaultReturnValue );
+ stringBuffer.append(TEXT_56);
}
- stringBuffer.append(TEXT_56);
+ stringBuffer.append(TEXT_57);
}
}
- stringBuffer.append(TEXT_57);
stringBuffer.append(TEXT_58);
+ stringBuffer.append(TEXT_59);
return stringBuffer.toString();
}
}
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/ejbcreation/org/eclipse/jst/j2ee/internal/ejb/project/operations/EJBCreationResourceHandler.java b/plugins/org.eclipse.jst.j2ee.ejb/ejbcreation/org/eclipse/jst/j2ee/internal/ejb/project/operations/EJBCreationResourceHandler.java
index a55d26b..a75d1e3 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/ejbcreation/org/eclipse/jst/j2ee/internal/ejb/project/operations/EJBCreationResourceHandler.java
+++ b/plugins/org.eclipse.jst.j2ee.ejb/ejbcreation/org/eclipse/jst/j2ee/internal/ejb/project/operations/EJBCreationResourceHandler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 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
@@ -167,10 +167,12 @@
public static String WRN_NO_CLIENT_VIEW;
public static String ERR_SINGLETON_NOT_ALLOWED;
public static String ERR_NO_INTERFACE_NOT_ALLOWED;
+ public static String WRN_EJB31_ASYNC_NOT_SUPPORTED;
//EJB Timer specific
public static String timerScheduleDefault;
public static String errorTimerScheduleMissing;
+ public static String WRN_EJB31_NON_PERSISTENT_NO_SUPPORTED;
static {
NLS.initializeMessages(BUNDLE_NAME, EJBCreationResourceHandler.class);
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/property_files/ejbcreation.properties b/plugins/org.eclipse.jst.j2ee.ejb/property_files/ejbcreation.properties
index df81386..82a3036 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/property_files/ejbcreation.properties
+++ b/plugins/org.eclipse.jst.j2ee.ejb/property_files/ejbcreation.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2003, 2006 IBM Corporation and others.
+# Copyright (c) 2003, 2014 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
@@ -150,7 +150,9 @@
WRN_BEAN_NAME_IS_EMPTY=Bean name is empty, the containter will use the name of the bean class.
WRN_NO_CLIENT_VIEW=No client view configured. Clients will not be able to access this bean.
ERR_SINGLETON_NOT_ALLOWED=The 'Singleton' state type is allowed only for EJB projects with version 3.1 or later.
-ERR_NO_INTERFACE_NOT_ALLOWED=The no-interface client view is allowed only for EJB projects with version 3.1 or later.
+ERR_NO_INTERFACE_NOT_ALLOWED=The no-interface client view is allowed only for EJB projects with version 3.1 or later.
+WRN_EJB31_ASYNC_NOT_SUPPORTED=Asynchronous methods are not supported in EJB 3.1 Lite.
timerScheduleDefault= second="*/10", minute="*", hour="8-23", dayOfWeek="Mon-Fri",\n dayOfMonth="*", month="*", year="*", info="MyTimer"
errorTimerScheduleMissing=The schedule cannot be empty.
+WRN_EJB31_NON_PERSISTENT_NO_SUPPORTED=Non-persistent Timers are not supported in EJB 3.1 Lite.
diff --git a/plugins/org.eclipse.jst.j2ee.ejb/templates/sessionBean_classHeader.template b/plugins/org.eclipse.jst.j2ee.ejb/templates/sessionBean_classHeader.template
index b8d3eec..41ffc28 100644
--- a/plugins/org.eclipse.jst.j2ee.ejb/templates/sessionBean_classHeader.template
+++ b/plugins/org.eclipse.jst.j2ee.ejb/templates/sessionBean_classHeader.template
@@ -107,4 +107,11 @@
@RemoteHome(<%=model.getRemoteHomeClassSimpleName()%>.class)
<%
}
+%>
+<%
+ if (model.isAsynchronous()) {
+%>
+@Asynchronous
+<%
+ }
%>
\ No newline at end of file