Author: ozizka(a)redhat.com
Date: 2009-07-13 08:13:50 -0400 (Mon, 13 Jul 2009)
New Revision: 554
Added:
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/AbstractProfileServiceTest.java
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/RepeatedDeploymentViaPSTest.java
Modified:
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/AppConstants.java
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ejb/EjbTestBase.java
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java
Log:
EJB 2.0 tests updated.
Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/AppConstants.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/AppConstants.java 2009-07-08
19:13:36 UTC (rev 553)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/AppConstants.java 2009-07-13
12:13:50 UTC (rev 554)
@@ -52,6 +52,17 @@
MC_BEAN(AppConstants.NAV_MC, "?", "mc",
"", null, "application/java-archive"),
EMB_WAR(AppConstants.NAV_EMB_WAR,"Embbedded WAR", "",
".war", null, "application/war");
+ static{
+ EJB2.jmxMBeanNameFormat =
"jboss.j2ee:module=\"%s\",service=EjbModule";
+ EJB3.jmxMBeanNameFormat = "jboss.j2ee:ear=%s,jar=%s,service=EJB3";
+ }
+
+ private String jmxMBeanNameFormat;
+ private void setJmxMBeanNameFormat( String name ){ this.jmxMBeanNameFormat = name; }
+ public String getJmxMBeanNameFormat(){ return this.jmxMBeanNameFormat; }
+
+
+
// -- Fields --
protected final String navTreeLabel;
Added:
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/AbstractProfileServiceTest.java
===================================================================
---
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/AbstractProfileServiceTest.java
(rev 0)
+++
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/AbstractProfileServiceTest.java 2009-07-13
12:13:50 UTC (rev 554)
@@ -0,0 +1,256 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.jopr.jsfunit.as5.app.ear;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.naming.InitialContext;
+
+import javax.naming.NamingException;
+import org.jboss.deployers.spi.management.ManagementView;
+import org.jboss.deployers.spi.management.deploy.DeploymentManager;
+import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
+import org.jboss.jopr.jsfunit.EmbjoprTestCase;
+import org.jboss.managed.api.ComponentType;
+import org.jboss.managed.api.DeploymentTemplateInfo;
+import org.jboss.managed.api.ManagedComponent;
+import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.profileservice.spi.ProfileKey;
+import org.jboss.profileservice.spi.ProfileService;
+import org.jboss.virtual.VFS;
+
+/**
+ * @author <a href="mailto:alex@jboss.org">Alexey Loubyansky</a>
+ * @version <tt>$Revision: 87016 $</tt>
+ */
+public abstract class AbstractProfileServiceTest
+ extends EmbjoprTestCase
+{
+
+ /** We use the default profile, defined by DeploymentManager to deploy apps. */
+ public static final ProfileKey defaultProfile = new ProfileKey(ProfileKey.DEFAULT);
+
+ protected ManagementView activeView;
+ protected DeploymentManager deployMgr;
+ private MetaValueFactory metaValueFactory;
+
+ public AbstractProfileServiceTest(String name){
+ //super(name);
+ super();
+ }
+ public AbstractProfileServiceTest(){
+ super();
+ }
+
+ /**
+ * @return the ProfileKey.name to use when loading the profile
+ */
+ protected String getProfileName()
+ {
+ return null;
+ }
+
+ protected ProfileKey getProfileKey()
+ {
+ if(getProfileName() == null)
+ return defaultProfile;
+
+ return new ProfileKey(getProfileName());
+ }
+
+ protected void removeDeployment(String deployment)
+ throws Exception
+ {
+ String names[] = new String[] {deployment};
+ DeploymentManager deployMgr = getDeploymentManager();
+ try
+ {
+ DeploymentProgress progress = deployMgr.stop(names);
+ progress.run();
+ assertFalse("failed: " + progress.getDeploymentStatus().getFailure(),
progress.getDeploymentStatus().isFailed());
+ }
+ finally
+ {
+ DeploymentProgress progress = deployMgr.remove(names);
+ progress.run();
+ assertFalse("failed: " + progress.getDeploymentStatus().getFailure(),
progress.getDeploymentStatus().isFailed());
+ }
+ }
+
+ protected void createComponentTest(String templateName,
+ Map<String, MetaValue> propValues,
+ String deploymentName,
+ ComponentType componentType, String componentName)
+ throws Exception
+ {
+ createComponentTest(templateName, propValues, deploymentName, componentType,
componentName, true);
+ }
+
+ protected void createComponentTest(String templateName,
+ Map<String, MetaValue> propValues,
+ String deploymentName,
+ ComponentType componentType, String componentName,
+ boolean processChanges)
+ throws Exception
+ {
+ Set<String> removedPropNames = Collections.emptySet();
+ createComponentTest(templateName, propValues, removedPropNames,
+ deploymentName, componentType, componentName, processChanges);
+ }
+ protected void createComponentTest(String templateName,
+ Map<String, MetaValue> propValues,
+ Set<String> removedPropNames,
+ String deploymentName,
+ ComponentType componentType, String componentName,
+ boolean processChanges)
+ throws Exception
+ {
+ ManagementView mgtView = getManagementView();
+ DeploymentTemplateInfo info = mgtView.getTemplate(templateName);
+ assertNotNull("template " + templateName + " found", info);
+ Map<String, ManagedProperty> props = info.getProperties();
+ for(String propName : propValues.keySet())
+ {
+ ManagedProperty prop = props.get(propName);
+ log.debug("createComponentTest("+propName+") before:
"+prop.getValue());
+ assertNotNull("property " + propName + " found in template "
+ templateName, prop);
+ prop.setValue(propValues.get(propName));
+ log.debug("createComponentTest("+propName+") after:
"+prop.getValue());
+ }
+ for(String propName : removedPropNames)
+ {
+ ManagedProperty prop = props.get(propName);
+ prop.setRemoved(true);
+ log.debug("removed property: "+propName);
+ }
+
+ mgtView.applyTemplate(deploymentName, info);
+ if(processChanges)
+ {
+ mgtView.process();
+
+ // reload the view
+ activeView = null;
+ mgtView = getManagementView();
+ ManagedComponent dsMC = getManagedComponent(mgtView, componentType,
componentName);
+ assertNotNull(dsMC);
+
+ Set<String> mcPropNames = new
HashSet<String>(dsMC.getPropertyNames());
+ for(String propName : propValues.keySet())
+ {
+ ManagedProperty prop = dsMC.getProperty(propName);
+ assertNotNull(prop);
+ Object propValue = prop.getValue();
+ Object expectedValue = propValues.get(propName);
+ assertEquals(prop.getName(), expectedValue, propValue);
+
+ mcPropNames.remove(propName);
+ }
+
+ if(!mcPropNames.isEmpty())
+ {
+ log.warn(getName() + "> untested properties: " + mcPropNames);
+ }
+ }
+ }
+
+ /**
+ * Obtain the ProfileService.ManagementView
+ * @return
+ * @throws Exception
+ */
+ protected ManagementView getManagementView()
+ throws Exception
+ {
+ if( activeView == null )
+ {
+ InitialContext ctx = getInitialContext();
+ ProfileService ps = (ProfileService) ctx.lookup("ProfileService");
+ activeView = ps.getViewManager();
+ // Init the VFS to setup the vfs* protocol handlers
+ VFS.init();
+ }
+ // Reload
+ activeView.load();
+ return activeView;
+ }
+ /**
+ * Obtain the ProfileService.ManagementView
+ * @return
+ * @throws Exception
+ */
+ protected DeploymentManager getDeploymentManager()
+ throws Exception
+ {
+ if( deployMgr == null )
+ {
+ InitialContext ctx = getInitialContext();
+ ProfileService ps = (ProfileService) ctx.lookup("ProfileService");
+ deployMgr = ps.getDeploymentManager();
+ deployMgr.loadProfile(getProfileKey());
+ // Init the VFS to setup the vfs* protocol handlers
+ VFS.init();
+ }
+ return deployMgr;
+ }
+
+ /**
+ * Locate the given ComponentType with the given component name.
+ *
+ * @param mgtView -
+ * @return the matching ManagedComponent if found, null otherwise
+ * @throws Exception
+ */
+ protected ManagedComponent getManagedComponent(ManagementView mgtView, ComponentType
type, String name)
+ throws Exception
+ {
+ Set<ManagedComponent> comps = mgtView.getComponentsForType(type);
+ ManagedComponent mc = null;
+ for (ManagedComponent comp : comps)
+ {
+ String cname = comp.getName();
+ if( cname.endsWith(name) )
+ {
+ mc = comp;
+ break;
+ }
+ }
+ return mc;
+ }
+
+ protected MetaValueFactory getMetaValueFactory()
+ {
+ if(metaValueFactory == null)
+ metaValueFactory = MetaValueFactory.getInstance();
+ return metaValueFactory;
+ }
+
+ InitialContext getInitialContext() throws NamingException{
+ return new InitialContext();
+ }
+
+}
Added:
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/RepeatedDeploymentViaPSTest.java
===================================================================
---
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/RepeatedDeploymentViaPSTest.java
(rev 0)
+++
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ear/RepeatedDeploymentViaPSTest.java 2009-07-13
12:13:50 UTC (rev 554)
@@ -0,0 +1,148 @@
+package org.jboss.jopr.jsfunit.as5.app.ear;
+
+
+
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Set;
+
+
+import org.jboss.deployers.spi.management.ManagementView;
+import org.jboss.deployers.spi.management.deploy.DeploymentManager;
+import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
+import org.jboss.deployers.spi.management.deploy.DeploymentStatus;
+import org.jboss.logging.Logger;
+import org.jboss.managed.api.ManagedDeployment;
+import org.jboss.deployers.spi.management.deploy.ProgressListener;
+import org.jboss.jopr.jsfunit.AppConstants;
+import org.jboss.jopr.jsfunit.exceptions.EmbJoprTestException;
+
+
+/**
+ * Mostly copied from
+ * jboss-as-5.x/testsuite/src/main/org/jboss/test/profileservice/test
+ */
+public class RepeatedDeploymentViaPSTest extends AbstractProfileServiceTest implements
ProgressListener {
+
+
+
+ public void testRepeatedDeploymentViaProfileService() throws Exception {
+
+
+ final String DEPLOYABLE_NAME = AppConstants.BASIC_EAR;
+ int TURNS = 100;
+
+ String earFilePath = ejtt.getTestDataDir() + "/ear/"+DEPLOYABLE_NAME;
+
+ for (int i = TURNS; i > 0; i--) {
+ log.info("Remaining EAR deploys: "+i);
+ // Deploy and undeploy the EAR.
+ doDeployment(earFilePath, "ear", null);
+ }
+
+ }
+
+
+
+
+
+
+
+ public void progressEvent(org.jboss.deployers.spi.management.deploy.ProgressEvent
eventInfo) {
+ getLog().debug(eventInfo);
+ }
+
+ public URL getDeployURL( String file ) throws MalformedURLException{
+ return new URL("file:///"+
System.getProperty(AppConstants.SYSPROP_DEPLOY_DIR)+'/'+file );
+ }
+
+
+
+ protected final Logger log = Logger.getLogger(this.getClass().getName());
+ Logger getLog(){ return log; }
+
+ @SuppressWarnings("deprecation")
+ protected void doDeployment(String name, String type, ManagedDeploymentTester tester)
throws Exception
+ {
+ DeploymentManager deployMgr = getDeploymentManager();
+ URL contentURL = getDeployURL(name);
+ assertNotNull(contentURL);
+ getLog().debug(contentURL);
+ // TODO - hack to get off JDK's url handling
+ String urlString = contentURL.toExternalForm();
+ int p = urlString.indexOf(":/");
+ contentURL = new URL("vfszip" + urlString.substring(p));
+ getLog().debug(contentURL);
+
+ DeploymentStatus status;
+ DeploymentProgress progress = deployMgr.distribute(name, contentURL, true);
+ progress.addProgressListener(this);
+ progress.run();
+ String[] uploadedNames = {};
+ try
+ {
+ status = progress.getDeploymentStatus();
+ assertTrue("DeploymentStatus.isCompleted: " + status,
status.isCompleted());
+ // It should not be running yet
+ assertFalse("DeploymentStatus.isRunning: " + status, status.isRunning());
+ assertFalse("DeploymentStatus.isFailed: " + status, status.isFailed());
+
+ // Get the unique deployment name
+ uploadedNames = progress.getDeploymentID().getRepositoryNames();
+ getLog().debug("Uploaded deployment names:
"+Arrays.asList(uploadedNames));
+ // Now start the deployment
+ progress = deployMgr.start(uploadedNames);
+ progress.addProgressListener(this);
+ progress.run();
+ try
+ {
+ status = progress.getDeploymentStatus();
+ assertTrue("DeploymentStatus.isCompleted: " + status,
status.isCompleted());
+ assertFalse("DeploymentStatus.isRunning: " + status, status.isRunning());
+ assertFalse("DeploymentStatus.isFailed: " + status, status.isFailed());
+ // Check for a
+ ManagementView mgtView = getManagementView();
+ ManagedDeployment deployment = mgtView.getDeployment(uploadedNames[0]);
+ assertNotNull(deployment);
+ getLog().info("Found " + type + " deployment: " + deployment);
+ Set<String> types = deployment.getTypes();
+ if (types != null && types.isEmpty() == false)
+ assertTrue("Missing type: " + type + ", available: " + types,
types.contains(type));
+ if (tester != null)
+ {
+ tester.testManagedDeployment();
+ }
+ }
+ finally
+ {
+ //Thread.sleep(15 * 1000); // 15 secs >> more than it takes for reaper to run
:-)
+
+ // Stop/remove the deployment
+ progress = deployMgr.stop(uploadedNames);
+ progress.addProgressListener(this);
+ progress.run();
+ status = progress.getDeploymentStatus();
+ assertTrue("DeploymentStatus.isCompleted: " + status,
status.isCompleted());
+ assertFalse("DeploymentStatus.isFailed: " + status, status.isFailed());
+ }
+ }
+ finally
+ {
+ progress = deployMgr.remove(uploadedNames);
+ progress.addProgressListener(this);
+ progress.run();
+ status = progress.getDeploymentStatus();
+ assertTrue("DeploymentStatus.isCompleted: " + status,
status.isCompleted());
+ assertFalse("DeploymentStatus.isFailed: " + status, status.isFailed());
+ }
+ }
+
+
+ private interface ManagedDeploymentTester
+ {
+ void testManagedDeployment() throws Exception;
+ }
+
+}
Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ejb/EjbTestBase.java
===================================================================
---
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ejb/EjbTestBase.java 2009-07-08
19:13:36 UTC (rev 553)
+++
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/app/ejb/EjbTestBase.java 2009-07-13
12:13:50 UTC (rev 554)
@@ -123,7 +123,8 @@
// Use JMX to assert that the EJB components really did deploy successfully
- assertTrue("JMX doesn't report '"+DEPLOYABLE_NAME+"' as
deployed.", isEJBDeployed(DEPLOYABLE_NAME));
+ //assertTrue("JMX doesn't report '"+DEPLOYABLE_NAME+"' as
deployed.", isEJBDeployed(DEPLOYABLE_NAME));
+ assertTrue("JMX doesn't report '"+DEPLOYABLE_NAME+"' as
deployed.", ejtt.deployment.isDeployedAccordingToJMX(APP_TYPE, DEPLOYABLE_NAME));
// Undeploy the EJB JAR
HtmlButtonInput deleteButton = getAppDeleteButton(DEPLOYABLE_NAME);
Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java
===================================================================
---
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java 2009-07-08
19:13:36 UTC (rev 553)
+++
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java 2009-07-13
12:13:50 UTC (rev 554)
@@ -7,6 +7,8 @@
import java.net.UnknownHostException;
import java.util.*;
+import java.util.logging.Level;
+import javax.management.MalformedObjectNameException;
import org.jboss.jopr.jsfunit.exceptions.*;
import com.gargoylesoftware.htmlunit.html.*;
import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
@@ -23,6 +25,9 @@
import java.util.zip.ZipInputStream;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
@@ -32,6 +37,7 @@
import org.jboss.jopr.jsfunit.EmbjoprTestCase;
import org.jboss.jsfunit.jsfsession.*;
import org.jboss.logging.Logger;
+import org.jboss.mx.util.MBeanServerLocator;
import org.mozilla.javascript.NativeFunction;
import org.w3c.dom.Element;
@@ -45,7 +51,7 @@
*/
public class EmbJoprTestToolkit {
- private Logger log = Logger.getLogger(EmbJoprTestToolkit.class.getName());
+ private static Logger log = Logger.getLogger(EmbJoprTestToolkit.class.getName());
protected JSFClientSession client;
protected JSFServerSession server;
@@ -1709,17 +1715,67 @@
*/
public class Deployment {
- // TODO: Shortcuts:
- /*
- private void deployWAR( String warFilePath ){}
- private void undeployWAR( String warFileName ){}
- private void deployEAR( String warFilePath ){}
- private void undeployEAR( String warFileName ){}
- // Etc. */
+ /**
+ * Makes an MBean name and checks via JMX whether it is deployed.
+ */
+ public boolean isDeployedAccordingToJMX( AppConstants.DeployableTypes type, String
deployableName )
+ throws EmbJoprTestException, IOException
+ {
+ // Get the MBean name.
+ String mBeanNameFormat = type.getJmxMBeanNameFormat();
+ if( null == mBeanNameFormat )
+ throw new UnsupportedOperationException("JMX name for this filled yet.");
+ String mBeanName = String.format( mBeanNameFormat, deployableName );
+ // Check whether the mBean is deployed.
+ try {
+ return isMBeanStateDeployedByQuery(mBeanName);
+ } catch (MalformedObjectNameException ex) {
+ throw new EmbJoprTestException("Malformed name: "+mBeanName, ex);
+ } catch (JMException ex) {
+ throw new EmbJoprTestException(ex);
+ } catch (IOException ex) {
+ throw ex;
+ }
+ }
+
+
/**
+ * Queries JBoss via JMX for given query and checks whether the
+ * StateString property of the first result is "Started".
+ *
+ * @param mBeanName
+ * @return true if the StateString property of the first MBean found is
"Started".
+ * @throws javax.management.JMException
+ * @throws java.io.IOException
+ */
+ protected boolean isMBeanStateDeployedByQuery(String mBeanName) throws JMException,
IOException, MalformedObjectNameException
+ {
+ log.info("Querying JMX: "+mBeanName);
+ ObjectName objName = new ObjectName(mBeanName);
+ MBeanServer jmxServer = MBeanServerLocator.locateJBoss();
+ Set mBeans = jmxServer.queryNames(objName, null);
+ if (mBeans.size() != 1) {
+ log.info(mBeanName+" not found.");
+ return false;
+ }
+ ObjectName deploymentMBean = (ObjectName) mBeans.iterator().next();
+ // Returns org.jboss.deployers.spi.DeploymentState.
+ Object state = jmxServer.getAttribute(deploymentMBean, "State");
+ log.info("State is '"+state.toString()+"'.");
+ return
+ "DEPLOYED".equals(state.toString()) // AS 4
+ || "3".equals(state.toString()) // AS 5; StateString =
"Deployed"
+ || "8".equals(state.toString()) // EJB: "Registered"
+ ;
+ }
+
+
+
+
+ /**
* Deploys the deployable using EmbJopr's web UI.
*
* @param type Type of the deployable - EAR, SAR, WAR, ...
@@ -1804,8 +1860,6 @@
throw new EmbJoprTestException(ex.getClass().getName()+":
"+ex.getMessage(), ex);
}
-
-
}
@@ -1859,6 +1913,7 @@
return isDeployedAccordingToEmbJopr( type, deployableName, false );
}
+
/**
* Returns true if EmbJopr lists a deployable of given type and name,
* and it's State is UP; false otherwise.
@@ -1870,25 +1925,6 @@
// Refresh / go to the appropriate page.
getNavTree().getNodeByLabel( type.getNavTreeLabel() ).click();
- // Pagination
- //int totalItemsCount =
getTabMenu().getTabContentBox().getPagination().getTotalItemsCount();
-
- /*
- ContentTableRow appRow = null;
-
- // Search trough all pages.
- int currentPage = 1;
- do {
- appRow = getDefaultContentTable().findFirstRowContainingLink(deployableName);
- if( null != appRow ){
- break;
- }else{
- log.debug("Row with "+deployableName+" not present on page
"+currentPage+".");
- }
- } while( currentPage++ < 20 &&
getTabMenu().getTabContentBox().getPagination().goNext() );
-
- */
-
// Find the row containing the deployable. Use the pagination if needed.
ContentTableRow appRow = getTabMenu().getTabContentBox().
findLinkRowInDataTableUsingPagination(deployableName);
@@ -1983,14 +2019,14 @@
* Returns true if there's a file of the given name in server's deploy dir;
* false otherwise.
*/
- private boolean isDeployedAccordingToFileSystem( DeployableTypes type, String name )
+ public boolean isDeployedAccordingToFileSystem( DeployableTypes type, String name )
{
String deployPath = getDeployDir();
String fileName = deployPath+"/"+name;
return (new File(fileName)).exists();
}
- private void undeployViaFileSystem( String name ) throws EmbJoprTestException{
+ public void undeployViaFileSystem( String name ) throws EmbJoprTestException{
String deployPath = getDeployDir();
String fileName = deployPath+"/"+name;
File fileToDelete = new File(fileName);