Author: rmannibucau
Date: Tue Sep 30 21:47:37 2014
New Revision: 1628558
URL: http://svn.apache.org/r1628558
Log:
TOMEE-1367 singleDumpByArchiveName to avoid to dump N times the same SW archive
- ported to 1.7.x
Modified:
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
Modified:
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java?rev=1628558&r1=1628557&r2=1628558&view=diff
==============================================================================
---
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
(original)
+++
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
Tue Sep 30 21:47:37 2014
@@ -45,6 +45,7 @@ public class TomEEConfiguration implemen
protected String properties = "";
protected String webContextToUseWithEars;
protected boolean keepServerXmlAsThis;
+ protected boolean singleDumpByArchiveName = false;
public boolean isUnpackWars() {
return unpackWars;
@@ -211,4 +212,12 @@ public class TomEEConfiguration implemen
public void setKeepServerXmlAsThis(final boolean keepServerXmlAsThis) {
this.keepServerXmlAsThis = keepServerXmlAsThis;
}
+
+ public boolean isSingleDumpByArchiveName() {
+ return singleDumpByArchiveName;
+ }
+
+ public void setSingleDumpByArchiveName(final boolean
singleDumpByArchiveName) {
+ this.singleDumpByArchiveName = singleDumpByArchiveName;
+ }
}
Modified:
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java?rev=1628558&r1=1628557&r2=1628558&view=diff
==============================================================================
---
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
(original)
+++
tomee/tomee/branches/tomee-1.7.x/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
Tue Sep 30 21:47:37 2014
@@ -77,9 +77,9 @@ public abstract class TomEEContainer<Con
protected boolean isTestable(final Archive<?> archive, final
DeploymentDescription deploymentDescription) {
return deploymentDescription != null
- && deploymentDescription.isArchiveDeployment()
- && (deploymentDescription.getArchive() == archive ||
deploymentDescription.getTestableArchive() == archive)
- && deploymentDescription.testable();
+ && deploymentDescription.isArchiveDeployment()
+ && (deploymentDescription.getArchive() == archive ||
deploymentDescription.getTestableArchive() == archive)
+ && deploymentDescription.testable();
}
@Override
@@ -99,10 +99,11 @@ public abstract class TomEEContainer<Con
// with multiple containers we don't want it so let the user eb able
to skip it
if (configuration.getExportConfAsSystemProperty()) {
+ final ObjectMap map = new ObjectMap(configuration);
//
// Export the config back out to properties
//
- for (final Map.Entry<String, Object> entry : new
ObjectMap(configuration).entrySet()) {
+ for (final Map.Entry<String, Object> entry : map.entrySet()) {
for (final String prefix : prefixes.value()) {
try {
final String property = prefix + "." + entry.getKey();
@@ -130,7 +131,8 @@ public abstract class TomEEContainer<Con
randomPorts.add(i);
}
- for (final Map.Entry<String, Object> entry : new
ObjectMap(configuration).entrySet()) {
+ final ObjectMap map = new ObjectMap(configuration);
+ for (final Map.Entry<String, Object> entry : map.entrySet()) {
if (!entry.getKey().toLowerCase().endsWith("port")) {
continue;
}
@@ -252,11 +254,9 @@ public abstract class TomEEContainer<Con
final File file = dumpFile(archive);
final String fileName = file.getName();
- if (fileName.endsWith(".war")) { // ??
- final File extracted = new File(file.getParentFile(),
fileName.substring(0, fileName.length() - 4));
- if (extracted.exists()) {
- extracted.deleteOnExit();
- }
+ if (fileName.endsWith(".war") || fileName.endsWith(".ear")) {
+ // extracted folder, TODO: openejb work dir is ignored here
+ Files.deleteOnExit(new File(file.getParentFile(),
fileName.substring(0, fileName.length() - 4)));
}
final AppInfo appInfo;
@@ -315,7 +315,6 @@ public abstract class TomEEContainer<Con
return new ProtocolMetaData().addContext(httpContext);
} catch (final Exception e) {
- e.printStackTrace();
throw new DeploymentException("Unable to deploy", e);
}
}
@@ -329,20 +328,37 @@ public abstract class TomEEContainer<Con
Files.deleteOnExit(new File(tmpDir));
File file;
- int i = 0;
- do { // be sure we don't override something existing
- file = new File(tmpDir + File.separator + i++ + File.separator +
archive.getName());
- } while (file.getParentFile().exists()); // we will delete the parent
(to clean even complicated unpacking)
+ if (configuration.isSingleDumpByArchiveName()) {
+ file = new File(tmpDir + File.separator + archive.getName());
+ } else {
+ int i = 0;
+ do { // be sure we don't override something existing
+ file = new File(tmpDir + File.separator + i++ + File.separator
+ archive.getName());
+ } while (file.getParentFile().exists()); // we will delete the
parent (to clean even complicated unpacking)
+ }
if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {
LOGGER.warning("can't create " + file.getParent());
}
Files.deleteOnExit(file.getParentFile());
+ final Assignable finalArchive;
if (isTestable(archive, deployment.get())) {
- archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file,
true);
+ finalArchive = archiveWithTestInfo(archive);
} else {
- archive.as(ZipExporter.class).exportTo(file, true);
+ finalArchive = archive;
+ }
+
+ long size = -1;
+ if (file.exists()) {
+ size = file.length();
+ }
+ finalArchive.as(ZipExporter.class).exportTo(file, true);
+ if (size > 0 && size != file.length()) {
+ LOGGER.warning("\nFile overwritten but size doesn't match: (now) "
+ + file.length() + "/(before) " + size + " name="+
file.getName()
+ + (configuration.isSingleDumpByArchiveName() ? " maybe set
singleDumpByArchiveName to false" : "")
+ + "\n");
}
return file;
@@ -367,8 +383,8 @@ public abstract class TomEEContainer<Con
name = name.substring(0, name.length() - ".war".length());
}
return archive.add(
- new StringAsset(testClass.get().getJavaClass().getName() + '#' +
name),
- ArchivePaths.create("arquillian-tomee-info.txt"));
+ new StringAsset(testClass.get().getJavaClass().getName() + '#'
+ name),
+ ArchivePaths.create("arquillian-tomee-info.txt"));
}
protected Deployer deployer() throws NamingException {
@@ -384,7 +400,7 @@ public abstract class TomEEContainer<Con
} catch (final RuntimeException ne) { // surely
"org.apache.openejb.client.ClientRuntimeException: Invalid response from
server: -1"
if (retry > 1) {
try { // wait a bit before retrying
- Thread.sleep(500);
+ Thread.sleep(200);
} catch (final InterruptedException ignored) {
// no-op
}
@@ -418,14 +434,16 @@ public abstract class TomEEContainer<Con
@Override
public void undeploy(final Archive<?> archive) throws DeploymentException {
final DeployedApp deployed = moduleIds.remove(archive.getName());
- if (null != deployed) {
- try {
- deployer().undeploy(deployed.path);
- } catch (final Exception e) {
- final String msg = "Unable to undeploy " + archive.getName();
- LOGGER.log(Level.SEVERE, msg, e);
- throw new DeploymentException(msg, e);
- } finally {
+ try {
+ if (deployed == null) {
+ LOGGER.warning(archive.getName() + " was not deployed");
+ return;
+ }
+ deployer().undeploy(deployed.path);
+ } catch (final Exception e) {
+ throw new DeploymentException("Unable to undeploy " +
archive.getName(), e);
+ } finally {
+ if (deployed != null &&
!configuration.isSingleDumpByArchiveName()) {
LOGGER.info("cleaning " + deployed.file.getAbsolutePath());
Files.tryTodelete(deployed.file); // "i" folder