[jboss-cvs] JBossAS SVN: r95237 - in projects/jboss-deployers/branches/vfs3: deployers-core/src/main/java/org/jboss/deployers/plugins/structure and 13 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Oct 20 22:20:50 EDT 2009
Author: johnbailey
Date: 2009-10-20 22:20:48 -0400 (Tue, 20 Oct 2009)
New Revision: 95237
Added:
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSHandleCleanupTask.java
Modified:
projects/jboss-deployers/branches/vfs3/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ContextInfo.java
projects/jboss-deployers/branches/vfs3/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ContextInfoImpl.java
projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContext.java
projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContext.java
projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructuralDeployers.java
projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructureBuilder.java
projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContext.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/UrlIntegrationDeployer.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/JARStructure.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeployersVFSTest.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTest.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestMetaDataUrlIntegrationDeployer.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestPathUrlIntegrationDeployer.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/AbstractStructureTest.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/CombinedFileStructureUnitTestCase.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileMatcherTestCase.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/ConfiguredSuffixJARStructureUnitTestCase.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/JARStructureUnitTestCase.java
projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/AbstractWARStructureTest.java
projects/jboss-deployers/branches/vfs3/pom.xml
Log:
Added Cleanup tasks to DeploymentContext to support closing VFS handles
Modified: projects/jboss-deployers/branches/vfs3/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ContextInfoImpl.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ContextInfoImpl.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-core/src/main/java/org/jboss/deployers/plugins/structure/ContextInfoImpl.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -64,6 +64,9 @@
/** The modification type */
private ModificationType modificationType;
+
+ /** Cleanup Task */
+ private Runnable cleanupTask;
/**
* Create a new ContextInfoImpl.
@@ -241,7 +244,15 @@
{
this.modificationType = modificationType;
}
+
+ public Runnable getCleanupTask() {
+ return cleanupTask;
+ }
+ public void setCleanupTask(Runnable cleanupTask) {
+ this.cleanupTask = cleanupTask;
+ }
+
@Override
public String toString()
{
Modified: projects/jboss-deployers/branches/vfs3/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ContextInfo.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ContextInfo.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-core-spi/src/main/java/org/jboss/deployers/spi/structure/ContextInfo.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -125,4 +125,18 @@
* @param modificationType the modification type
*/
void setModificationType(ModificationType modificationType);
+
+ /**
+ * A task to be run during deployment cleanup
+ *
+ * @return the cleanup task
+ */
+ Runnable getCleanupTask();
+
+ /**
+ * Set a task to be run during deployment cleanup.
+ *
+ * @param cleanupTask the cleanup task
+ */
+ void setCleanupTask(Runnable cleanupTask);
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContext.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContext.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/DeploymentContext.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -407,4 +407,11 @@
* Cleanup the deployment context
*/
void cleanup();
+
+ /**
+ * Additional tasks to run during cleanup
+ *
+ * @param cleanupTasks
+ */
+ void setCleanTasks(List<Runnable> cleanupTasks);
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContext.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContext.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractDeploymentContext.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -160,6 +160,9 @@
/** The required stage */
private DeploymentStage requiredStage = DeploymentStages.INSTALLED;
+ /** Tasks to run at cleanup */
+ private List<Runnable> cleanupTasks;
+
/**
* Get the scope builder for a deployment context
*
@@ -994,6 +997,14 @@
public void cleanup()
{
cleanupRepository(this);
+
+ if(cleanupTasks != null)
+ {
+ for(Runnable task : cleanupTasks)
+ {
+ task.run();
+ }
+ }
}
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
@@ -1016,6 +1027,11 @@
public void postDeregister()
{
}
+
+ public void setCleanTasks(List<Runnable> cleanupTasks)
+ {
+ this.cleanupTasks = cleanupTasks;
+ }
/**
* Register mbeans
Modified: projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructuralDeployers.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructuralDeployers.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructuralDeployers.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -21,9 +21,12 @@
*/
package org.jboss.deployers.structure.spi.helpers;
+import java.util.List;
+
import org.jboss.deployers.client.spi.Deployment;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.spi.attachments.Attachments;
+import org.jboss.deployers.spi.structure.ContextInfo;
import org.jboss.deployers.spi.structure.StructureMetaData;
import org.jboss.deployers.spi.structure.StructureMetaDataFactory;
import org.jboss.deployers.structure.spi.DeploymentContext;
@@ -78,19 +81,41 @@
}
catch (DeploymentException e)
{
+ cleanup(structureMetaData);
throw e;
}
catch (Throwable t)
{
+ cleanup(structureMetaData);
throw DeploymentException.rethrowAsDeploymentException("Exception determining structure: " + deployment, t);
}
}
-
- return structureBuilder.populateContext(deployment, structureMetaData);
+ try {
+ return structureBuilder.populateContext(deployment, structureMetaData);
+ } catch(DeploymentException deploymentException) {
+ cleanup(structureMetaData);
+ throw deploymentException;
+ }
}
protected void determineStructure(Deployment deployment, StructureMetaData structure) throws Exception
{
// NOTHING
}
+
+ protected void cleanup(StructureMetaData structureMetaData) {
+ if(structureMetaData != null) {
+ List<ContextInfo> contexts = structureMetaData.getContexts();
+ if(contexts != null) {
+ for(ContextInfo context : contexts) {
+ cleanup(context);
+ }
+ }
+ }
+ }
+
+ protected void cleanup(ContextInfo contextInfo) {
+ if(contextInfo.getCleanupTask() != null)
+ contextInfo.getCleanupTask().run();
+ }
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructureBuilder.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructureBuilder.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/AbstractStructureBuilder.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -22,6 +22,7 @@
package org.jboss.deployers.structure.spi.helpers;
import java.lang.reflect.Field;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -79,7 +80,10 @@
applyStructureMetaData(result, metaData);
contextInfo.setPredeterminedManagedObjects(deployment.getPredeterminedManagedObjects());
+
applyContextInfo(result, contextInfo);
+
+
}
catch (Throwable t)
{
@@ -212,6 +216,9 @@
if (structureProcessor != null)
structureProcessor.applyContextInfo(context, contextInfo);
+
+ if(contextInfo.getCleanupTask() != null)
+ context.setCleanTasks(Collections.singletonList(contextInfo.getCleanupTask()));
}
/**
Modified: projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContext.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContext.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-structure-spi/src/main/java/org/jboss/deployers/structure/spi/helpers/ComponentDeploymentContext.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -105,6 +105,9 @@
/** The mutable scope */
private ScopeKey mutableScope;
+ /** The cleanup tasks */
+ private List<Runnable> cleanupTasks;
+
/**
* For serialization
*/
@@ -638,6 +641,13 @@
public void cleanup()
{
AbstractDeploymentContext.cleanupRepository(this);
+ if(cleanupTasks != null)
+ {
+ for(Runnable task : cleanupTasks)
+ {
+ task.run();
+ }
+ }
}
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
@@ -660,6 +670,10 @@
public void postDeregister()
{
}
+
+ public void setCleanTasks(List<Runnable> cleanupTasks) {
+ this.cleanupTasks = cleanupTasks;
+ }
/**
* Register mbeans
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/UrlIntegrationDeployer.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/UrlIntegrationDeployer.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/classloader/UrlIntegrationDeployer.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -129,7 +129,7 @@
{
for (URL integrationURL : integrationURLs)
{
- VirtualFile integration = VFS.getRoot(integrationURL);
+ VirtualFile integration = VFS.getChild(integrationURL);
unit.addClassPath(integration);
added.add(integration);
}
@@ -153,7 +153,7 @@
{
try
{
- VirtualFile integration = VFS.getRoot(integrationURL);
+ VirtualFile integration = VFS.getChild(integrationURL);
unit.removeClassPath(integration);
}
catch (Throwable t)
Added: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSHandleCleanupTask.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSHandleCleanupTask.java (rev 0)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/VFSHandleCleanupTask.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, 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.deployers.vfs.plugins.structure;
+
+import java.io.Closeable;
+import java.util.List;
+
+import org.jboss.vfs.VFSUtils;
+
+/**
+ * VFSHandleCleanupTask -
+ *
+ * Task used to close VFS handles.
+ *
+ * @author <a href="baileyje at gmail.com">John Bailey</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSHandleCleanupTask implements Runnable {
+ /** The Handles */
+ private final List<Closeable> handles;
+
+ /**
+ * Constructs a new VFSHandleContext
+ *
+ * @param handles List of VFS handles
+ */
+ public VFSHandleCleanupTask(List<Closeable> handles) {
+ this.handles = handles;
+ }
+
+ public void run() {
+ VFSUtils.safeClose(handles);
+ }
+
+}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/JARStructure.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/JARStructure.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/main/java/org/jboss/deployers/vfs/plugins/structure/jar/JARStructure.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -21,9 +21,13 @@
*/
package org.jboss.deployers.vfs.plugins.structure.jar;
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
import java.util.Set;
-import java.util.Collections;
-import java.util.HashSet;
+import java.util.concurrent.ScheduledExecutorService;
import org.jboss.beans.metadata.api.annotations.Install;
import org.jboss.beans.metadata.api.annotations.Uninstall;
@@ -31,7 +35,11 @@
import org.jboss.deployers.spi.deployer.matchers.JarExtensionProvider;
import org.jboss.deployers.spi.structure.ContextInfo;
import org.jboss.deployers.vfs.plugins.structure.AbstractVFSStructureDeployer;
+import org.jboss.deployers.vfs.plugins.structure.VFSHandleCleanupTask;
import org.jboss.deployers.vfs.spi.structure.StructureContext;
+import org.jboss.vfs.TempFileProvider;
+import org.jboss.vfs.VFS;
+import org.jboss.vfs.VFSUtils;
import org.jboss.vfs.VirtualFile;
/**
@@ -43,14 +51,29 @@
*/
public class JARStructure extends AbstractVFSStructureDeployer
{
- private final Set<String> suffixes = Collections.synchronizedSet(new HashSet<String>());
+ public static final Set<String> DEFAULT_SUFFIXES = new HashSet<String>();
+ static {
+
+ DEFAULT_SUFFIXES.add(".zip");
+ DEFAULT_SUFFIXES.add(".ear");
+ DEFAULT_SUFFIXES.add(".jar");
+ DEFAULT_SUFFIXES.add(".rar");
+ DEFAULT_SUFFIXES.add(".war");
+ DEFAULT_SUFFIXES.add(".sar");
+ DEFAULT_SUFFIXES.add(".har");
+ DEFAULT_SUFFIXES.add(".aop");
+ }
+
+ private final Set<String> suffixes = new HashSet<String>();//Collections.synchronizedSet(new HashSet<String>());
+ private ScheduledExecutorService scheduledExecutorService;
+
/**
* Create a new JARStructure. with the default suffixes
*/
public JARStructure()
{
- this(null);
+ this(DEFAULT_SUFFIXES);
}
/**
@@ -64,8 +87,28 @@
setSuffixes(suffixes);
setRelativeOrder(10000);
}
+
+ /**
+ * Get the scheduled executor service.
+ *
+ * @return the scheduled executor service
+ */
+ public ScheduledExecutorService getScheduledExecutorService()
+ {
+ return scheduledExecutorService;
+ }
/**
+ * Set the scheduled executor service.
+ *
+ * @param scheduledExecutorService the scheduled executor service
+ */
+ public void setScheduledExecutorService(final ScheduledExecutorService scheduledExecutorService)
+ {
+ this.scheduledExecutorService = scheduledExecutorService;
+ }
+
+ /**
* Gets the set of suffixes recognised as jars
*
* @return the set of suffixes
@@ -102,26 +145,21 @@
}
private boolean isArchive(String name) {
- int i = name.length() - 1;
- for (;;) {
- i = name.lastIndexOf('.', i);
- if (i == -1) {
- return false;
- }
- if (suffixes.contains(name.substring(i))) {
- return true;
- }
- }
+ int idx = name.lastIndexOf('.');
+ if(idx == -1)
+ return false;
+ return suffixes.contains(name.substring(idx).toLowerCase());
}
public boolean determineStructure(StructureContext structureContext) throws DeploymentException
{
ContextInfo context = null;
VirtualFile file = structureContext.getFile();
+ final List<Closeable> handles = new ArrayList<Closeable>();
try
{
boolean trace = log.isTraceEnabled();
-
+
if (isLeaf(file) == false)
{
// For non top level directories that don't look like jars
@@ -131,7 +169,7 @@
if (structureContext.isTopLevel() == false)
{
VirtualFile child = file.getChild("META-INF");
- if (child != null)
+ if (child != null && child.exists())
{
if (trace)
log.trace("... ok - non top level directory has a META-INF subdirectory");
@@ -157,6 +195,12 @@
{
if (trace)
log.trace("... ok - its an archive or at least pretending to be.");
+
+ try {
+ handles.add(VFS.mountZipExpanded(file, file, TempFileProvider.create(file.getName(), scheduledExecutorService)));
+ } catch (IOException e) {
+ DeploymentException.rethrowAsDeploymentException("Failed to mount JAR archive", e);
+ }
}
else
{
@@ -188,11 +232,16 @@
// We try all the children as potential subdeployments
addAllChildren(structureContext);
+
+ context.setCleanupTask(new VFSHandleCleanupTask(handles));
}
return valid;
}
catch (Exception e)
{
+ // Undo all mounts
+ VFSUtils.safeClose(handles);
+
// Remove the invalid context
if(context != null)
structureContext.removeChild(context);
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeployersVFSTest.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeployersVFSTest.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BaseDeployersVFSTest.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -21,6 +21,7 @@
*/
package org.jboss.test.deployers;
+import java.net.MalformedURLException;
import java.net.URL;
import org.jboss.deployers.client.spi.DeployerClient;
@@ -36,7 +37,6 @@
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext;
import org.jboss.vfs.VFS;
import org.jboss.vfs.VirtualFile;
-import org.jboss.vfs.plugins.context.jar.JarUtils;
/**
* BaseDeployersVFSTest.
@@ -70,7 +70,7 @@
protected VirtualFile getVirtualFile(String root, String path) throws Exception
{
URL url = getResource(root);
- return VFS.getVirtualFile(url, path);
+ return VFS.getChild(url).getChild(path);
}
/**
@@ -108,7 +108,7 @@
protected String getJarURL(String path) throws Exception
{
URL url = getResource(path);
- url = JarUtils.createJarURL(url);
+ url = createJarURL(url);
return url.toString();
}
@@ -159,4 +159,12 @@
VirtualFile file = getVirtualFile(root, path);
return new AbstractVFSDeploymentContext(file, "");
}
+
+ private URL createJarURL(URL url) throws MalformedURLException
+ {
+ if (url == null)
+ throw new IllegalArgumentException("Null url");
+ return new URL("jar:" + url + "!/");
+ }
+
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTest.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTest.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/BootstrapDeployersTest.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -21,6 +21,7 @@
*/
package org.jboss.test.deployers;
+import java.net.URISyntaxException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
@@ -43,12 +44,9 @@
import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
import org.jboss.test.kernel.junit.MicrocontainerTest;
-import org.jboss.vfs.AssembledDirectory;
import org.jboss.vfs.VFS;
import org.jboss.vfs.VirtualFile;
-import org.jboss.vfs.plugins.context.file.FileSystemContext;
-import org.jboss.vfs.plugins.context.jar.JarUtils;
-import org.jboss.vfs.plugins.vfs.helpers.SuffixesExcludeFilter;
+import org.jboss.vfs.util.SuffixesExcludeFilter;;
/**
* BootstrapDeployersTest.
@@ -96,12 +94,12 @@
return (BootstrapDeployersTestDelegate) super.getDelegate();
}
- protected VirtualFile createDeploymentRoot(String root, String child) throws IOException
+ protected VirtualFile createDeploymentRoot(String root, String child) throws IOException, URISyntaxException
{
URL resourceRoot = getClass().getResource(root);
if (resourceRoot == null)
fail("Resource not found: " + root);
- VirtualFile deployment = VFS.getVirtualFile(resourceRoot, child);
+ VirtualFile deployment = VFS.getChild(resourceRoot).getChild(child);
if (deployment == null)
fail("Child not found " + child + " from " + resourceRoot);
return deployment;
@@ -351,9 +349,5 @@
super.setUp();
// This is a hack for a hack. ;-)
AbstractJDKChecker.getExcluded().add(BootstrapDeployersTest.class);
-
- // Reduce the noise from the VFS
- // FIXME add method change logging levels to AbstractTestCase
- Logger.getLogger(FileSystemContext.class).setLevel(Level.INFO);
}
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestMetaDataUrlIntegrationDeployer.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestMetaDataUrlIntegrationDeployer.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestMetaDataUrlIntegrationDeployer.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -25,7 +25,6 @@
import org.jboss.deployers.vfs.plugins.classloader.MetaDataUrlIntegrationDeployer;
import org.jboss.kernel.spi.deployment.KernelDeployment;
-import org.jboss.vfs.VFS;
/**
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
@@ -36,7 +35,6 @@
{
super(KernelDeployment.class);
setFiles(new String[]{"metadata-touch-beans.xml"});
- VFS.init();
URL dynamicClassRoot = new URL("vfsmemory", "integration-test", "");
setIntegrationURL(dynamicClassRoot);
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestPathUrlIntegrationDeployer.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestPathUrlIntegrationDeployer.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classloader/support/TestPathUrlIntegrationDeployer.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -25,7 +25,6 @@
import org.jboss.deployers.vfs.plugins.classloader.PathUrlIntegrationDeployer;
import org.jboss.kernel.spi.deployment.KernelDeployment;
-import org.jboss.vfs.VFS;
/**
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
@@ -36,7 +35,6 @@
{
super(KernelDeployment.class);
setFiles(new String[]{"data/path-touch-beans.xml"});
- VFS.init();
URL dynamicClassRoot = new URL("vfsmemory", "integration-test", "");
setIntegrationURL(dynamicClassRoot);
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/AbstractStructureTest.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/AbstractStructureTest.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/AbstractStructureTest.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -32,7 +32,7 @@
import org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder;
import org.jboss.deployers.vfs.plugins.structure.file.FileStructure;
import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure;
-import org.jboss.deployers.vfs.plugins.structure.war.WARStructure;
+//import org.jboss.deployers.vfs.plugins.structure.war.WARStructure;
import org.jboss.deployers.vfs.spi.client.VFSDeployment;
import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
import org.jboss.deployers.vfs.spi.structure.StructureDeployer;
@@ -40,7 +40,6 @@
import org.jboss.test.BaseTestCase;
import org.jboss.vfs.VFS;
import org.jboss.vfs.VirtualFile;
-import org.jboss.vfs.VFSUtils;
/**
* AbstractStructureUnitTestCase.
@@ -56,11 +55,11 @@
super(name);
}
- protected void assertUnpacked(VirtualFile file) throws Exception
- {
- VirtualFile modified = VFSUtils.unpack(file);
- assertTrue(VFSUtils.isTemporaryFile(modified));
- }
+// protected void assertUnpacked(VirtualFile file) throws Exception
+// {
+// VirtualFile modified = VFSUtils.unpack(file);
+// assertTrue(VFSUtils.isTemporaryFile(modified));
+// }
protected void assertNoChildContexts(VFSDeploymentContext context)
{
@@ -161,7 +160,7 @@
{
VirtualFile root = context.getRoot();
List<VirtualFile> metaDataLocation = context.getMetaDataLocations();
- VirtualFile expected = root.findChild(metaDataPath);
+ VirtualFile expected = root.getChild(metaDataPath);
assertNotNull(metaDataLocation);
assertEquals(1, metaDataLocation.size());
assertEquals(expected, metaDataLocation.get(0));
@@ -175,7 +174,7 @@
int i = 0;
for(String path : metaDataPath)
{
- VirtualFile expected = root.findChild(path);
+ VirtualFile expected = root.getChild(path);
assertEquals(expected, metaDataLocations.get(i++));
}
}
@@ -216,7 +215,7 @@
for (String path : paths)
{
VirtualFile ref = reference.getRoot();
- VirtualFile expected = ref.findChild(path);
+ VirtualFile expected = ref.getChild(path);
assertTrue("Expected " + expected +" in " + classPath, classPath.contains(expected));
}
}
@@ -250,7 +249,7 @@
protected VFSDeploymentContext determineStructureWithAllStructureDeployers(VFSDeployment deployment) throws Exception
{
- return determineStructureWithStructureDeployers(deployment, new FileStructure(), new WARStructure(), new JARStructure());
+ return determineStructureWithStructureDeployers(deployment, new FileStructure(), /**new WARStructure(),*/ new JARStructure());
}
protected VFSDeploymentContext determineStructureWithStructureDeployers(VFSDeployment deployment, StructureDeployer... deployers) throws Exception
@@ -295,6 +294,7 @@
{
VFSDeploymentContext result = assertDeploy(context, path);
assertNoChildContexts(result);
+ result.cleanup();
return result;
}
@@ -321,7 +321,8 @@
protected VirtualFile getVirtualFile(String root, String path) throws Exception
{
URL url = getResource(root);
- return VFS.getVirtualFile(url, path);
+ VirtualFile rootFile = VFS.getChild(url);
+ return rootFile.getChild(path);
}
@Override
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/ear/support/MockEarStructureDeployer.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -42,7 +42,7 @@
import org.jboss.vfs.VFSUtils;
import org.jboss.vfs.VirtualFile;
import org.jboss.vfs.VirtualFileFilter;
-import org.jboss.vfs.plugins.vfs.helpers.SuffixMatchFilter;
+import org.jboss.vfs.util.SuffixMatchFilter;
/**
* A mock ear structure deployer that illustrates concepts involved with an ear
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/CombinedFileStructureUnitTestCase.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/CombinedFileStructureUnitTestCase.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/CombinedFileStructureUnitTestCase.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -48,7 +48,8 @@
public void testDirectory() throws Throwable
{
// The jar deployer recognises the directory in the combined test
- assertDeployNoChildren("/structure/file", "directory");
+ VFSDeploymentContext vfsDeploymentContext = assertDeployNoChildren("/structure/file", "directory");
+ assertNotNull(vfsDeploymentContext.getVfsHandles());
}
public void testNotKnownInSubdirectory() throws Throwable
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileMatcherTestCase.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileMatcherTestCase.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/file/test/FileMatcherTestCase.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -42,9 +42,8 @@
import org.jboss.test.BaseTestCase;
import org.jboss.test.deployers.vfs.structure.file.support.BshFileMatcher;
import org.jboss.test.deployers.vfs.structure.file.support.TmpFileStructure;
+import org.jboss.vfs.VFS;
import org.jboss.vfs.VirtualFile;
-import org.jboss.vfs.spi.VFSContext;
-import org.jboss.vfs.spi.VirtualFileHandler;
/**
* FileMatcherTestCase.
@@ -65,7 +64,7 @@
protected VirtualFile getVirtualFile() throws Throwable
{
- return new MyVirtualFile();
+ return VFS.getChild("somefile.bsh");
}
public void testMatcher() throws Throwable
@@ -100,162 +99,162 @@
}
}
- private static class MyVirtualFile extends VirtualFile
- {
- /** The serialVersionUID */
- private static final long serialVersionUID = 1L;
-
- public MyVirtualFile()
- {
- super(getVirtualFileHandler());
- }
-
- private static VirtualFileHandler getVirtualFileHandler()
- {
- return new VirtualFileHandler()
- {
- /** The serialVersionUID */
- private static final long serialVersionUID = 1L;
-
- public String getName()
- {
- return null;
- }
-
- public String getPathName()
- {
- return null;
- }
-
- public URL toVfsUrl() throws MalformedURLException, URISyntaxException
- {
- return null;
- }
-
- public URI toURI() throws URISyntaxException
- {
- return null;
- }
-
- public URL toURL() throws MalformedURLException, URISyntaxException
- {
- return null;
- }
-
- public long getLastModified() throws IOException
- {
- return 0;
- }
-
- public boolean hasBeenModified() throws IOException
- {
- return false;
- }
-
- public long getSize() throws IOException
- {
- return 0;
- }
-
- public boolean exists() throws IOException
- {
- return false;
- }
-
- public boolean isLeaf() throws IOException
- {
- return false;
- }
-
- public boolean isArchive() throws IOException
- {
- return false;
- }
-
- public boolean isHidden() throws IOException
- {
- return false;
- }
-
- public String getLocalPathName()
- {
- return null;
- }
-
- public boolean isNested() throws IOException
- {
- return false;
- }
-
- public InputStream openStream() throws IOException
- {
- return null;
- }
-
- public VirtualFileHandler getParent() throws IOException
- {
- return null;
- }
-
- public List<VirtualFileHandler> getChildren(boolean ignoreErrors) throws IOException
- {
- return null;
- }
-
- public VirtualFileHandler getChild(String path) throws IOException
- {
- return null;
- }
-
- public VFSContext getVFSContext()
- {
- return null;
- }
-
- public VirtualFile getVirtualFile()
- {
- return null;
- }
-
- public void close()
- {
-
- }
-
- public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
- {
-
- }
-
- public boolean removeChild(String name) throws IOException
- {
- return false;
- }
-
- public boolean delete(int gracePeriod) throws IOException
- {
- return false;
- }
-
- public URL getRealURL() throws IOException, URISyntaxException
- {
- return null;
- }
-
- public void cleanup()
- {
- }
-
- public Certificate[] getCertificates()
- {
- return null;
- }
- };
- }
-
- public String getName()
- {
- return "somefile.bsh";
- }
- }
+// private static class MyVirtualFile extends VirtualFile
+// {
+// /** The serialVersionUID */
+// private static final long serialVersionUID = 1L;
+//
+// public MyVirtualFile()
+// {
+// super(getVirtualFileHandler());
+// }
+//
+// private static VirtualFileHandler getVirtualFileHandler()
+// {
+// return new VirtualFileHandler()
+// {
+// /** The serialVersionUID */
+// private static final long serialVersionUID = 1L;
+//
+// public String getName()
+// {
+// return null;
+// }
+//
+// public String getPathName()
+// {
+// return null;
+// }
+//
+// public URL toVfsUrl() throws MalformedURLException, URISyntaxException
+// {
+// return null;
+// }
+//
+// public URI toURI() throws URISyntaxException
+// {
+// return null;
+// }
+//
+// public URL toURL() throws MalformedURLException, URISyntaxException
+// {
+// return null;
+// }
+//
+// public long getLastModified() throws IOException
+// {
+// return 0;
+// }
+//
+// public boolean hasBeenModified() throws IOException
+// {
+// return false;
+// }
+//
+// public long getSize() throws IOException
+// {
+// return 0;
+// }
+//
+// public boolean exists() throws IOException
+// {
+// return false;
+// }
+//
+// public boolean isLeaf() throws IOException
+// {
+// return false;
+// }
+//
+// public boolean isArchive() throws IOException
+// {
+// return false;
+// }
+//
+// public boolean isHidden() throws IOException
+// {
+// return false;
+// }
+//
+// public String getLocalPathName()
+// {
+// return null;
+// }
+//
+// public boolean isNested() throws IOException
+// {
+// return false;
+// }
+//
+// public InputStream openStream() throws IOException
+// {
+// return null;
+// }
+//
+// public VirtualFileHandler getParent() throws IOException
+// {
+// return null;
+// }
+//
+// public List<VirtualFileHandler> getChildren(boolean ignoreErrors) throws IOException
+// {
+// return null;
+// }
+//
+// public VirtualFileHandler getChild(String path) throws IOException
+// {
+// return null;
+// }
+//
+// public VFSContext getVFSContext()
+// {
+// return null;
+// }
+//
+// public VirtualFile getVirtualFile()
+// {
+// return null;
+// }
+//
+// public void close()
+// {
+//
+// }
+//
+// public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+// {
+//
+// }
+//
+// public boolean removeChild(String name) throws IOException
+// {
+// return false;
+// }
+//
+// public boolean delete(int gracePeriod) throws IOException
+// {
+// return false;
+// }
+//
+// public URL getRealURL() throws IOException, URISyntaxException
+// {
+// return null;
+// }
+//
+// public void cleanup()
+// {
+// }
+//
+// public Certificate[] getCertificates()
+// {
+// return null;
+// }
+// };
+// }
+//
+// public String getName()
+// {
+// return "somefile.bsh";
+// }
+// }
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/ConfiguredSuffixJARStructureUnitTestCase.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/ConfiguredSuffixJARStructureUnitTestCase.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/ConfiguredSuffixJARStructureUnitTestCase.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -28,7 +28,6 @@
import junit.framework.TestSuite;
import org.jboss.deployers.vfs.plugins.structure.jar.JARStructure;
import org.jboss.test.BaseTestCase;
-import org.jboss.vfs.plugins.context.jar.JarUtils;
/**
* ConfiguredSuffixJARStructureUnitTestCase.
@@ -40,8 +39,8 @@
public class ConfiguredSuffixJARStructureUnitTestCase extends BaseTestCase
{
/** The file structure deployer */
- private static final Set<String> defaultSuffixes = JarUtils.getSuffixes();
-
+ private static final Set<String> defaultSuffixes = JARStructure.DEFAULT_SUFFIXES;
+
public static Test suite()
{
return new TestSuite(ConfiguredSuffixJARStructureUnitTestCase.class);
@@ -73,24 +72,17 @@
public void testOverwriteDefaults() throws Exception
{
- try
- {
- Set<String> newSuffixes = new HashSet<String>();
- newSuffixes.add(".bar");
- newSuffixes.add(".tar");
- newSuffixes.add(".far");
-
- JARStructure structure = new JARStructure(newSuffixes);
- Set<String> suffixes = structure.getSuffixes();
- assertNotNull(suffixes);
- assertEquals(3, suffixes.size());
- assertTrue(suffixes.contains(".bar"));
- assertTrue(suffixes.contains(".tar"));
- assertTrue(suffixes.contains(".far"));
- }
- finally
- {
- JarUtils.setJarSuffixes(defaultSuffixes);
- }
+ Set<String> newSuffixes = new HashSet<String>();
+ newSuffixes.add(".bar");
+ newSuffixes.add(".tar");
+ newSuffixes.add(".far");
+
+ JARStructure structure = new JARStructure(newSuffixes);
+ Set<String> suffixes = structure.getSuffixes();
+ assertNotNull(suffixes);
+ assertEquals(3, suffixes.size());
+ assertTrue(suffixes.contains(".bar"));
+ assertTrue(suffixes.contains(".tar"));
+ assertTrue(suffixes.contains(".far"));
}
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/JARStructureUnitTestCase.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/JARStructureUnitTestCase.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/jar/test/JARStructureUnitTestCase.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -48,6 +48,6 @@
protected VFSDeploymentContext determineStructure(VFSDeployment deployment) throws Exception
{
- return determineStructureWithStructureDeployer(deployment, new JARStructure());
+ return determineStructureWithStructureDeployers(deployment, false, new JARStructure());
}
}
Modified: projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/AbstractWARStructureTest.java
===================================================================
--- projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/AbstractWARStructureTest.java 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/structure/war/test/AbstractWARStructureTest.java 2009-10-21 02:20:48 UTC (rev 95237)
@@ -74,11 +74,11 @@
assertNotNull("classpath", classpath);
assertEquals("classpath.size = 3", 3, classpath.size());
VirtualFile warFile = war.getRoot();
- VirtualFile classes = warFile.findChild("WEB-INF/classes");
+ VirtualFile classes = warFile.getChild("WEB-INF/classes");
assertTrue("WEB-INF/classes in classpath", classpath.contains(classes));
- VirtualFile j0 = warFile.findChild("WEB-INF/lib/j0.jar");
+ VirtualFile j0 = warFile.getChild("WEB-INF/lib/j0.jar");
assertTrue("WEB-INF/lib/j0.jar in classpath", classpath.contains(j0));
- VirtualFile j1 = warFile.findChild("WEB-INF/lib/j1.jar");
+ VirtualFile j1 = warFile.getChild("WEB-INF/lib/j1.jar");
assertTrue("WEB-INF/lib/j1.jar in classpath", classpath.contains(j1));
}
}
Modified: projects/jboss-deployers/branches/vfs3/pom.xml
===================================================================
--- projects/jboss-deployers/branches/vfs3/pom.xml 2009-10-21 02:14:24 UTC (rev 95236)
+++ projects/jboss-deployers/branches/vfs3/pom.xml 2009-10-21 02:20:48 UTC (rev 95237)
@@ -28,8 +28,8 @@
<version.jboss.classloader>2.2.0-SNAPSHOT</version.jboss.classloader>
<version.jboss.classloading.spi>5.1.0.SP1</version.jboss.classloading.spi>
<version.jboss.common.core>2.2.14.GA</version.jboss.common.core>
- <version.jboss.logging.spi>2.0.5.GA</version.jboss.logging.spi>
- <version.jboss.logging.log4j>2.0.5.GA</version.jboss.logging.log4j>
+ <version.jboss.logging.spi>2.2.0.CR1</version.jboss.logging.spi>
+ <version.jboss.logging.log4j>2.2.0.CR1</version.jboss.logging.log4j>
<version.jbossxb>2.0.2-SNAPSHOT</version.jbossxb>
<version.jboss.aop>2.1.0.CR3</version.jboss.aop>
<version.org.jboss.test>1.1.1.GA</version.org.jboss.test>
More information about the jboss-cvs-commits
mailing list