[jboss-cvs] JBossAS SVN: r84628 - in branches/Branch_5_x: deployment/src/main/org/jboss/deployment/services and 19 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Feb 23 09:03:07 EST 2009


Author: alesj
Date: 2009-02-23 09:03:07 -0500 (Mon, 23 Feb 2009)
New Revision: 84628

Modified:
   branches/Branch_5_x/component-matrix/pom.xml
   branches/Branch_5_x/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java
   branches/Branch_5_x/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DeploymentUnit.java
   branches/Branch_5_x/hibernate-int/src/main/org/jboss/hibernate/jmx/Hibernate.java
   branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml
   branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile-repository.xml
   branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile.xml
   branches/Branch_5_x/server/src/etc/conf/default/bootstrap/vfs.xml
   branches/Branch_5_x/server/src/main/org/jboss/deployment/JBossEjbParsingDeployer.java
   branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployer.java
   branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployment.java
   branches/Branch_5_x/server/src/main/org/jboss/web/deployers/WARStructure.java
   branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourceLoader.java
   branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourcePatternResolver.java
   branches/Branch_5_x/system-jmx/src/main/org/jboss/deployment/MainDeployer.java
   branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java
   branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java
   branches/Branch_5_x/system-jmx/src/main/org/jboss/system/server/jmx/JMXKernel.java
   branches/Branch_5_x/system/src/main/org/jboss/system/deployers/LegacyDeploymentContextComparator.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profile/basic/MetaDataAwareProfile.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/VFSScanner.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/basic/MetaDataAwareProfileService.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepository.java
   branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepositoryFactory.java
   branches/Branch_5_x/testsuite/imports/sections/util.xml
   branches/Branch_5_x/testsuite/src/main/org/jboss/test/util/test/SchedulerUnitTestCase.java
   branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
   branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/WarClassLoaderDeployer.java
   branches/Branch_5_x/tomcat/src/resources/war-deployers-jboss-beans.xml
   branches/Branch_5_x/varia/src/resources/seam/seam-deployers-jboss-beans.xml
Log:
Merge 5_0 changes with 5_x.

Modified: branches/Branch_5_x/component-matrix/pom.xml
===================================================================
--- branches/Branch_5_x/component-matrix/pom.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/component-matrix/pom.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -58,16 +58,16 @@
     <version.org.jboss.ejb3.proxy.client>1.0.0</version.org.jboss.ejb3.proxy.client>
     <version.org.jboss.ejb3.proxy.clustered.client>1.0.0</version.org.jboss.ejb3.proxy.clustered.client>
     <version.org.jboss.ejb3.security.client>1.0.0</version.org.jboss.ejb3.security.client>
-    <version.org.jboss.jpa>1.0.0-Beta6</version.org.jboss.jpa>
-    <version.org.jboss.reflect>2.0.2.GA</version.org.jboss.reflect>
-    <version.org.jboss.vfs>2.0.0.GA</version.org.jboss.vfs>
     <version.org.jboss.logbridge>1.0.0.CR1</version.org.jboss.logbridge>
     <version.org.jboss.logmanager>1.0.0.CR1</version.org.jboss.logmanager>
+    <version.org.jboss.jpa>1.0.0-CR1</version.org.jboss.jpa>
+    <version.org.jboss.reflect>2.0.2.GA</version.org.jboss.reflect>
+    <version.org.jboss.vfs>2.1.0.GA</version.org.jboss.vfs>
     <version.org.jboss.mdr>2.0.1.GA</version.org.jboss.mdr>
     <version.org.jboss.man>2.1.0.CR1</version.org.jboss.man>
-    <version.org.jboss.microcontainer>2.0.2.GA</version.org.jboss.microcontainer>
-    <version.org.jboss.cl>2.0.1.GA</version.org.jboss.cl>
-    <version.org.jboss.deployers>2.0.3.GA</version.org.jboss.deployers>
+    <version.org.jboss.microcontainer>2.0.4.GA</version.org.jboss.microcontainer>
+    <version.org.jboss.cl>2.0.3.GA</version.org.jboss.cl>
+    <version.org.jboss.deployers>2.0.5.GA</version.org.jboss.deployers>
     <version.org.jboss.cache.core>3.0.3.CR1</version.org.jboss.cache.core>
     <version.org.jboss.cache.pojo>3.0.0.GA</version.org.jboss.cache.pojo>
     <version.org.jboss.cluster.client>1.1.1.GA</version.org.jboss.cluster.client>
@@ -91,7 +91,7 @@
     <version.streambuffer>2.1.1</version.streambuffer>
     <version.sun.jaxb>2.1.9</version.sun.jaxb>
     <version.xdoclet>1.2.3</version.xdoclet>
-    <version.seam.integration>5.0.0.GA</version.seam.integration>
+    <version.seam.integration>5.0.2.GA</version.seam.integration>
     <version.webbeans.integration>5.2.0.ALPHA3</version.webbeans.integration>
   </properties>
 

Modified: branches/Branch_5_x/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java
===================================================================
--- branches/Branch_5_x/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/deployment/src/main/org/jboss/deployment/services/DeploymentManagerService.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -296,8 +296,7 @@
    }
 
    /* Invoke the method on the contexts */
-   public void hack(SerializableTargetModuleID moduleID,
-         DeploymentContext info, String method)
+   public void hack(SerializableTargetModuleID moduleID, DeploymentContext info, String method)
    {
       try {
          MBeanServer server = MBeanServerLocator.locateJBoss();
@@ -376,13 +375,15 @@
     */
    private String getComponentName(DeploymentContext context)
    {
+      if (context == null)
+         return null;
+      
       DeploymentUnit u = context.getDeploymentUnit();
       ServiceMetaData data = u.getAttachment(ServiceMetaData.class);
       if (data == null)
          return null;
       ObjectName objectName = data.getObjectName();
-      String objNames = objectName.toString();
-      return objNames;
+      return objectName.toString();
    }
 
    public void deploy_phase2(String url) throws Exception
@@ -406,10 +407,11 @@
       VirtualFile root = VFS.getRoot(deployFile.toURI());
       Deployment deployment = deploymentFactory.createVFSDeployment(root);
       mainDeployer.addDeployment(deployment);
-      DeploymentContext context = mainDeployer.getDeploymentContext(deployment.getName());
+      DeploymentContext context = null;
       try
       {
          mainDeployer.process();
+         context = mainDeployer.getDeploymentContext(deployment.getName());
          mainDeployer.checkComplete(deployment);
       }
       catch (Exception e)

Modified: branches/Branch_5_x/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DeploymentUnit.java
===================================================================
--- branches/Branch_5_x/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DeploymentUnit.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/ejb3/src/main/org/jboss/ejb3/deployers/JBoss5DeploymentUnit.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -205,16 +205,16 @@
 
    public List<VirtualFile> getResources(VirtualFileFilter filter)
    {
+      List<VirtualFile> classPath = unit.getClassPath();
+      if(classPath == null || classPath.isEmpty())
+         return Collections.emptyList();
+
       VisitorAttributes va = new VisitorAttributes();
       va.setLeavesOnly(true);
       SuffixesExcludeFilter noJars = new SuffixesExcludeFilter(JarUtils.getSuffixes());
       va.setRecurseFilter(noJars);
       FilterVirtualFileVisitor visitor = new FilterVirtualFileVisitor(filter, va);
 
-      List<VirtualFile> classPath = unit.getClassPath();
-      if(classPath == null)
-         return Collections.emptyList();
-
       for(VirtualFile root : classPath)
       {
          try
@@ -228,8 +228,6 @@
          }
       }
       
-      List<VirtualFile> resources = visitor.getMatched();
-      
-      return resources;
+      return visitor.getMatched();
    }
 }

Modified: branches/Branch_5_x/hibernate-int/src/main/org/jboss/hibernate/jmx/Hibernate.java
===================================================================
--- branches/Branch_5_x/hibernate-int/src/main/org/jboss/hibernate/jmx/Hibernate.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/hibernate-int/src/main/org/jboss/hibernate/jmx/Hibernate.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -280,7 +280,7 @@
          if (harUrl == null)
             throw new IllegalArgumentException("Must set one of the resources, root or harUrl: " + this);
 
-         root = VFS.getCachedFile(harUrl);
+         root = VFS.getRoot(harUrl);
       }
 
       HibernateMappingVisitor visitor = new HibernateMappingVisitor();

Modified: branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -17,6 +17,9 @@
       <root>${jboss.lib.url}jboss-deployers-impl.jar</root>
       <root>${jboss.lib.url}jboss-deployers-vfs-spi.jar</root>
       <root>${jboss.lib.url}jboss-deployers-vfs.jar</root>
+     <!-- Bean annotation handling -->
+      <root>${jboss.lib.url}jboss-dependency.jar</root>
+      <root>${jboss.lib.url}jboss-kernel.jar</root>
 
       <!-- JAXB impl here, api is in endorsed -->
       <root>${jboss.lib.url}jaxb-impl.jar</root>
@@ -57,11 +60,19 @@
    -->
    <bean name="ManagedDeploymentCreator" class="org.jboss.deployers.plugins.managed.TypedManagedDeploymentCreator" />
 
+   <!-- ModificationType structure processor -->
+   <bean name="ModificationTypeStructureProcessor" class="org.jboss.deployers.vfs.plugins.structure.modify.ModificationTypeStructureProcessor">
+     <incallback method="addMatcher"/>
+     <uncallback method="removeMatcher"/>
+   </bean>
+
    <!-- The holder for deployers that determine structure -->
    <bean name="StructuralDeployers" class="org.jboss.deployers.vfs.plugins.structure.VFSStructuralDeployersImpl">
       <property name="structureBuilder">
          <!-- The consolidator of the structure information -->
-         <bean name="StructureBuilder" class="org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder"/>
+         <bean name="StructureBuilder" class="org.jboss.deployers.vfs.plugins.structure.VFSStructureBuilder">
+           <property name="structureProcessor"><inject bean="ModificationTypeStructureProcessor"/></property>
+         </bean>
       </property>
       <!-- Accept any implementor of structure deployer -->
       <incallback method="addDeployer"/>
@@ -169,6 +180,19 @@
    </bean>
 
    <!-- POJO Deployment -->
+  
+   <bean name="CoreBeanAnnotationAdapterFactory">
+      <constructor factoryClass="org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory" factoryMethod="getInstance"/>
+   </bean>
+
+   <bean name="CoreBeanAnnotationAdapter">
+      <constructor factoryMethod="getBeanAnnotationAdapter">
+        <factory bean="CoreBeanAnnotationAdapterFactory"/>
+      </constructor>
+      <incallback method="addAnnotationPlugin"/>
+      <uncallback method="removeAnnotationPlugin"/>
+   </bean>
+
    <bean name="BeanMetaDataICF" class="org.jboss.deployers.plugins.managed.BeanMetaDataICF">
       <property name="controller"><inject bean="jboss.kernel:service=KernelController"/></property>
       <property name="delegateICF"><inject bean="ManagedObjectFactory" property="defaultInstanceFactory"/></property>

Modified: branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile-repository.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile-repository.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile-repository.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -11,7 +11,19 @@
       <root>${jboss.lib.url}jboss-profileservice-spi.jar</root>
    </classloader>
     
-    <!-- 
+    <bean name="StructureModCache" class="org.jboss.deployers.vfs.spi.structure.modified.DefaultStructureCache">
+      <destroy method="flush"/>
+    </bean>
+
+    <bean name="StructureModificationChecker" class="org.jboss.deployers.vfs.spi.structure.modified.MetaDataStructureModificationChecker">
+      <constructor>
+        <parameter><inject bean="MainDeployer" /></parameter>
+      </constructor>
+      <property name="cache"><inject bean="StructureModCache" /></property>
+      <property name="filter"><bean class="org.jboss.system.server.profile.basic.XmlIncludeVirtualFileFilter" /></property>
+    </bean>
+
+    <!--
     	The file repository profile service which provides full
         support ProfileService spi.
     -->
@@ -35,10 +47,8 @@
       </property>
       <property name="serializer"><inject bean="AttachmentsSerializer"/></property>
       <property name="deploymentFilter"><inject bean="DeploymentFilter" /></property>
-      <property name="hotDeploymentFilter">
-        <bean class="org.jboss.system.server.profile.basic.XmlIncludeVirtualFileFilter"/>
-      </property>
       <property name="mainDeployer"><inject bean="MainDeployer"/></property>
+      <property name="checker"><inject bean="StructureModificationChecker"/></property>
       <depends>ProfileServicePersistenceDeployer</depends>
    </bean>
    <bean name="AttachmentsSerializer" class="org.jboss.system.server.profileservice.repository.JAXBAttachmentSerializer" />

Modified: branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/etc/conf/default/bootstrap/profile.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -11,6 +11,18 @@
       <root>${jboss.lib.url}jboss-profileservice-spi.jar</root>
    </classloader>
 
+    <bean name="StructureModCache" class="org.jboss.deployers.vfs.spi.structure.modified.DefaultStructureCache">
+      <destroy method="flush"/>
+    </bean>
+
+    <bean name="StructureModificationChecker" class="org.jboss.deployers.vfs.spi.structure.modified.MetaDataStructureModificationChecker">
+      <constructor>
+        <parameter><inject bean="MainDeployer" /></parameter>
+      </constructor>
+      <property name="cache"><inject bean="StructureModCache" /></property>
+      <property name="filter"><bean class="org.jboss.system.server.profile.basic.XmlIncludeVirtualFileFilter" /></property>
+    </bean>
+
    <!-- The basic profile service which relies on vfs scanners
    to determine the profile deployments. This version does not
    support the full ProfileService spi.
@@ -22,9 +34,7 @@
       <property name="profileRoot">${jboss.server.home.dir}</property>
       <property name="mainDeployer"><inject bean="MainDeployer"/></property>
       <property name="deploymentFilter"><inject bean="DeploymentFilter" /></property>
-      <property name="filter">
-        <bean class="org.jboss.system.server.profile.basic.XmlIncludeVirtualFileFilter"/>
-      </property>
+      <property name="checker"><inject bean="StructureModificationChecker"/></property>
    </bean>
 
    <bean name="ProfileServiceBootstrap" class="org.jboss.system.server.profileservice.ProfileServiceBootstrap">

Modified: branches/Branch_5_x/server/src/etc/conf/default/bootstrap/vfs.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/conf/default/bootstrap/vfs.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/etc/conf/default/bootstrap/vfs.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -1,25 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   The JBossAS initializer configuration.
+   The JBossVFS initializer configuration.
 -->
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
 
   <bean name="VFSCache">
     <constructor factoryClass="org.jboss.virtual.spi.cache.VFSCacheFactory" factoryMethod="getInstance">
-      <!-- Use the IterableTimedVFSCache implementation -->
-      <parameter>org.jboss.virtual.plugins.cache.IterableTimedVFSCache</parameter>
+      <!-- Use the CombinedVFSCache implementation -->
+      <parameter>org.jboss.virtual.plugins.cache.CombinedVFSCache</parameter>
     </constructor>
     <start ignored="true"/>
-  </bean>
-
-  <bean name="VfsNamesExceptionHandler" class="org.jboss.virtual.plugins.context.helpers.NamesExceptionHandler">
-    <constructor>
-      <parameter class="java.lang.String">sqljdbc.jar</parameter>
-    </constructor>
-  </bean>
-  
-  <bean name="JBossVFSInitializer" class="org.jboss.virtual.plugins.cache.PreInitializeVFSContexts">
-    <property name="initializedVFSContexts" class="java.util.Map">
+    <property name="permanentRoots">
       <map keyClass="java.net.URL" valueClass="org.jboss.virtual.spi.ExceptionHandler">
         <entry>
           <key>${jboss.lib.url}</key>
@@ -33,9 +24,21 @@
           <key>${jboss.server.lib.url}</key>
           <value><inject bean="VfsNamesExceptionHandler"/></value>
         </entry>
+        <entry>
+          <key>${jboss.server.home.url}deploy</key>
+          <value><inject bean="VfsNamesExceptionHandler"/></value>
+        </entry>
       </map>
     </property>
-    <property name="holdReference">true</property>
+    <property name="realCache">
+      <bean class="org.jboss.virtual.plugins.cache.IterableTimedVFSCache"/>
+    </property>
   </bean>
 
+  <bean name="VfsNamesExceptionHandler" class="org.jboss.virtual.plugins.context.helpers.NamesExceptionHandler">
+    <constructor>
+      <parameter class="java.lang.String">sqljdbc.jar</parameter>
+    </constructor>
+  </bean>
+
 </deployment>

Modified: branches/Branch_5_x/server/src/main/org/jboss/deployment/JBossEjbParsingDeployer.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/deployment/JBossEjbParsingDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/main/org/jboss/deployment/JBossEjbParsingDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -39,7 +39,7 @@
  * 
  * @author Scott.Stark at jboss.org
  * @author adrian at jboss.org
- * @version $Revision:$
+ * @version $Revision$
  */
 @SuppressWarnings("deprecation")
 public class JBossEjbParsingDeployer extends SchemaResolverDeployer<JBossMetaData>
@@ -132,7 +132,7 @@
                standardJBossXmlPath = new URL(configUrl, "standardjboss.xml");
             }
 
-            VirtualFile stdJBoss = VFS.getCachedFile(standardJBossXmlPath);
+            VirtualFile stdJBoss = VFS.getRoot(standardJBossXmlPath);
             if (stdJBoss == null && ignoreMissingStandardJBossXml == false)
             {
                throw new DeploymentException("standardjboss.xml not found in config dir: " + standardJBossXmlPath);

Modified: branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployer.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -22,7 +22,6 @@
 package org.jboss.web.deployers;
 
 import java.io.File;
-import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.ArrayList;
@@ -30,12 +29,10 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.jboss.beans.metadata.api.annotations.Inject;
-import org.jboss.bootstrap.spi.ServerConfig;
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
 import org.jboss.deployers.spi.deployer.helpers.AttachmentLocator;
@@ -56,15 +53,15 @@
 import org.jboss.system.metadata.ServiceDependencyMetaData;
 import org.jboss.system.metadata.ServiceInjectionValueMetaData;
 import org.jboss.system.metadata.ServiceMetaData;
-import org.jboss.system.server.ServerConfigLocator;
 import org.jboss.util.file.Files;
-import org.jboss.util.file.JarUtils;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VFSUtils;
 import org.jboss.virtual.VirtualFile;
 import org.jboss.web.WebApplication;
 
 /** A template pattern class for web container integration into JBoss. This class
  * should be subclassed by web container providers wishing to integrate their
- * container into a JBoss server. The sole method to implement is: 
+ * container into a JBoss server. The sole method to implement is:
  * {@link #getDeployment(DeploymentUnit, WebMetaData)}. This is called from
  * within {@linkplain #deploy(DeploymentUnit, WebMetaData)} to translate the
  * WebMetaData into a AbstractWarDeployment bean that will be passed to the
@@ -148,7 +145,7 @@
    /** Set the flag indicating if war archives should be unpacked. This may
     * need to be set to false as long extraction paths under deploy can
     * show up as deployment failures on some platforms.
-    * 
+    *
     * @jmx:managed-attribute
     * @return true is war archives should be unpacked
     */
@@ -160,7 +157,7 @@
    /** Get the flag indicating if war archives should be unpacked. This may
     * need to be set to false as long extraction paths under deploy can
     * show up as deployment failures on some platforms.
-    * 
+    *
     * @jmx:managed-attribute
     * @param flag , true is war archives should be unpacked
     */
@@ -194,8 +191,8 @@
    /**
     * Get the flag indicating if ejb-link errors should be ignored
     * in favour of trying the jndi-name in jboss-web.xml
-    * @return the LenientEjbLink flag 
-    *    
+    * @return the LenientEjbLink flag
+    *
     * @jmx:managed-attribute
     */
    public boolean getLenientEjbLink()
@@ -206,7 +203,7 @@
    /**
     * Set the flag indicating if ejb-link errors should be ignored
     * in favour of trying the jndi-name in jboss-web.xml
-    *    
+    *
     * @jmx:managed-attribute
     */
    public void setLenientEjbLink(boolean flag)
@@ -275,7 +272,7 @@
     * override this method to provide a AbstractWarDeployment bean whose
     * start/stop will control the deployment/undeployment of the web
     * application.
-    * 
+    *
     * @param unit - the deployment unit
     * @param metaData - the input web application metadata
     * @return the AbstractWarDeployment for the input WebMetaData
@@ -288,13 +285,13 @@
     * {@link #getDeployment(DeploymentUnit, WebMetaData)} to obtain an
     * AbstractWarDeployment bean that is wrapped in a ServiceMetaData by
     * deployWebModule.
-    * 
+    *
     * This will set the WebMetaData.contextRoot if it has not been set based
     * on the war deployment name.
-    * 
+    *
     * @see #deployWebModule(DeploymentUnit, WebMetaData, AbstractWarDeployment)
     * @see #buildWebContext(DeploymentUnit, String, String, WebMetaData)
-    * 
+    *
     * @param unit - the war for the deployment
     * @param metaData - the metadata for the deployment
     */
@@ -341,60 +338,33 @@
          String warName = unit.getName();
 
          /**
-          * Ignore the jacc policy service bean 
+          * Ignore the jacc policy service bean
           */
          if (warName.startsWith("jboss:") && warName.contains("id="))
             return;
 
          if (unit instanceof VFSDeploymentUnit)
          {
+
+            URL expWarUrl;
+
             VFSDeploymentUnit vfsUnit = (VFSDeploymentUnit)unit;
-            URL expWarUrl = vfsUnit.getRoot().toURL();
-            if (warName.endsWith("/") == false || warName.endsWith("!/") == true) // Hack for jar urls being exposed
+            VirtualFile root = vfsUnit.getRoot();
+            VirtualFile unjared = VFSUtils.unjar(root);
+            // file was not unjared yet
+            if (root != unjared)
             {
-               if (warName.startsWith("jar:"))
-               {
-                  if (warName.endsWith("!/"))
-                     warName = warName.substring(4, warName.length() - 2);
-                  else
-                     warName = warName.substring(4, warName.length());
-               }
-               URL warURL = new URL(warName);
-               ServerConfig config = ServerConfigLocator.locate();
-               String prefix = warURL.getFile();
-               int lastSlash = prefix.lastIndexOf('/');
-               if (lastSlash > 0)
-                  prefix = prefix.substring(lastSlash + 1);
-               int dotWar = prefix.lastIndexOf(".war");
-               if (dotWar > 0)
-                  prefix = prefix.substring(0, dotWar);
+               // get the real unjared url
+               expWarUrl = VFSUtils.getRealURL(unjared);
 
-               File expWarFile = File.createTempFile(prefix, "-exp.war", config.getServerTempDeployDir());
-               expWarFile.delete();
-               if (expWarFile.mkdir() == false)
-                  throw new DeploymentException("Was unable to mkdir: " + expWarFile);
-               log.debug("Unpacking war to: " + expWarFile);
-               VirtualFile root = vfsUnit.getRoot();
-               InputStream is = root.openStream();
-               try
-               {
-                  JarUtils.unjar(is, expWarFile);
-               }
-               finally
-               {
-                  is.close();
-               }
-               expWarUrl = expWarFile.toURL();
-
                // Map
-               VirtualFile warVF = vfsUnit.getRoot();
-               String warPathName = warVF.getPathName();
+               String warPathName = root.getPathName();
                if (warPathName.endsWith("/") == false)
                   warPathName += "/";
                List<VirtualFile> classpathVFs = vfsUnit.getClassPath();
                if (classpathVFs != null)
                {
-                  ArrayList<URL> classpath = new ArrayList<URL>();
+                  List<URL> classpath = new ArrayList<URL>();
                   for (VirtualFile vf : classpathVFs)
                   {
                      try
@@ -422,6 +392,10 @@
                // Indicate that an expanded URL exists
                unit.addAttachment("org.jboss.web.expandedWarURL", expWarUrl, URL.class);
             }
+            else
+            {
+	            expWarUrl = VFSUtils.getRealURL(root);
+			}
 
             // Resolve any ear relative alt-dd path to an expWarUrl/WEB-INF/alt-dd.xml file
             String altDDPath = metaData.getAlternativeDD();
@@ -489,8 +463,9 @@
          URL warURL = unit.getAttachment("org.jboss.web.expandedWarURL", URL.class);
          if (warURL != null)
          {
-            File war = new File(warURL.toURI());
-            Files.delete(war);
+            // use vfs to cleanup/delete - since we created it with vfs
+            VirtualFile file = VFS.getRoot(warURL);
+            file.cleanup(); // it's temp, it will be deleted as well
          }
       }
       catch (Exception e)
@@ -516,14 +491,12 @@
     */
    public WebApplication getDeployedApp(String warUrl)
    {
-      WebApplication appInfo = (WebApplication)deploymentMap.get(warUrl);
-      return appInfo;
+      return (WebApplication)deploymentMap.get(warUrl);
    }
 
    public WebApplication removeDeployedApp(String warURL)
    {
-      WebApplication appInfo = (WebApplication)deploymentMap.remove(warURL);
-      return appInfo;
+      return (WebApplication)deploymentMap.remove(warURL);
    }
 
    /** Returns the applications deployed by the web container subclasses.
@@ -575,7 +548,7 @@
     A war name of ROOT.war is handled as a special case of a war that
     should be installed as the default web context.
     @param ctxPath - war level context-root
-    @param warName - 
+    @param warName -
     */
    protected String buildWebContext(String ctxPath, String warName, JBossWebMetaData metaData, DeploymentUnit unit)
    {
@@ -658,8 +631,7 @@
       // The ctx path value cannot be empty in the object name
       if (ctxPath == null || ctxPath.length() == 0)
          ctxPath = "/";
-      String objectName = "jboss.web.deployment:war=" + virtualHost + ctxPath;
-      return objectName;
+      return "jboss.web.deployment:war=" + virtualHost + ctxPath;
    }
 
    /**
@@ -667,7 +639,7 @@
     * AbstractWarDeployment bean and then attach it to the deployment unit. The
     * presence of the ServiceMetaData attachment makes the deployment unit
     * "relevant" to the deployers that handle mbean services.
-    * 
+    *
     * @param unit - the deployment unit
     * @param metaData - the web app metadata passed to deploy
     * @param deployment - the web app deployment bean created by getDeployment

Modified: branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployment.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployment.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/main/org/jboss/web/deployers/AbstractWarDeployment.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -70,6 +70,7 @@
 import org.jboss.security.authorization.PolicyRegistration;
 import org.jboss.web.WebApplication;
 import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
+import org.jboss.virtual.VFSUtils;
 import org.omg.CORBA.ORB;
 
 /**
@@ -83,7 +84,7 @@
 - performUndeploy(WebApplication webApp, String warUrl) to remove the application
 corresponding to the WebApplication data. This is called when the
 AbstractWarDeployment is stopped.
- 
+
 The one thing to be aware of is the relationship between the thread context
 class loader and the JNDI ENC context. Any method that attempts to access
 the JNDI ENC context must have the ClassLoader in the WebApplication returned
@@ -346,7 +347,7 @@
 
    /**
     * Get the securityManagement.
-    * 
+    *
     * @return the securityManagement.
     */
    public String getSecurityManagementName()
@@ -356,7 +357,7 @@
 
    /**
     * Set the securityManagement.
-    * 
+    *
     * @param securityManagement the securityManagement.
     */
    public void setSecurityManagementName(String securityManagement)
@@ -366,7 +367,7 @@
 
    /**
     * Get the securityManagement.
-    * 
+    *
     * @return the securityManagement.
     */
    public ISecurityManagement getSecurityManagement()
@@ -376,7 +377,7 @@
 
    /**
     * Set the securityManagement.
-    * 
+    *
     * @param securityManagement the securityManagement.
     */
    public void setSecurityManagement(ISecurityManagement securityManagement)
@@ -431,13 +432,16 @@
          // Get the war URL
          URL warUrl = unit.getAttachment("org.jboss.web.expandedWarURL", URL.class);
          if (warUrl == null && unit instanceof VFSDeploymentUnit)
-            warUrl = ((VFSDeploymentUnit)unit).getRoot().toURL();
+         {
+            VFSDeploymentUnit vdu = VFSDeploymentUnit.class.cast(unit);
+            warUrl = VFSUtils.getRealURL(vdu.getRoot());
+         }
 
          // Dynamic WebMetaData deployments might not provide an URL
          // We use the DEploymentUnit name as identifier instead.
-         // The JAXWS Endpoint API for example does this.  
+         // The JAXWS Endpoint API for example does this.
          String warURLString = (warUrl != null ? warUrl.toExternalForm() : unit.getName());
-         
+
          // Strip any jar: url syntax. This should be be handled by the vfs
          if (warURLString.startsWith("jar:"))
             warURLString = warURLString.substring(4, warURLString.length() - 2);

Modified: branches/Branch_5_x/server/src/main/org/jboss/web/deployers/WARStructure.java
===================================================================
--- branches/Branch_5_x/server/src/main/org/jboss/web/deployers/WARStructure.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/server/src/main/org/jboss/web/deployers/WARStructure.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -38,6 +38,7 @@
  * WARStructure.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision: 1.1 $
  */
 public class WARStructure extends AbstractVFSStructureDeployer
@@ -51,6 +52,9 @@
    /** The web-inf/lib/[some-archive]/META-INF filter */
    private VirtualFileFilter webInfLibMetaDataFilter;
 
+   /** Whether to include web-inf in the classpath */
+   private boolean includeWebInfInClasspath;
+
    /**
     * Sets the default relative order 1000.
     *
@@ -103,6 +107,16 @@
       this.webInfLibMetaDataFilter = webInfLibMetaDataFilter;
    }
 
+   /**
+    * Should we include web-inf in classpath.
+    *
+    * @param includeWebInfInClasspath the include web-inf flag
+    */
+   public void setIncludeWebInfInClasspath(boolean includeWebInfInClasspath)
+   {
+      this.includeWebInfInClasspath = includeWebInfInClasspath;
+   }
+
    public boolean determineStructure(StructureContext structureContext) throws DeploymentException
    {
       ContextInfo context = null;
@@ -111,6 +125,9 @@
       {
          boolean trace = log.isTraceEnabled();
 
+         // the WEB-INF
+         VirtualFile webinf = null;
+
          if (isLeaf(file) == false)
          {
             // We require either a WEB-INF or the name ends in .war
@@ -118,8 +135,8 @@
             {
                try
                {
-                  VirtualFile child = file.getChild("WEB-INF");
-                  if (child != null)
+                  webinf = file.getChild("WEB-INF");
+                  if (webinf != null)
                   {
                      if (trace)
                         log.trace("... ok - directory has a WEB-INF subdirectory");
@@ -206,6 +223,12 @@
                log.trace("No WEB-INF/lib for: " + file.getPathName());
             }
 
+            // do we include WEB-INF in classpath
+            if (includeWebInfInClasspath && webinf != null)
+            {
+               addClassPath(structureContext, webinf, true, false, context);
+            }
+
             // There are no subdeployments for wars
             return true;
          }

Modified: branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourceLoader.java
===================================================================
--- branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourceLoader.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourceLoader.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -59,7 +59,7 @@
          {
             // Try to parse the location as a URL...
             URL url = new URL(location);
-            VirtualFile file = VFS.getCachedFile(url);
+            VirtualFile file = VFS.getRoot(url);
             return new VFSResource(file);
          }
          catch (Exception ex)
@@ -69,4 +69,4 @@
          }
       }
    }
-}
\ No newline at end of file
+}

Modified: branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourcePatternResolver.java
===================================================================
--- branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourcePatternResolver.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/spring-int/src/main/org/jboss/spring/io/VFSResourcePatternResolver.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -82,7 +82,7 @@
    protected List<Resource> getVFSResources(URL rootURL, String subPattern) throws IOException
    {
       log.debug("Scanning url: " + rootURL + ", sub-pattern: " + subPattern);
-      VirtualFile root = VFS.getCachedFile(rootURL);
+      VirtualFile root = VFS.getRoot(rootURL);
       PatternVirtualFileVisitor visitor = new PatternVirtualFileVisitor(subPattern);
       root.visit(visitor);
       if (log.isTraceEnabled())
@@ -94,7 +94,7 @@
    {
       try
       {
-         VirtualFile file = VFS.getCachedFile(url);
+         VirtualFile file = VFS.getRoot(url);
          return new VFSResource(file);
       }
       catch (IOException e)
@@ -153,4 +153,4 @@
          return buffer.toString();
       }
    }
-}
\ No newline at end of file
+}

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/deployers/LegacyDeploymentContextComparator.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/deployers/LegacyDeploymentContextComparator.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/deployers/LegacyDeploymentContextComparator.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -2,7 +2,7 @@
 * JBoss, Home of Professional Open Source.
 * Copyright 2006, 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. 
+* 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
@@ -55,7 +55,6 @@
       legacyOrder.put(".rar", 250);
       legacyOrder.put("-ds.xml", 300);
       legacyOrder.put(".har", 350);
-      legacyOrder.put(".jar", 400);
       legacyOrder.put(".ejb3", 400);
       legacyOrder.put(".par", 400);
       legacyOrder.put(".war", 500);

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profile/basic/MetaDataAwareProfile.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profile/basic/MetaDataAwareProfile.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profile/basic/MetaDataAwareProfile.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -21,20 +21,14 @@
  */
 package org.jboss.system.server.profile.basic;
 
-import java.io.File;
 import java.io.IOException;
-import java.net.URI;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.deployers.structure.spi.DeploymentContext;
 import org.jboss.deployers.structure.spi.main.MainDeployerStructure;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext;
+import org.jboss.deployers.vfs.spi.structure.modified.StructureModificationChecker;
 import org.jboss.profileservice.spi.ProfileKey;
-import org.jboss.virtual.VFSUtils;
 import org.jboss.virtual.VirtualFile;
 import org.jboss.virtual.VirtualFileFilter;
 
@@ -51,12 +45,11 @@
 {
    private MainDeployerStructure mainDeployer;
    private VirtualFileFilter filter;
-   private Map<String, Long> lastModifiedCache;
+   private StructureModificationChecker checker;
 
    public MetaDataAwareProfile(String profileRoot, ProfileKey key)
    {
       super(profileRoot, key);
-      lastModifiedCache = new ConcurrentHashMap<String, Long>();
    }
 
    /**
@@ -64,6 +57,7 @@
     *
     * @param mainDeployer the main deployer structure
     */
+   @Deprecated
    public void setMainDeployer(MainDeployerStructure mainDeployer)
    {
       this.mainDeployer = mainDeployer;
@@ -74,32 +68,33 @@
     *
     * @param filter the metadata resources filter
     */
+   @Deprecated
    public void setFilter(VirtualFileFilter filter)
    {
       this.filter = filter;
    }
 
-   protected boolean hasBeenModified(VirtualFile root) throws Exception
+   protected StructureModificationChecker getChecker()
    {
-      // get file:/ schema
-      URI uri = VFSUtils.getCompatibleURI(root);
-      File file = new File(uri);
-      // if root is file check its modification
-      if (file.isFile())
-         return root.hasBeenModified();
+      if (checker == null)
+         throw new IllegalArgumentException("Null checker");
 
-      // else check metadata
-      String name = root.toURI().toString();
-      VFSDeploymentContext deploymentContext = getDeploymentContext(name);
-      if (deploymentContext != null)
-         return hasBeenModified(deploymentContext);
+      return checker;
+   }
 
-      log.debug("Falling back to root name: " + root);
-      deploymentContext = getDeploymentContext(root.getName());
-      if (deploymentContext != null)
-         return hasBeenModified(deploymentContext);
+   /**
+    * Set the structure modification checker.
+    *
+    * @param checker the structure modification checker
+    */
+   public void setChecker(StructureModificationChecker checker)
+   {
+      this.checker = checker;
+   }
 
-      return false;
+   protected boolean hasBeenModified(VirtualFile root) throws Exception
+   {
+      return getChecker().hasStructureBeenModified(root);
    }
 
    /**
@@ -109,62 +104,17 @@
     * @return true if modified
     * @throws IOException for any error
     */
+   @Deprecated
    protected boolean hasBeenModified(VFSDeploymentContext deploymentContext) throws IOException
    {
-      List<VirtualFile> metadataLocations = deploymentContext.getMetaDataLocations();
-      if (metadataLocations != null && metadataLocations.isEmpty() == false)
-      {
-         for(VirtualFile metadataLocation : metadataLocations)
-         {
-            List<VirtualFile> children = metadataLocation.getChildren(filter);
-            if (children != null && children.isEmpty() == false)
-            {
-               for(VirtualFile child : children)
-               {
-                  String pathName = child.getPathName();
-                  Long timestamp = lastModifiedCache.get(pathName);
-                  long lastModified = child.getLastModified();
-                  lastModifiedCache.put(pathName, lastModified);
-                  if (timestamp != null && timestamp < lastModified)
-                  {
-                     if (log.isTraceEnabled())
-                        log.trace("Metadata location modified: " + child);
-                     return true;
-                  }
-               }
-            }
-         }
-      }
-      List<DeploymentContext> childContexts = deploymentContext.getChildren();
-      if (childContexts != null && childContexts.isEmpty() == false)
-      {
-         for (DeploymentContext childContext : childContexts)
-         {
-            if (childContext instanceof VFSDeploymentContext)
-            {
-               if (hasBeenModified((VFSDeploymentContext)childContext))
-                  return true;
-            }
-         }
-      }
-      return false;
+	   return getChecker().hasStructureBeenModified(deploymentContext);
    }
 
    // expecting all deployments from same context root
    // so path name should group them per deployment unit
    protected void postRemove(VFSDeployment deployment) throws Exception
    {
-      VirtualFile root = deployment.getRoot();
-      String pathName = root.getPathName();
-      if (log.isTraceEnabled())
-         log.debug("Removing last modified cache info for: " + pathName);
-
-      Iterator<String> iter = lastModifiedCache.keySet().iterator();
-      while (iter.hasNext())
-      {
-         if (iter.next().startsWith(pathName))
-            iter.remove();
-      }
+      getChecker().removeStructureRoot(deployment.getRoot());
    }
 
    /**
@@ -174,6 +124,7 @@
     * @return vfs deployment context or null if doesn't exist or not vfs based
     */
    @SuppressWarnings("deprecation")
+   @Deprecated
    protected VFSDeploymentContext getDeploymentContext(String name)
    {
       if (mainDeployer == null)

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/VFSScanner.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/VFSScanner.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/VFSScanner.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -47,7 +47,7 @@
 /**
  * A DeploymentScanner build on top of the VFS and ProfileService. This is a
  * first pass to flesh out the APIs/concepts.
- * 
+ *
  * @author <a href="mailto:dimitris at jboss.org">Dimitris Andreadis</a>
  * @author Scott.Stark at jboss.org
  * @author adrian at jboss.org
@@ -63,28 +63,28 @@
 
    /** The URIfied ServerHomeURL */
    private URI serverHomeURI;
-   
+
    /** The list of URIs to scan */
    private List<URI> uriList = new CopyOnWriteArrayList<URI>();
-   
+
    /** The list of VirtualFiles to scan */
    private List<VirtualFile> vdfList = new CopyOnWriteArrayList<VirtualFile>();
-   
+
    /** Allow a filter for scanned directories */
-   private VirtualFileFilter filter;   
+   private VirtualFileFilter filter;
 
    /** Whether to search for files inside directories whose names containing no dots */
    private boolean doRecursiveSearch = true;
-   
+
    /** A map of deployed virtual files to their names */
    private Map<VirtualFile, String> deployedSet = new ConcurrentHashMap<VirtualFile, String>();
 
    /** The deployment factory */
    private VFSDeploymentFactory deploymentFactory = VFSDeploymentFactory.getInstance();
-   
+
     /**
     * Get the profileKey.
-    * 
+    *
     * @return the profileKey.
     */
    public ProfileKey getProfileKey()
@@ -94,7 +94,7 @@
 
    /**
     * Set the profileKey.
-    * 
+    *
     * @param profileKey the profileKey.
     */
    public void setProfileKey(ProfileKey profileKey)
@@ -104,7 +104,7 @@
 
    /**
     * Get the profileService.
-    * 
+    *
     * @return the profileService.
     */
    public ProfileService getProfileService()
@@ -114,7 +114,7 @@
 
    /**
     * Set the profileService.
-    * 
+    *
     * @param profileService the profileService.
     */
    public void setProfileService(ProfileService profileService)
@@ -124,7 +124,7 @@
 
    /**
     * Set the uris
-    * 
+    *
     * @param listspec the uris
     * @throws URISyntaxException
     * @throws IOException
@@ -136,14 +136,14 @@
          throw new NullPointerException("listspec argument cannot be null");
       }
       List<URI> list = new LinkedList<URI>();
-   
+
       StringTokenizer stok = new StringTokenizer(listspec, ",");
       while (stok.hasMoreTokens())
       {
          String urispec = stok.nextToken().trim();
-   
+
          log.debug("Adding URI from spec: " + urispec);
-   
+
          URI uri = makeURI(urispec);
 
          log.debug("URI: " + uri);
@@ -155,7 +155,7 @@
 
    /**
     * Set the uri list
-    * 
+    *
     * @param list the list
     * @throws IOException
     */
@@ -165,10 +165,10 @@
       {
          throw new NullPointerException("list argument cannot be null");
       }
-   
+
       // start out with a fresh list
       uriList.clear();
-   
+
       for(int n = 0; n < list.size(); n ++)
       {
          URI uri = list.get(n);
@@ -183,7 +183,7 @@
 
    /**
     * Get the uri list
-    * 
+    *
     * @return the list
     */
    public List<URI> getURIList()
@@ -193,7 +193,7 @@
 
    /**
     * Set whether to do recursive search
-    * 
+    *
     * @param recurse true when recurisve
     */
    public void setRecursiveSearch(boolean recurse)
@@ -203,7 +203,7 @@
 
    /**
     * Get the recursive search
-    * 
+    *
     * @return true when recursive
     */
    public boolean getRecursiveSearch()
@@ -213,7 +213,7 @@
 
    /**
     * Set the filter
-    * 
+    *
     * @param classname the filter class name
     * @throws ClassNotFoundException when the class is not found
     * @throws IllegalAccessException when the class's default constructor is not public
@@ -230,7 +230,7 @@
 
    /**
     * Get the filer
-    * 
+    *
     * @return the filter
     */
    public String getFilter()
@@ -244,7 +244,7 @@
 
    /**
     * Set the filter instance
-    * 
+    *
     * @param filter ther filter
     */
    public void setFilterInstance(VirtualFileFilter filter)
@@ -254,7 +254,7 @@
 
    /**
     * Get the filter instance
-    * 
+    *
     * @return the filter
     */
    public VirtualFileFilter getFilterInstance()
@@ -264,7 +264,7 @@
 
    /**
     * Add a uri
-    * 
+    *
     * @param uri the uri
     * @throws IOException for an error accessing the uri
     */
@@ -279,12 +279,12 @@
          log.debug("Added URI: " + uri);
          VirtualFile vf = getVFforURI(uri);
          vdfList.add(vf);
-      }      
+      }
    }
 
    /**
     * Remove a uri
-    * 
+    *
     * @param uri the uri
     * @throws IOException for an error accessing the uri
     */
@@ -298,7 +298,7 @@
       VirtualFile vf = getVFforURI(uri);
       vdfList.remove(vf);
       boolean success = uriList.remove(uri);
-      
+
       if (success)
       {
          log.debug("Removed URI: " + uri);
@@ -307,7 +307,7 @@
 
    /**
     * Whether it has the uri
-    * 
+    *
     * @param uri the uri
     * @return when the uri is configured
     */
@@ -322,7 +322,7 @@
 
    /**
     * Start the scan
-    * 
+    *
     * @throws Exception for any error
     */
    public void start() throws Exception
@@ -345,7 +345,7 @@
 
    /**
     * Scan
-    * 
+    *
     * @throws Exception for any error
     */
    public synchronized void scan() throws Exception
@@ -354,9 +354,9 @@
       {
          throw new IllegalStateException("not initialized");
       }
-   
+
       boolean trace = log.isTraceEnabled();
-    
+
       // Scan for deployments
       if (trace)
       {
@@ -382,7 +382,7 @@
             }
          }
       }
-      
+
       if (trace)
       {
          log.trace("toDeployList");
@@ -408,7 +408,7 @@
       // ********
       // Undeploy
       // ********
-   
+
       for (Iterator i = toRemoveList.iterator(); i.hasNext();)
       {
          VirtualFile deployedComponent = (VirtualFile)i.next();
@@ -422,23 +422,23 @@
       for (Iterator i = toDeployList.iterator(); i.hasNext();)
       {
          VirtualFile component = (VirtualFile)i.next();
-         
+
          // if component is not deployed already, deploy it
          if (!deployedSet.containsKey(component))
          {
             deploy(component);
          }
 
-         // component must have been deployed by now, so remove it from list 
+         // component must have been deployed by now, so remove it from list
          i.remove();
-         
+
       }
-   
+
    }
 
    /**
     * Make a uri
-    * 
+    *
     * @param urispec the uri spec
     * @return the uri
     * @throws URISyntaxException for an error parsing he uri
@@ -449,14 +449,14 @@
       urispec = StringPropertyReplacer.replaceProperties(urispec);
       return serverHomeURI.resolve(urispec);
    }
-   
+
    /**
     * A helper to find all deployments under a directory component
     * and add them to the supplied list.
-    * 
+    *
     * We may recurse.
-    * 
-    * @param list the list of virtual files 
+    *
+    * @param list the list of virtual files
     * @param root the root file
     * @throws IOException for any error
     */
@@ -464,7 +464,7 @@
       throws IOException
    {
       List<VirtualFile> components = root.getChildren();
-      
+
       for (VirtualFile component : components)
       {
          // Filter the component regardless of its type
@@ -489,7 +489,7 @@
 
    /**
     * A helper to deploy the given component using the deployer.
-    * 
+    *
     * @param component the virtual file
     */
    private void deploy(final VirtualFile component)
@@ -520,10 +520,10 @@
          deployedSet.put(component, deployment.getName());
       }
    }
-   
+
    /**
     * A helper to undeploy the given component using the deployer.
-    * 
+    *
     * @param component the component
     */
    private void undeploy(final VirtualFile component)
@@ -534,7 +534,7 @@
          {
             log.trace("Undeploying: " + component);
          }
-         String name = deployedSet.remove(component);         
+         String name = deployedSet.remove(component);
          Profile profile = profileService.getProfile(profileKey);
          remove(profile, name);
       }
@@ -542,30 +542,30 @@
       {
          log.error("Failed to undeploy: " + component, e);
       }
-   }      
-   
+   }
+
    /**
     * Remove the component
-    * 
+    *
     * @param profile the profile
     * @param file the virtual file
     * @return the deployment context or null if not added, e.g. it already exists
     * @throws Exception for any error
     */
    protected abstract VFSDeployment add(Profile profile, VirtualFile file) throws Exception;
-   
+
    /**
     * Remove the component
-    * 
+    *
     * @param profile the profile
     * @param name the name
     * @throws Exception for any error
     */
    protected abstract void remove(Profile profile, String name) throws Exception;
-   
+
    /**
     * Create a deployment
-    * 
+    *
     * @param file the root file
     * @return the deployment
     */
@@ -585,6 +585,6 @@
     */
    private VirtualFile getVFforURI(URI uri) throws IOException
    {
-      return VFS.getCachedFile(uri);
+      return VFS.getRoot(uri);
    }
 }

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/basic/MetaDataAwareProfileService.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/basic/MetaDataAwareProfileService.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/basic/MetaDataAwareProfileService.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -24,6 +24,7 @@
 import java.io.IOException;
 
 import org.jboss.deployers.structure.spi.main.MainDeployerStructure;
+import org.jboss.deployers.vfs.spi.structure.modified.StructureModificationChecker;
 import org.jboss.profileservice.spi.Profile;
 import org.jboss.profileservice.spi.ProfileKey;
 import org.jboss.system.server.profile.basic.MetaDataAwareProfile;
@@ -40,6 +41,7 @@
 {
    private MainDeployerStructure mainDeployer;
    private VirtualFileFilter filter;
+   private StructureModificationChecker checker;
 
    public MetaDataAwareProfileService(String name) throws IOException
    {
@@ -52,9 +54,10 @@
          throw new IllegalArgumentException("Null main deployer");
 
       MetaDataAwareProfile profile = new MetaDataAwareProfile(getProfileRoot(), key);
+      profile.setDeploymentFilter(deploymentFilter);
       profile.setMainDeployer(mainDeployer);
-      profile.setDeploymentFilter(deploymentFilter);
       profile.setFilter(filter);
+      profile.setChecker(checker);
       return profile;
    }
 
@@ -63,6 +66,7 @@
     *
     * @param mainDeployer the main deployer structure
     */
+   @Deprecated
    public void setMainDeployer(MainDeployerStructure mainDeployer)
    {
       this.mainDeployer = mainDeployer;
@@ -73,8 +77,19 @@
     *
     * @param filter the metadata resources filter
     */
+   @Deprecated
    public void setFilter(VirtualFileFilter filter)
    {
       this.filter = filter;
    }
+
+   /**
+    * Set the structure modification checker.
+    *
+    * @param checker the structure modification checker
+    */
+   public void setChecker(StructureModificationChecker checker)
+   {
+      this.checker = checker;
+   }
 }
\ No newline at end of file

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepository.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepository.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepository.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -44,35 +44,34 @@
 import java.util.zip.ZipInputStream;
 
 import org.jboss.deployers.spi.attachments.Attachments;
-import org.jboss.deployers.structure.spi.DeploymentContext;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentContext;
+import org.jboss.deployers.vfs.spi.structure.modified.StructureModificationChecker;
 import org.jboss.logging.Logger;
 import org.jboss.managed.api.ManagedComponent;
 import org.jboss.managed.api.ManagedDeployment.DeploymentPhase;
 import org.jboss.profileservice.spi.DeploymentContentFlags;
 import org.jboss.profileservice.spi.DeploymentRepository;
 import org.jboss.profileservice.spi.ModificationInfo;
+import org.jboss.profileservice.spi.ModificationInfo.ModifyStatus;
 import org.jboss.profileservice.spi.NoSuchDeploymentException;
 import org.jboss.profileservice.spi.NoSuchProfileException;
 import org.jboss.profileservice.spi.ProfileKey;
-import org.jboss.profileservice.spi.ModificationInfo.ModifyStatus;
 import org.jboss.util.file.Files;
 import org.jboss.virtual.VFS;
-import org.jboss.virtual.VFSUtils;
 import org.jboss.virtual.VirtualFile;
 import org.jboss.virtual.VirtualFileFilter;
 
 /**
  * An implementation of DeploymentRepository that relies on java
  * serialization to store contents on the file system.
- * 
+ *
  * + root/{name}/bootstrap - the bootstrap beans
  * + root/{name}/deployers - profile deployers
  * + root/{name}/deploy - installed deployments
  * + root/{name}/apps - post install deployments
  * + root/{name}/attachments - pre-processed attachments + admin edits to deployments
- * 
+ *
  * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
@@ -111,20 +110,17 @@
    private ReentrantReadWriteLock contentLock = new ReentrantReadWriteLock(true);
    /** Should an attempt to overwrite existing content fail in {@link #addDeploymentContent(String, ZipInputStream, DeploymentPhase)}*/
    private boolean failIfAlreadyExists = false;
-   
+
    /** Allowed deployments filter */
    private VirtualFileFilter deploymentFilter;
-   /** The metadata include filter */
-   private VirtualFileFilter hotDeploymentFilter;
-   /** The last modified cache */
-   private Map<String, Long> lastModifiedCache;
+   /** The structure modification checker */
+   private StructureModificationChecker checker;
 
    public SerializableDeploymentRepository(File root, URI[] appURIs, ProfileKey key)
    {
       this.root = root;
       this.key = key;
       this.setApplicationURIs(appURIs);
-      this.lastModifiedCache = new ConcurrentHashMap<String, Long>();
    }
 
    public URI[] getApplicationURIs()
@@ -164,27 +160,41 @@
    {
       adminEditsRoot = new File(root);
    }
-   
+
    public VirtualFileFilter getDeploymentFilter()
    {
       return deploymentFilter;
    }
-   
+
    public void setDeploymentFilter(VirtualFileFilter deploymentFilter)
    {
       this.deploymentFilter = deploymentFilter;
    }
-   
+
+   @Deprecated
    public VirtualFileFilter getHotDeploymentFilter()
    {
-      return hotDeploymentFilter;
+      return null;
    }
-   
+
+   @Deprecated
    public void setHotDeploymentFilter(VirtualFileFilter hotDeploymentFilter)
    {
-      this.hotDeploymentFilter = hotDeploymentFilter;
    }
 
+   protected StructureModificationChecker getChecker()
+   {
+      if (checker == null)
+         throw new IllegalArgumentException("Null checker");
+
+      return checker;
+   }
+
+   public void setChecker(StructureModificationChecker checker)
+   {
+      this.checker = checker;
+   }
+
    public long getLastModified()
    {
       return this.lastModified;
@@ -246,11 +256,11 @@
             names.addAll(this.applicationCtxs.keySet());
             break;
       }
-      return names;      
+      return names;
    }
 
    /**
-    * 
+    *
     */
    public String addDeploymentContent(String name, InputStream contentIS, DeploymentPhase phase)
       throws IOException
@@ -269,7 +279,7 @@
             throw new FileNotFoundException("Failed to obtain content dir for phase: "+phase);
          File contentFile = new File(contentRoot, name);
          // TODO do we need to create the parent directory if the name is myDeployments/myRealDeployment.jar ?
-         
+
          if(failIfAlreadyExists && contentFile.exists())
             throw new SyncFailedException("Deployment content already exists: "+contentFile.getAbsolutePath());
          FileOutputStream fos = new FileOutputStream(contentFile);
@@ -313,8 +323,8 @@
    }
 
    /**
-    * @throws URISyntaxException 
-    * 
+    * @throws URISyntaxException
+    *
     */
    public VirtualFile getDeploymentContent(String name, DeploymentPhase phase)
          throws IOException, URISyntaxException
@@ -414,13 +424,13 @@
    {
       contentLock.writeLock().lock();
       if( log.isTraceEnabled() )
-         log.trace("acquireDeploymentContentLock, have write lock"); 
+         log.trace("acquireDeploymentContentLock, have write lock");
    }
    public void releaseDeploymentContentLock()
    {
       contentLock.writeLock().unlock();
       if( log.isTraceEnabled() )
-         log.trace("releaseDeploymentContentLock, gave up write lock");       
+         log.trace("releaseDeploymentContentLock, gave up write lock");
    }
 
    public void addDeployment(String vfsPath, VFSDeployment d, DeploymentPhase phase)
@@ -529,9 +539,9 @@
             {
                VFSDeployment ctx = iter.next();
                VirtualFile root = ctx.getRoot();
-               String name = root.getPathName();
+               String pathName = root.getPathName();
                // Ignore locked or disabled applications
-               if(this.hasDeploymentContentFlags(name, DeploymentPhase.APPLICATION, ignoreFlags))
+               if(this.hasDeploymentContentFlags(pathName, DeploymentPhase.APPLICATION, ignoreFlags))
                {
                   if(trace)
                      log.trace("Ignoring locked application: "+root);
@@ -545,17 +555,17 @@
                   modified.add(info);
                   iter.remove();
                   // Remove last modified cache
-                  this.lastModifiedCache.remove(root.getPathName());
+                  getChecker().removeStructureRoot(root);
                   if( trace )
-                     log.trace(name + " was removed");
+                     log.trace(pathName + " was removed");
                }
                // Check for modification
-               else if( hasBeenModified(root) || 
-                     hasDeploymentContentFlags(root.getPathName(), DeploymentPhase.APPLICATION, DeploymentContentFlags.MODIFIED) )
+               else if( hasBeenModified(root) ||
+                     hasDeploymentContentFlags(pathName, DeploymentPhase.APPLICATION, DeploymentContentFlags.MODIFIED) )
                {
                   long rootLastModified = root.getLastModified();
                   if( trace )
-                     log.trace(name + " was modified: " + rootLastModified);
+                     log.trace(pathName + " was modified: " + rootLastModified);
                   // Need to create a duplicate ctx
                   VFSDeployment ctx2 = loadDeploymentData(root, DeploymentPhase.APPLICATION);
                   ModificationInfo info = new ModificationInfo(ctx2, rootLastModified, ModifyStatus.MODIFIED);
@@ -580,6 +590,7 @@
                   VFSDeployment ctx = loadDeploymentData(vf, DeploymentPhase.APPLICATION);
                   ModificationInfo info = new ModificationInfo(ctx, vf.getLastModified(), ModifyStatus.ADDED);
                   modified.add(info);
+                  getChecker().addStructureRoot(vf);
                   applicationCtxs.put(ctx.getName(), ctx);
                }
             }
@@ -596,7 +607,7 @@
          lastModified = System.currentTimeMillis();
       return modified;
    }
-   
+
    /**
     * Check if the deployment has been modified.
     *
@@ -606,78 +617,32 @@
     */
    protected boolean hasBeenModified(VirtualFile root) throws Exception
    {
-      // get file:/ schema
-      URI uri = VFSUtils.getCompatibleURI(root);
-      File file = new File(uri);
-      // if root is file check its modification
-      if (file.isFile())
-         return root.hasBeenModified();
-
-      // else check metadata
-      String name = root.toURI().toString();
-      VFSDeploymentContext deploymentContext = getDeploymentContext(name);
-      if (deploymentContext != null)
-         return hasBeenModified(deploymentContext);
-
-      log.trace("Falling back to root name: " + root);
-      deploymentContext = getDeploymentContext(root.getName());
-      if (deploymentContext != null)
-         return hasBeenModified(deploymentContext);
-
-      return false;
+      return getChecker().hasStructureBeenModified(root);
    }
-   
+
    /**
-    * Check for modifications.
-    * 
-    * @param deploymentContext
-    * @return
-    * @throws IOException
+    * Has vfs deployment context been modified.
+    *
+    * @param deploymentContext the vfs deployment context
+    * @return true if modified
+    * @throws IOException for any error
     */
    protected boolean hasBeenModified(VFSDeploymentContext deploymentContext) throws IOException
    {
-      // hasBeenModified
-      boolean hasBeenModfied = false;
-      List<VirtualFile> metadataLocations = deploymentContext.getMetaDataLocations();
-      if (metadataLocations != null && metadataLocations.isEmpty() == false)
-      {
-         for(VirtualFile metadataLocation : metadataLocations)
-         {
-            List<VirtualFile> children = metadataLocation.getChildren(hotDeploymentFilter);
-            if (children != null && children.isEmpty() == false)
-            {
-               for(VirtualFile child : children)
-               {
-                  String pathName = child.getPathName();
-                  Long timestamp = lastModifiedCache.get(pathName);
-                  long lastModified = child.getLastModified();
-                  lastModifiedCache.put(pathName, lastModified);
-                  if (timestamp != null && timestamp < lastModified)
-                  {
-                     if (log.isTraceEnabled())
-                        log.trace("Metadata location modified: " + child);
-                     hasBeenModfied = true;
-                  }
-               }
-            }
-         }
-      }
-      List<DeploymentContext> childContexts = deploymentContext.getChildren();
-      if (childContexts != null && childContexts.isEmpty() == false)
-      {
-         for (DeploymentContext childContext : childContexts)
-         {
-            if (childContext instanceof VFSDeploymentContext)
-            {
-               if (hasBeenModified((VFSDeploymentContext)childContext))
-                  hasBeenModfied = true;
-            }
-         }
-      }
-      return hasBeenModfied;
+	   return getChecker().hasStructureBeenModified(deploymentContext);
    }
-   
 
+   /**
+    * Cleanup last modified cache for path name.
+    *
+    * @param pathName the path name
+    */
+   @Deprecated
+   protected void removeLastModifiedCache(String pathName)
+   {
+      log.warn("This method has no usage anymore, use StructureModificationChecher instead.");
+   }
+
    public Collection<VFSDeployment> getDeployments(DeploymentPhase phase)
       throws Exception
    {
@@ -717,7 +682,7 @@
          lastModified = System.currentTimeMillis();
       return ctx;
    }
-   
+
    public String toString()
    {
       StringBuilder tmp = new StringBuilder(super.toString());
@@ -731,7 +696,7 @@
 
    /**
     * Create a profile deployment repository
-    * 
+    *
     * @throws IOException
     */
    public void create() throws Exception
@@ -768,7 +733,7 @@
 
    /**
     * Load the profile deployments
-    * 
+    *
     * @throws IOException
     * @throws NoSuchProfileException
     */
@@ -812,7 +777,7 @@
       else
       {
          // hack to load conf/jboss-service.xml until its removed
-         loadBootstraps(null);         
+         loadBootstraps(null);
       }
       VFS deployersVFS = VFS.getVFS(deployersDir.toURI());
       loadDeployers(deployersVFS.getRoot());
@@ -845,7 +810,7 @@
     * @return virtual file representing app uri
     * @throws IOException for any error
     */
-   protected VirtualFile getCachedApplicationVF(URI uri) throws IOException   
+   protected VirtualFile getCachedApplicationVF(URI uri) throws IOException
    {
       String uriString = uri.toString();
       VirtualFile dir;
@@ -854,7 +819,7 @@
          dir = applicationVFCache.get(uriString);
          if (dir == null)
          {
-            dir = VFS.getCachedFile(uri);
+            dir = VFS.getRoot(uri);
             applicationVFCache.put(uriString, dir);
          }
       }
@@ -1055,7 +1020,7 @@
 
    /**
     * Load the bootstrap descriptors under bootstrapDir:
-    * 
+    *
     * @param bootstrapDir
     * @throws IOException
     */
@@ -1068,7 +1033,7 @@
          for(VirtualFile vf : children)
          {
             VFSDeployment vfCtx = loadDeploymentData(vf, DeploymentPhase.BOOTSTRAP);
-            bootstrapCtxs.put(vfCtx.getName(), vfCtx);       
+            bootstrapCtxs.put(vfCtx.getName(), vfCtx);
          }
       }
       else
@@ -1081,13 +1046,13 @@
          if(jbossServiceVF == null)
             throw new FileNotFoundException("Failed to find jboss-service.xml under conf");
          VFSDeployment vfCtx = loadDeploymentData(jbossServiceVF, DeploymentPhase.BOOTSTRAP);
-         bootstrapCtxs.put(vfCtx.getName(), vfCtx);                
+         bootstrapCtxs.put(vfCtx.getName(), vfCtx);
       }
    }
 
    /**
     * Load all the deployments under the deployersDir.
-    * 
+    *
     * @param deployersDir
     * @throws IOException
     */
@@ -1098,13 +1063,13 @@
       for(VirtualFile vf : children)
       {
          VFSDeployment vfCtx = loadDeploymentData(vf, DeploymentPhase.DEPLOYER);
-         deployerCtxs.put(vfCtx.getName(), vfCtx);       
+         deployerCtxs.put(vfCtx.getName(), vfCtx);
       }
    }
 
    /**
     * Load all the applications under the applicationDir.
-    * 
+    *
     * @param applicationDir
     * @throws IOException
     */
@@ -1122,7 +1087,7 @@
 
    /**
     * Added deployments for DeploymentPhase.APPLICATION.
-    * 
+    *
     * @param list
     * @param root
     * @throws Exception
@@ -1140,7 +1105,7 @@
             log.trace("ignoring "+ component);
             continue;
          }
-         
+
          String key = component.toURI().toString();
          if (applicationCtxs.containsKey(key) == true)
             continue;
@@ -1163,7 +1128,7 @@
 
    /**
     * Update a deployment.
-    * 
+    *
     * @param d the deployment
     * @param phase the deployment phase
     * @param comp the managed component
@@ -1184,7 +1149,7 @@
          log.error("no metadata attached.");
       }
    }
-   
+
    protected VFSDeployment loadDeploymentData(VirtualFile file, DeploymentPhase phase)
    {
       try

Modified: branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepositoryFactory.java
===================================================================
--- branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepositoryFactory.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system/src/main/org/jboss/system/server/profileservice/repository/SerializableDeploymentRepositoryFactory.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -24,8 +24,10 @@
 import java.io.File;
 import java.net.URI;
 import java.util.HashMap;
+import java.util.Map;
 
 import org.jboss.deployers.structure.spi.main.MainDeployerStructure;
+import org.jboss.deployers.vfs.spi.structure.modified.StructureModificationChecker;
 import org.jboss.profileservice.spi.AttachmentsSerializer;
 import org.jboss.profileservice.spi.DeploymentRepository;
 import org.jboss.profileservice.spi.DeploymentRepositoryFactory;
@@ -55,10 +57,11 @@
    private VirtualFileFilter deploymentFilter;
    /** The HotDeployment filter */
    private VirtualFileFilter hotDeploymentFilter;
-   
+   /** The structure modification checker */
+   private StructureModificationChecker checker;
+
    /** The profile repositories */
-   private HashMap<ProfileKey, DeploymentRepository> profileRepositories
-      = new HashMap<ProfileKey, DeploymentRepository>();
+   private Map<ProfileKey, DeploymentRepository> profileRepositories = new HashMap<ProfileKey, DeploymentRepository>();
    
    /**
     * Get the server profile store root directory.
@@ -114,27 +117,39 @@
    {
       this.deploymentFilter = deploymentFilter;
    }
-   
+
+   @Deprecated
    public VirtualFileFilter getHotDeploymentFilter()
    {
       return hotDeploymentFilter;
    }
-   
+
+   @Deprecated
    public void setHotDeploymentFilter(VirtualFileFilter hotDeploymentFilter)
    {
       this.hotDeploymentFilter = hotDeploymentFilter;
    }
-   
+
    public MainDeployerStructure getMainDeployer()
    {
       return mainDeployer;
    }
-   
+
    public void setMainDeployer(MainDeployerStructure mainDeployer)
    {
       this.mainDeployer = mainDeployer;
    }
 
+   public StructureModificationChecker getChecker()
+   {
+      return checker;
+   }
+
+   public void setChecker(StructureModificationChecker checker)
+   {
+      this.checker = checker;
+   }
+
    public synchronized DeploymentRepository getDeploymentRepository(ProfileKey key)
    {
       if (appURIs == null || appURIs.length == 0)
@@ -151,6 +166,7 @@
          repo.setDeploymentFilter(deploymentFilter);
          repo.setHotDeploymentFilter(hotDeploymentFilter);
          repo.setMainDeployer(mainDeployer);
+         repo.setChecker(checker);
          profileRepositories.put(key, repo);
          dr = repo;
       }

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/deployment/MainDeployer.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/deployment/MainDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/deployment/MainDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -72,12 +72,13 @@
  * Main
  *
  * @deprecated see org.jboss.deployers.spi.deployment.MainDeployer
- * 
+ *
  * @author <a href="mailto:marc.fleury at jboss.org">Marc Fleury</a>
  * @author <a href="mailto:scott.stark at jboss.org">Scott Stark</a>
  * @author <a href="mailto:d_jencks at users.sourceforge.net">David Jencks</a>
  * @author <a href="mailto:dimitris at jboss.org">Dimitris Andreadis</a>
  * @author adrian at jboss.org
+ * @author ales.justin at jboss.org
  * @version $Revision$
  */
 public class MainDeployer extends ServiceMBeanSupport
@@ -90,7 +91,7 @@
 
    /** The deployment factory */
    private VFSDeploymentFactory deploymentFactory = VFSDeploymentFactory.getInstance();
-   
+
    /**
     * The variable <code>serviceController</code> is used by the
     * checkIncompleteDeployments method to ask for lists of mbeans
@@ -118,7 +119,7 @@
 
    /** Helper class handling the SuffixOrder and EnhancedSuffixOrder attributes */
    private final SuffixOrderHelper suffixOrderHelper = new SuffixOrderHelper(sorter);
-   
+
    /** Should local copies be made of resources on the local file system */
    private boolean copyFiles = true;
 
@@ -223,17 +224,17 @@
    {
       return suffixOrderHelper.getSuffixOrder();
    }
-   
+
    /** Get the enhanced suffix order
-    * 
-    * @return the enhanced suffix order 
+    *
+    * @return the enhanced suffix order
     * @jmx.managed-attribute
     */
    public String[] getEnhancedSuffixOrder()
    {
       return suffixOrderHelper.getEnhancedSuffixes();
    }
-   
+
    /** Set the enhanced suffix order
     *
     * @param enhancedSuffixOrder the enhanced suffix order
@@ -243,7 +244,7 @@
    {
       suffixOrderHelper.setEnhancedSuffixes(enhancedSuffixOrder);
    }
-  
+
    /**
     * Describe <code>setServiceController</code> method here.
     *
@@ -366,7 +367,7 @@
    {
       log.debug("Adding deployer: " + deployer);
       ObjectName deployerName = deployer.getServiceName();
-      
+
       synchronized(deployers)
       {
          deployers.addFirst(deployer);
@@ -381,7 +382,7 @@
             suffixOrderHelper.addSuffixes(deployer.getSuffixes(), deployer.getRelativeOrder());
          }
       }
-      
+
       // Send a notification about the deployer addition
       Notification msg = new Notification(ADD_DEPLOYER, this, getNextNotificationSequenceNumber());
       msg.setUserData(deployerName);
@@ -407,7 +408,7 @@
          } // end of for ()
       }
    }
-   
+
    /**
     * The <code>removeDeployer</code> method unregisters a deployer with the MainDeployer.
     * Deployed packages deployed with this deployer are undeployed.
@@ -420,7 +421,7 @@
       log.debug("Removing deployer: " + deployer);
       ObjectName deployerName = deployer.getServiceName();
       boolean removed = false;
-      
+
       synchronized(deployers)
       {
          removed = deployers.remove(deployer);
@@ -435,7 +436,7 @@
             suffixOrderHelper.removeSuffixes(deployer.getSuffixes(), deployer.getRelativeOrder());
          }
       }
-      
+
       // Send a notification about the deployer removal
       if (removed)
       {
@@ -513,7 +514,7 @@
 
       // used in inLocalCopyDir
       tempDirString = tempDir.toURL().toString();
-      
+
       // handles SuffixOrder & RelativeSuffixOrder attributes
       suffixOrderHelper.initialize();
    }
@@ -555,7 +556,7 @@
       this.deploymentList.clear();
       this.waitingDeployments.clear();
       this.tempDir = null;
-      
+
       log.debug("Undeployed " + deployCounter + " deployed packages");
    }
 
@@ -583,8 +584,25 @@
     */
    public void redeploy(URL url) throws DeploymentException
    {
-      undeploy(url);
-      deploy(url);
+      String deploymentName = contextMap.get(url);
+      if (deploymentName != null)
+      {
+         try
+         {
+            Deployment deployment = delegate.getDeployment(deploymentName);
+            delegate.addDeployment(deployment);
+            delegate.process();
+            delegate.checkComplete(deployment);
+         }
+         catch (org.jboss.deployers.spi.DeploymentException e)
+         {
+            throw new DeploymentException(e);
+         }
+      }
+      else
+      {
+         deploy(url);
+      }
    }
 
    /**
@@ -620,7 +638,7 @@
    {
       undeploy(new URL(urlspec));
    }
-   
+
    /**
     * The <code>undeploy</code> method undeploys a package identified by a URL
     *
@@ -805,14 +823,7 @@
       {
          try
          {
-/*
-            // disable reaper for old deployments
-            // currently I (alesj) have no idea why this custom enable doesn't work
-            VFS vfs = VFS.getVFS(url);
-            VFSUtils.enableNoReaper(vfs);
-            VirtualFile file = vfs.getRoot();
-*/
-            VirtualFile file = VFS.getRoot(url);
+            VirtualFile file = VFS.createNewRoot(url);
             VFSDeployment deployment = deploymentFactory.createVFSDeployment(file);
             delegate.addDeployment(deployment);
             deploymentName = deployment.getName();
@@ -1244,7 +1255,7 @@
    protected void copy(URL src, File dest) throws IOException
    {
       log.debug("Copying " + src + " -> " + dest);
-      
+
       // Validate that the dest parent directory structure exists
       File dir = dest.getParentFile();
       if (!dir.exists())
@@ -1304,7 +1315,7 @@
     */
    public void stop(String urlspec)
       throws DeploymentException, MalformedURLException
-   {	
+   {
       throw new DeploymentException("Not supported");
    }
 
@@ -1354,7 +1365,7 @@
     * Is deployed.
     *
     * @param name the name of the deployment
-    * @return true if deployed, false otherwise 
+    * @return true if deployed, false otherwise
     */
    protected boolean checkDeployed(String name)
    {
@@ -1459,12 +1470,12 @@
     */
    private void fillParentAndChildrenSDI(DeploymentInfo parent, Map map)
    {
-      Set subDeployments = parent.subDeployments;      
+      Set subDeployments = parent.subDeployments;
       Iterator it = subDeployments.iterator();
       while (it.hasNext())
       {
          DeploymentInfo child = (DeploymentInfo) it.next();
-         SerializableDeploymentInfo sdichild = returnSDI(child, map);      
+         SerializableDeploymentInfo sdichild = returnSDI(child, map);
          sdichild.parent = returnSDI(parent, map);
          sdichild.parent.subDeployments.add(sdichild);
          fillParentAndChildrenSDI(child, map);
@@ -1477,7 +1488,7 @@
        if( sdi == null )
        {
            sdi = new SerializableDeploymentInfo(di);
-           map.put(di.url, sdi);                
+           map.put(di.url, sdi);
         }
        return sdi;
    }

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/SARDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -43,13 +43,13 @@
 
 /**
  * SARDeployer.<p>
- * 
+ *
  * This deployer is responsible for looking for -service.xml
  * and creating the metadata object.<p>
- * 
+ *
  * The {@link ServiceClassLoaderDeployer} and {@link ServiceDeployer} does the
  * real work of deployment.
- * 
+ *
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @author Scott.Stark at jboss.org
  * @author <a href="ales.justin at jboss.com">Ales Justin</a>
@@ -59,7 +59,7 @@
 {
    /**
     * Create a new SARDeployer.
-    * 
+    *
     * @throws IllegalArgumentException for a null kernel
     */
    public SARDeployer()
@@ -87,7 +87,7 @@
       List<ServiceDeploymentClassPath> classPaths = parsed.getClassPaths();
       if (classPaths != null)
          processXMLClasspath(unit, classPaths);
-      
+
       List<ServiceMetaData> services = parsed.getServices();
       if (services == null)
       {
@@ -100,7 +100,7 @@
          if (log.isDebugEnabled())
          {
             String docStr = DOMWriter.printNode(config, true);
-            int index = docStr.toLowerCase().indexOf("password"); 
+            int index = docStr.toLowerCase().indexOf("password");
             if (index != -1)
             {
                docStr = maskPasswords(docStr, index);
@@ -117,7 +117,7 @@
 
    /**
     * Process the xml classpath
-    * 
+    *
     * @param unit the unit
     * @param classpaths the classpaths
     * @throws Exception for any error
@@ -137,7 +137,7 @@
          {
             ServerConfig config = ServerConfigLocator.locate();
             URL codeBaseURL = new URL(config.getServerHomeURL(), codebase);
-            codebaseFile = VFS.getCachedFile(codeBaseURL);
+            codebaseFile = VFS.getRoot(codeBaseURL);
          }
 
          if (codebaseFile == null)
@@ -157,12 +157,9 @@
 
       }
 
-      List<VirtualFile> origClassPath = unit.getClassPath();
-      if (origClassPath != null)
-         classpath.addAll(origClassPath);
-      unit.setClassPath(classpath);
+      unit.prependClassPath(classpath);
    }
-   
+
    private String maskPasswords(String original, int index)
    {
       StringBuilder sb = new StringBuilder(original);

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/ServiceDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -40,6 +40,7 @@
  * type {@link ServiceDeployment}.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision: 1.1 $
  */
 public class ServiceDeployer extends AbstractSimpleRealDeployer<ServiceMetaData>

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/system/server/jmx/JMXKernel.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/system/server/jmx/JMXKernel.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/system/server/jmx/JMXKernel.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -67,7 +67,7 @@
  * This is used to support the SARDeployer and mbean integration.
  * 
  * @author Scott.Stark at jboss.org
- * @version $Revision:$
+ * @version $Revision$
  */
 public class JMXKernel extends JBossObject
    implements JMXKernelMBean, NotificationEmitter
@@ -513,7 +513,7 @@
       for (int i = 0; i < list.size(); ++i)
       {
          URL url = list.get(i);
-         files[i] = VFS.getCachedFile(url);
+         files[i] = VFS.getRoot(url);
       }
       
       VFSClassLoaderPolicy policy = new VFSClassLoaderPolicy(files);
@@ -566,3 +566,4 @@
    }
 }
 
+

Modified: branches/Branch_5_x/testsuite/imports/sections/util.xml
===================================================================
--- branches/Branch_5_x/testsuite/imports/sections/util.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/testsuite/imports/sections/util.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -35,5 +35,7 @@
             <include name="org/jboss/test/util/mbean/**"/>
          </fileset>
       </jar>      
+      <!-- The service -->
+      <copy tofile="${build.lib}/test-default-scheduler-service.xml" file="${build.resources}/util/test-default-scheduler-service.xml"/>
    </target>
 </project>

Modified: branches/Branch_5_x/testsuite/src/main/org/jboss/test/util/test/SchedulerUnitTestCase.java
===================================================================
--- branches/Branch_5_x/testsuite/src/main/org/jboss/test/util/test/SchedulerUnitTestCase.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/testsuite/src/main/org/jboss/test/util/test/SchedulerUnitTestCase.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -47,7 +47,7 @@
    extends JBossTestCase
 {
 
-   private String file = "../resources/util/test-default-scheduler-service.xml";
+   private String file = "test-default-scheduler-service.xml";
 
    /**
     * Constructor for the SchedulerUnitTestCase object
@@ -93,7 +93,7 @@
 	  if (hits > 0)
 	  {
 		 Date now = new Date();
-		 assertNotNull("hit date", hd); 
+		 assertNotNull("hit date", hd);
 		 assertTrue("date " + hd + " " + now, !hd.after(now));
 		 assertTrue("note", ex.getHitNotification() != null);
 		 assertTrue("sched", ex.getSchedulerName() != null);
@@ -128,11 +128,11 @@
 		 registered(scheduler2);
 		 registered(manager1);
 
-		 Thread.sleep(2500); // Half of one period 
+		 Thread.sleep(2500); // Half of one period
 		 check(ex1, 1, 0); // Only one
 		 check(ex2, 0, 0); // StartAtStartup is false
 		 check(ex3, 1, 2); // First of three
-		 
+
 		 // Sleep for the remainder of the period and start the other schedule
 		 Thread.sleep(2500);
 		 invoke(scheduler2, "startSchedule", null, null);
@@ -140,7 +140,7 @@
 		 Thread.sleep(2500); // Half of one period
 		 check(ex1, 1, 0); // done
 		 check(ex2, 1, -1); // first
-		 check(ex3, 2, 1); // one more to go 
+		 check(ex3, 2, 1); // one more to go
 
 		 Thread.sleep(5000); // one period
 		 check(ex1, 1, 0); // done
@@ -172,7 +172,7 @@
       }
    }
 
-   /** 
+   /**
 	* Test the deployment of a ear containing a sar which creates an
     * instance of the org.jboss.varia.scheduler.Scheduler service with a
     * Schedulable class that exists in an external jar referenced by the

Modified: branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
===================================================================
--- branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -22,9 +22,7 @@
 package org.jboss.web.tomcat.service.deployers;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -37,7 +35,6 @@
 import java.util.List;
 import java.util.Set;
 import java.util.zip.ZipFile;
-
 import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -501,14 +498,14 @@
 
    public Loader getWebLoader(DeploymentUnit unit, JBossWebMetaData metaData, ClassLoader loader, URL rl) throws MalformedURLException
    {
-      Loader webLoader = null;
-
+      Loader webLoader;
+      
       /*
        * If we are using the jboss class loader we need to augment its path to include the WEB-INF/{lib,classes} dirs or
        * else scoped class loading does not see the war level overrides. The call to setWarURL adds these paths to the
        * deployment UCL.
        */
-      ArrayList<URL> classpath = (ArrayList<URL>)unit.getAttachment("org.jboss.web.expandedWarClasspath");
+      List<URL> classpath = unit.getAttachment("org.jboss.web.expandedWarClasspath", List.class);
       if (classpath == null && unit instanceof VFSDeploymentUnit)
       {
          VFSDeploymentUnit vfsUnit = (VFSDeploymentUnit)unit;
@@ -523,9 +520,8 @@
             classpath = new ArrayList<URL>();
             classpath.add(vfsURL);
          }
-         catch (Exception e)
+         catch (Exception ignored)
          {
-
          }
       }
 

Modified: branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/WarClassLoaderDeployer.java
===================================================================
--- branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/WarClassLoaderDeployer.java	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/deployers/WarClassLoaderDeployer.java	2009-02-23 14:03:07 UTC (rev 84628)
@@ -22,8 +22,6 @@
 package org.jboss.web.tomcat.service.deployers;
 
 import java.io.ByteArrayInputStream;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 
@@ -46,16 +44,13 @@
  * 
  * @author Scott.Stark at jboss.org
  * @author adrian at jboss.org
- * @version $Revision:$
+ * @version $Revision$
  */
 public class WarClassLoaderDeployer extends AbstractSimpleVFSRealDeployer<JBossWebMetaData>
 {
    /** The parent class loader first model flag */
    private boolean java2ClassLoadingCompliance = false;
 
-   /** Whether to include web-inf in the classpath */
-   private boolean includeWebInfInClasspath;
-
    /** Package names that should be ignored for class loading */
    private String filteredPackages;
 
@@ -89,34 +84,20 @@
       this.filteredPackages = pkgs;
    }
 
+   @Deprecated
    public boolean isIncludeWebInfInClasspath()
    {
-      return includeWebInfInClasspath;
+      throw new IllegalArgumentException("Not supported anymore, see WARStructure.");
    }
+   @Deprecated
    public void setIncludeWebInfInClasspath(boolean includeWebInfInClasspath)
    {
-      this.includeWebInfInClasspath = includeWebInfInClasspath;
+      log.warn("Not supported anymore, use WARStructure::setIncludeWebInfInClasspath(boolean).");
    }
 
    @Override
    public void deploy(VFSDeploymentUnit unit, JBossWebMetaData metaData) throws DeploymentException
    {
-      // FIXME This should be in the WAR structure deployer
-      if (includeWebInfInClasspath)
-      {
-         VirtualFile webInf = getWebInf(unit);
-         if (webInf != null)
-         {
-            ArrayList<VirtualFile> classPath = new ArrayList<VirtualFile>();
-            List<VirtualFile> unitClassPath = unit.getClassPath();
-            if (unitClassPath != null)
-               classPath.addAll(unitClassPath);
-            if (classPath.contains(webInf) == false)
-               classPath.add(webInf);
-            unit.setClassPath(classPath);
-         }
-      }
-
       // Ignore if it already has classloading
       if (unit.isAttachmentPresent(ClassLoadingMetaData.class))
          return;
@@ -198,23 +179,7 @@
       unit.addAttachment(ClassLoadingMetaData.class, classLoadingMetaData);
    }
 
-   @Override
-   public void undeploy(VFSDeploymentUnit unit, JBossWebMetaData metaData)
-   {
-      
-      // FIXME This should be in the WAR structure deployer
-      if (includeWebInfInClasspath)
-      {
-         VirtualFile webInf = getWebInf(unit);
-         if (webInf != null)
-         {
-            List<VirtualFile> classPath = unit.getClassPath();
-            if (classPath != null)
-               classPath.remove(webInf);
-         }
-      }
-   }
-
+   @Deprecated
    protected VirtualFile getWebInf(VFSDeploymentUnit unit)
    {
       return unit.getFile("WEB-INF");

Modified: branches/Branch_5_x/tomcat/src/resources/war-deployers-jboss-beans.xml
===================================================================
--- branches/Branch_5_x/tomcat/src/resources/war-deployers-jboss-beans.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/tomcat/src/resources/war-deployers-jboss-beans.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -2,7 +2,7 @@
 
 <!--
 Web application deployers
-$Id:$
+$Id$
 -->
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
 
@@ -14,6 +14,7 @@
              <constructor><parameter class="java.lang.String">.jar</parameter></constructor>
           </bean>
        </property>
+       <property name="includeWebInfInClasspath">true</property>
        <property name="contextInfoOrder">1000</property>
    </bean>
 
@@ -31,10 +32,7 @@
    <!-- Allow for war local class loaders: in testing -->
    <bean name="WarClassLoaderDeployer" class="org.jboss.web.tomcat.service.deployers.WarClassLoaderDeployer">
       <property name="relativeOrder">-1</property>
-      
-      <property name="includeWebInfInClasspath">true</property>
-      <property name="filteredPackages">javax.servlet,org.apache.commons.logging</property>
-      
+      <property name="filteredPackages">javax.servlet,org.apache.commons.logging</property>      
    </bean>
         
    <!-- 

Modified: branches/Branch_5_x/varia/src/resources/seam/seam-deployers-jboss-beans.xml
===================================================================
--- branches/Branch_5_x/varia/src/resources/seam/seam-deployers-jboss-beans.xml	2009-02-23 14:00:41 UTC (rev 84627)
+++ branches/Branch_5_x/varia/src/resources/seam/seam-deployers-jboss-beans.xml	2009-02-23 14:03:07 UTC (rev 84628)
@@ -8,4 +8,7 @@
   <!-- Seam deployer -->
   <bean name="SeamDeployer" class="org.jboss.seam.integration.microcontainer.deployers.SeamWebUrlIntegrationDeployer"/>
 
+  <!-- Seam modification type matcher -->
+  <bean name="SeamMTMatcher" class="org.jboss.seam.integration.microcontainer.deployers.SeamTempModificationTypeMatcher"/>
+
 </deployment>




More information about the jboss-cvs-commits mailing list