/*
* Copyright 2002 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.sun.s1asdev.jmsdd;
import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
import com.sun.enterprise.deployment.*;
import com.sun.enterprise.deployment.archivist.AppClientArchivist;
import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
import com.sun.enterprise.loader.ASURLClassLoader;
import junit.framework.TestCase;
import org.glassfish.deployment.common.JavaEEResourceType;
import org.glassfish.ejb.deployment.archivist.EjbArchivist;
import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
import org.glassfish.ejb.deployment.descriptor.EjbDescriptor;
import org.glassfish.web.deployment.archivist.WebArchivist;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class ArchiveTest extends TestCase {
String archiveDir = null;
private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
protected void setUp() throws Exception {
super.setUp();
TestUtil.setupHK2();
archiveDir = System.getProperty("ArchiveDir");
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testApplicationArchive() throws Exception {
String tcName = "jms-destination-definition-application-archive-test";
try {
doTestApplicationArchive();
stat.addStatus(tcName, stat.PASS);
} catch(Exception e) {
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestApplicationArchive() throws IOException, SAXParseException {
String appArchiveName = "jms-destination-definition-application";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not find the archive: " + archive.getAbsolutePath(), archive.exists());
ApplicationArchivist reader = (ApplicationArchivist) TestUtil.getByType(ApplicationArchivist.class);
reader.setAnnotationProcessingRequested(true);
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
reader.setClassLoader(classLoader);
Application applicationDesc = reader.open(archive);
Map<String, JMSDestinationDefinitionDescriptor> expectedJMSDDDs =
new HashMap<String, JMSDestinationDefinitionDescriptor>();
JMSDestinationDefinitionDescriptor desc;
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope jms destination defined in UT Application DD");
desc.setName("java:global/env/UT_Application_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope jms destination defined in UT Application DD");
desc.setName("java:app/env/UT_Application_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
TestUtil.compareJMSDDD(expectedJMSDDDs, applicationDesc.getResourceDescriptors(JavaEEResourceType.JMSDD));
}
public void testApplicationClientArchive() throws Exception {
String tcName = "jms-destination-definition-appclient-archive-test";
try {
doTestApplicationClientArchive();
stat.addStatus(tcName, stat.PASS);
} catch(Exception e) {
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestApplicationClientArchive() throws IOException, SAXParseException {
String appArchiveName = "jms-destination-definition-appclient";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not find the archive: " + archive.getAbsolutePath(), archive.exists());
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
AppClientArchivist reader = (AppClientArchivist)TestUtil.getByType(AppClientArchivist.class);
reader.setAnnotationProcessingRequested(true);
reader.setClassLoader(classLoader);
assertTrue("Archivist should handle annotations.", reader.isAnnotationProcessingRequested());
ApplicationClientDescriptor appclientDesc = reader.open(archive);
Map<String, JMSDestinationDefinitionDescriptor> expectedJMSDDDs =
new HashMap<String, JMSDestinationDefinitionDescriptor>();
JMSDestinationDefinitionDescriptor desc;
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by Appclient DD");
desc.setName("java:global/env/Appclient_ModByDD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:global/env/Appclient_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:app/env/Appclient_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:module/env/Appclient_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:comp/env/Appclient_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined in Appclient DD");
desc.setName("java:global/env/Appclient_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined in Appclient DD");
desc.setName("java:app/env/Appclient_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined in Appclient DD");
desc.setName("java:module/env/Appclient_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined in Appclient DD");
desc.setName("java:comp/env/Appclient_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
TestUtil.compareJMSDDD(expectedJMSDDDs, appclientDesc.getResourceDescriptors(JavaEEResourceType.JMSDD));
}
public void testWebArchive() throws Exception {
String tcName = "jms-destination-definition-web-archive-test";
try {
doTestWebArchive();
stat.addStatus(tcName, stat.PASS);
} catch(Exception e) {
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestWebArchive() throws IOException, SAXParseException {
String appArchiveName = "jms-destination-definition-web";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not find the archive: " + archive.getAbsolutePath(), archive.exists());
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
WebArchivist reader = (WebArchivist) TestUtil.getByType(WebArchivist.class);
reader.setAnnotationProcessingRequested(true);
reader.setClassLoader(classLoader);
assertTrue("Archivist should handle annotations.", reader.isAnnotationProcessingRequested());
WebBundleDescriptor webDesc = reader.open(archive);
Map<String, JMSDestinationDefinitionDescriptor> expectedJMSDDDs =
new HashMap<String, JMSDestinationDefinitionDescriptor>();
JMSDestinationDefinitionDescriptor desc;
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by Web DD");
desc.setName("java:global/env/Servlet_ModByDD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:global/env/Servlet_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:app/env/Servlet_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:module/env/Servlet_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:comp/env/Servlet_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined in Web DD");
desc.setName("java:global/env/Web_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined in Web DD");
desc.setName("java:app/env/Web_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined in Web DD");
desc.setName("java:module/env/Web_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined in Web DD");
desc.setName("java:comp/env/Web_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
TestUtil.compareJMSDDD(expectedJMSDDDs, webDesc.getResourceDescriptors(JavaEEResourceType.JMSDD));
}
public void testEJBArchive() throws Exception {
String tcName = "jms-destination-definition-ejb-archive-test";
try {
doTestEJBArchive();
stat.addStatus(tcName, stat.PASS);
} catch(Exception e) {
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestEJBArchive() throws IOException, SAXParseException {
String appArchiveName = "jms-destination-definition-ejb";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not find the archive: " + archive.getAbsolutePath(), archive.exists());
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
EjbArchivist reader = (EjbArchivist) TestUtil.getByType(EjbArchivist.class);
reader.setClassLoader(classLoader);
reader.setAnnotationProcessingRequested(true);
assertTrue("Archivist should handle annotations.", reader.isAnnotationProcessingRequested());
EjbBundleDescriptorImpl ejbBundleDesc = reader.open(archive);
Set<ResourceDescriptor> acturalCRDDs = new HashSet<ResourceDescriptor>();
for (EjbDescriptor ejbDesc : ejbBundleDesc.getEjbs()) {
acturalCRDDs.addAll(ejbDesc.getResourceDescriptors(JavaEEResourceType.JMSDD));
}
Map<String, JMSDestinationDefinitionDescriptor> expectedJMSDDDs =
new HashMap<String, JMSDestinationDefinitionDescriptor>();
JMSDestinationDefinitionDescriptor desc;
// jms-destination in DD for stateful EJB
{
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by EJB DD");
desc.setName("java:global/env/HelloStatefulEJB_ModByDD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined in EJB DD");
desc.setName("java:global/env/HelloStatefulEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined in EJB DD");
desc.setName("java:app/env/HelloStatefulEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined in EJB DD");
desc.setName("java:module/env/HelloStatefulEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined in EJB DD");
desc.setName("java:comp/env/HelloStatefulEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
}
// jms-destination in DD for stateless EJB
{
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by EJB DD");
desc.setName("java:global/env/HelloEJB_ModByDD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined in EJB DD");
desc.setName("java:global/env/HelloEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined in EJB DD");
desc.setName("java:app/env/HelloEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined in EJB DD");
desc.setName("java:module/env/HelloEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined in EJB DD");
desc.setName("java:comp/env/HelloEJB_DD_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
}
// jms-destination in annotation for stateful EJB
{
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:global/env/HelloStatefulEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:app/env/HelloStatefulEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:module/env/HelloStatefulEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:comp/env/HelloStatefulEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
}
// jms-destination in annotation for stateless EJB
{
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:global/env/HelloEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:app/env/HelloEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:module/env/HelloEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Topic");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalTopic");
expectedJMSDDDs.put(desc.getName(), desc);
desc = new JMSDestinationDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @JMSDestinationDefinition");
desc.setName("java:comp/env/HelloEJB_Annotation_JMSDestination");
desc.setClassName("javax.jms.Queue");
desc.setResourceAdapter("jmsra");
desc.setDestinationName("myPhysicalQueue");
expectedJMSDDDs.put(desc.getName(), desc);
}
TestUtil.compareJMSDDD(expectedJMSDDDs, acturalCRDDs);
}
}