[426807] Asynchronous session bean support (wizard changes)
diff --git a/tests/org.eclipse.jst.j2ee.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.tests/META-INF/MANIFEST.MF index e43a08d..81a5b5f 100644 --- a/tests/org.eclipse.jst.j2ee.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.jst.j2ee.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: J2EE Tests Plug-in Bundle-SymbolicName: org.eclipse.jst.j2ee.tests; singleton:=true -Bundle-Version: 1.1.600.qualifier +Bundle-Version: 1.1.700.qualifier Bundle-ClassPath: j2ee-tests.jar Bundle-Activator: org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin Bundle-Localization: plugin
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AddEJBeanOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AddEJBeanOperationTest.java index 877a6a0..5691a50 100644 --- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AddEJBeanOperationTest.java +++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AddEJBeanOperationTest.java
@@ -1,17 +1,26 @@ package org.eclipse.wtp.j2ee.headless.tests.ejb.operations; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Preferences; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jem.util.emf.workbench.ProjectUtilities; +import org.eclipse.jst.j2ee.ejb.internal.operations.AddEjbTimerDataModelProvider; +import org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties; import org.eclipse.jst.j2ee.ejb.internal.operations.NewMessageDrivenBeanClassDataModelProvider; import org.eclipse.jst.j2ee.ejb.internal.operations.NewSessionBeanClassDataModelProvider; import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; @@ -25,8 +34,7 @@ public class AddEJBeanOperationTest extends OperationTestCase implements INewJavaClassDataModelProperties { - public static final String EJB_PROJECT_NAME = "EjbProject"; //$NON-NLS-1$ - + public static final String EJB_PROJECT_NAME = "EjbProject"; //$NON-NLS-1$ public static final String PACKAGE = "test"; //$NON-NLS-1$ public static final String SESSION_BEAN_NAME = "TestSessionBean"; //$NON-NLS-1$ @@ -37,6 +45,23 @@ public static final String MESSAGE_DRIVEN_BEAN_NAME = "TestMDBean"; //$NON-NLS-1$ public static final String MESSAGE_DRIVEN_BEAN_CLASS_NAME = PACKAGE + "." + MESSAGE_DRIVEN_BEAN_NAME; //$NON-NLS-1$ + public static final String ASYNCHRONOUS = "@Asynchronous"; //$NON-NLS-1$ + public static final String ASYNC_WAS_NOT_EXPECTED = "The @Asynchronous was not expected"; //$NON-NLS-1$ + public static final String ASYNC_EJB_REGEX = ".*(@Asynchronous\\s){1}(@.*\\s)*(public class){1}.*"; //$NON-NLS-1$ + public static final String ASYNC_WAS_EXPECTED = "The @Asynchronous was expected"; //$NON-NLS-1$ + public static final String EJB_WITHOUT_ASYNC = "EjbWithooutAsync"; //$NON-NLS-1$ + public static final String EJB_WITH_ASYNC = "EjbWithAsync"; //$NON-NLS-1$ + public static final String EJB_WITHOUT_ASYNC_CLASS_NAME = PACKAGE + "." + EJB_WITHOUT_ASYNC; //$NON-NLS-1$ + public static final String EJB_WITH_ASYNC_CLASS_NAME = PACKAGE + "." + EJB_WITH_ASYNC; //$NON-NLS-1$ + + public static final String TIMER_PERSISTENT_CONFIG_EXPECTED = "EJB Timer persistent configuration was expected"; //$NON-NLS-1$ + public static final String TIMER_NON_PERSISTENT_CONFIG_EXPECTED = "EJB Timer Non-persistent configuration was expected"; //$NON-NLS-1$ + public static final String NON_PERSISTENT_TIMER_REGEX = "@Schedule\\s*\\(.*\\s.*persistent\\s*=\\s*false\\)"; + public static final String NON_PERSISTENT_EJB_TIMER = "NonPersistentEjbTimer"; //$NON-NLS-1$ + public static final String PERSISTENT_EJB_TIMER = "PersistentEjbTimer"; //$NON-NLS-1$ + public static final String NON_PERSISTENT_EJB_TIMER_CLASS_NAME = PACKAGE + "." + NON_PERSISTENT_EJB_TIMER; //$NON-NLS-1$ + public static final String PERSISTENT_EJB_TIMER_CLASS_NAME = PACKAGE + "." + PERSISTENT_EJB_TIMER; //$NON-NLS-1$ + public AddEJBeanOperationTest() { super(); } @@ -67,6 +92,36 @@ // no EJB3 annotation model to check yet } + /** + * Verifies the @Asynchronous annotation be added properly. + * @throws Exception + */ + public void testAddSessionBean_EJB31_Asynchronous() throws Exception { + createEJBProject(EJB_PROJECT_NAME, JavaEEFacetConstants.EJB_31); + + addSessionBeanWithAync(EJB_WITH_ASYNC, true); + addSessionBeanWithAync(EJB_WITHOUT_ASYNC, false); + + assertTrue(ASYNC_WAS_EXPECTED, contains(EJB_WITH_ASYNC_CLASS_NAME, ASYNC_EJB_REGEX)); + assertFalse(ASYNC_WAS_NOT_EXPECTED, contains(EJB_WITHOUT_ASYNC_CLASS_NAME, ASYNCHRONOUS)); + } + + + /** + * Verifies the EJB Timer be generated properly with the @Schedule annotation with + * the attribute persistent set to false, when the Timer is Non-persistent. + * @throws Exception + */ + public void testAddEjbTimer_EJB31() throws Exception{ + createEJBProject(EJB_PROJECT_NAME, JavaEEFacetConstants.EJB_31); + + addEjbTimer(PERSISTENT_EJB_TIMER, false); + addEjbTimer(NON_PERSISTENT_EJB_TIMER, true); + + assertFalse(TIMER_PERSISTENT_CONFIG_EXPECTED, contains(PERSISTENT_EJB_TIMER_CLASS_NAME, NON_PERSISTENT_TIMER_REGEX)); + assertTrue(TIMER_NON_PERSISTENT_CONFIG_EXPECTED, contains(NON_PERSISTENT_EJB_TIMER_CLASS_NAME, NON_PERSISTENT_TIMER_REGEX)); + } + public void testAddMessageDrivenBean_EJB30_Defaults_NoJETEmitter() throws Exception { disableJETEmitter(); testAddMessageDrivenBean_EJB30_Defaults(); @@ -119,6 +174,33 @@ runAndVerify(dm); } + private void addSessionBeanWithAync(String ejbName, boolean async) throws Exception { + IDataModel dm = DataModelFactory.createDataModel(NewSessionBeanClassDataModelProvider.class); + dm.setProperty(PROJECT_NAME, EJB_PROJECT_NAME); + dm.setProperty(JAVA_PACKAGE, PACKAGE); + dm.setProperty(CLASS_NAME, ejbName); + dm.setBooleanProperty(INewSessionBeanClassDataModelProperties.ASYNC, async); + runAndVerify(dm); + } + + /** + * Creates an EJB Timer. + * @param ejbTimerName name of the EJB Timer. + * @param persistent, <em>Boolean</em> indicating the nature of the timer, <em>null<em> for default, + * <em>false</em> for Non-persistent or <em>true</em> for persistent. + * @throws Exception + */ + private void addEjbTimer(String ejbTimerName, boolean persistent) throws Exception { + AddEjbTimerDataModelProvider ejbTimerModel = new AddEjbTimerDataModelProvider(); + IDataModel dm = DataModelFactory.createDataModel(ejbTimerModel); + dm.setProperty(PROJECT_NAME, EJB_PROJECT_NAME); + dm.setProperty(JAVA_PACKAGE, PACKAGE); + dm.setProperty(CLASS_NAME, ejbTimerName); + dm.setBooleanProperty(AddEjbTimerDataModelProvider.NON_PERSISTENT, persistent); + + runAndVerify(dm); + } + private void addMessageDrivenBean_Defaults() throws Exception { IDataModel dm = DataModelFactory.createDataModel(NewMessageDrivenBeanClassDataModelProvider.class); dm.setProperty(PROJECT_NAME, EJB_PROJECT_NAME); @@ -127,7 +209,7 @@ runAndVerify(dm); } - private void assertJavaFileExists(String fullyQualifiedName) throws JavaModelException { + private IFile assertJavaFileExists(String fullyQualifiedName) throws JavaModelException { IJavaProject javaProject = JavaCore.create( ResourcesPlugin.getWorkspace().getRoot()) .getJavaModel().getJavaProject(EJB_PROJECT_NAME); @@ -137,6 +219,22 @@ IFile file = (IFile) type.getResource(); assertNotNull("Source file for Java type " + fullyQualifiedName + " not found", file); assertTrue(file.exists()); + return file; + } + + private boolean contains(String fullyQualifiedName, String regex) throws CoreException, IOException { + IFile file = assertJavaFileExists(fullyQualifiedName); + BufferedReader bReader = new BufferedReader(new InputStreamReader(file.getContents())); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = bReader.readLine()) != null) { + sb.append(line).append(System.lineSeparator()); + } + bReader.close(); + System.out.println(sb); + Matcher matcher = Pattern.compile(regex).matcher(sb); + + return matcher.find(); } }
diff --git a/tests/org.eclipse.jst.j2ee.tests/pom.xml b/tests/org.eclipse.jst.j2ee.tests/pom.xml index d924b8b..0d24857 100644 --- a/tests/org.eclipse.jst.j2ee.tests/pom.xml +++ b/tests/org.eclipse.jst.j2ee.tests/pom.xml
@@ -22,6 +22,6 @@ <groupId>org.eclipse.webtools.javaee</groupId> <artifactId>org.eclipse.jst.j2ee.tests</artifactId> - <version>1.1.600-SNAPSHOT</version> + <version>1.1.700-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project>