[jboss-cvs] jboss-cvs-commits Digest, Vol 40, Issue 522

Ales Justin ales.justin at gmail.com
Thu Oct 22 11:32:32 EDT 2009


This needs fixing in ClassPools.

-----

java.util.ConcurrentModificationException
	at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
	at java.util.HashMap$KeyIterator.next(HashMap.java:877)
	at 
java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1010)
	at 
org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolFactory.registerBootstrapLoaders(JBossClDelegatingClassPoolFactory.java:146)
	at 
org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolFactory.create(JBossClDelegatingClassPoolFactory.java:76)
	at 
org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolFactory.create(JBossClDelegatingClassPoolFactory.java:52)
	at 
javassist.scopedpool.ScopedClassPoolRepositoryImpl.createScopedClassPool(ScopedClassPoolRepositoryImpl.java:99)
	at 
javassist.scopedpool.ScopedClassPoolRepositoryImpl.registerClassLoader(ScopedClassPoolRepositoryImpl.java:125)
	at 
org.jboss.classpool.spi.ClassPoolRepository.registerClassLoader(ClassPoolRepository.java:167)
	at 
org.jboss.reflect.plugins.javassist.classpool.RepositoryClassPoolFactory.getPoolForLoader(RepositoryClassPoolFactory.java:53)
	at 
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl.get(JavassistTypeInfoFactoryImpl.java:269)
	at 
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl.get(JavassistTypeInfoFactoryImpl.java:294)
	at 
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl.getTypeInfo(JavassistTypeInfoFactoryImpl.java:469)
	at 
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl.getTypeInfo(JavassistTypeInfoFactoryImpl.java:501)
	at 
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactory.getTypeInfo(JavassistTypeInfoFactory.java:56)
	at 
org.jboss.test.deployers.vfs.classpool.test.ClassPoolTest.assertClassPool(ClassPoolTest.java:80)
	at 
org.jboss.test.deployers.vfs.classpool.test.ClassPoolTestCase.testBasicEar(ClassPoolTestCase.java:83)

Flavia Rainone wrote:
> I see that you committed a fix. Is this fix 100%? I see that the test is 
> still passing w/o any changes.
> 
> On 10/21/2009 05:10 PM, Ales Justin wrote:
>> This is wrong.
>>
>> The deployer you added is never invoked,
>> as there is no deployer that would create JBossWebMetaData.
>>
>> You should *remove* the newly added jboss-metadata dependency,
>> and create a better/simpler mock, that would work off the .war 
>> deployment unit.
>>
>> e.g.
>>
>> if (unit.getName().endswith(".war"))
>> {
>>    // create this new ClassLoadingMetaData
>> }
>>
>> No wonder the test worked w/o any changes,
>> as the classloader was still the same,
>> where in true web example it should be a new one,
>> hanging off the top one.
>>
>>> ------------------------------
>>>
>>> Message: 8
>>> Date: Wed, 21 Oct 2009 10:26:49 -0400
>>> From: jboss-cvs-commits at lists.jboss.org
>>> Subject: [jboss-cvs] JBossAS SVN: r95304 - in
>>>     projects/jboss-deployers/trunk/deployers-vfs/src/test:
>>>     java/org/jboss/test/deployers/vfs/classpool/test and 1 other
>>>     directories.
>>> To: jboss-cvs-commits at lists.jboss.org
>>> Message-ID:
>>> <200910211426.n9LEQnL4001497 at svn01.web.mwc.hst.phx2.redhat.com>
>>> Content-Type: text/plain; charset=UTF-8
>>>
>>> Author: flavia.rainone at jboss.com
>>> Date: 2009-10-21 10:26:49 -0400 (Wed, 21 Oct 2009)
>>> New Revision: 95304
>>>
>>> Added:
>>>    
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/support/MockWarClassLoaderDeployer.java 
>>>
>>> Modified:
>>>    
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.java 
>>>
>>>    
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.xml 
>>>
>>> Log:
>>> [JBDEPLOY-216] Added MockWarClassLoaderDeployer to ClassPoolTestCase.
>>>
>>> Added: 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/support/MockWarClassLoaderDeployer.java 
>>>
>>> ===================================================================
>>> --- 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/support/MockWarClassLoaderDeployer.java                            
>>> (rev 0)
>>> +++ 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/support/MockWarClassLoaderDeployer.java    
>>> 2009-10-21 14:26:49 UTC (rev 95304)
>>> @@ -0,0 +1,175 @@
>>> +/*
>>> + * JBoss, Home of Professional Open Source
>>> + * Copyright 2006, Red Hat Middleware LLC, and individual contributors
>>> + * by the @authors tag. See the copyright.txt in the distribution for a
>>> + * full listing of individual contributors.
>>> + *
>>> + * This is free software; you can redistribute it and/or modify it
>>> + * under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation; either version 2.1 of
>>> + * the License, or (at your option) any later version.
>>> + *
>>> + * This software is distributed in the hope that it will be useful,
>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>>> + * Lesser General Public License for more details.
>>> + *
>>> + * You should have received a copy of the GNU Lesser General Public
>>> + * License along with this software; if not, write to the Free
>>> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>>> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
>>> + */
>>> +package org.jboss.test.deployers.vfs.classpool.support;
>>> +
>>> +import java.io.ByteArrayInputStream;
>>> +import java.util.Properties;
>>> +import java.util.Set;
>>> +
>>> +import org.jboss.classloader.spi.filter.ClassFilter;
>>> +import org.jboss.classloader.spi.filter.RecursivePackageClassFilter;
>>> +import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
>>> +import org.jboss.classloading.spi.metadata.ExportAll;
>>> +import org.jboss.classloading.spi.version.Version;
>>> +import org.jboss.deployers.spi.DeploymentException;
>>> +import org.jboss.deployers.spi.deployer.DeploymentStages;
>>> +import 
>>> org.jboss.deployers.vfs.spi.deployer.AbstractSimpleVFSRealDeployer;
>>> +import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
>>> +import org.jboss.metadata.common.jboss.LoaderRepositoryConfigMetaData;
>>> +import org.jboss.metadata.common.jboss.LoaderRepositoryMetaData;
>>> +import org.jboss.metadata.web.jboss.JBossWebMetaData;
>>> +
>>> +/**
>>> + * MockWarClassLoaderDeployer.Based on WarClassLoaderDeployer.
>>> + *  + * @author Scott.Stark at jboss.org
>>> + * @author adrian at jboss.org
>>> + * @author ales.justin at jboss.org
>>> + * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
>>> + */
>>> +public class MockWarClassLoaderDeployer extends 
>>> AbstractSimpleVFSRealDeployer<JBossWebMetaData>
>>> +{
>>> +   /** The parent class loader first model flag */
>>> +   private boolean java2ClassLoadingCompliance = false;
>>> +
>>> +   /** Package names that should be ignored for class loading */
>>> +   private String filteredPackages;
>>> +
>>> +   /**
>>> +    * Create a new WarClassLoaderDeployer.
>>> +    */
>>> +   public MockWarClassLoaderDeployer()
>>> +   {
>>> +      super(JBossWebMetaData.class);
>>> +      setStage(DeploymentStages.POST_PARSE);
>>> +      addInput(ClassLoadingMetaData.class);
>>> +      setOutput(ClassLoadingMetaData.class);
>>> +   }
>>> +
>>> +   public boolean isJava2ClassLoadingCompliance()
>>> +   {
>>> +      return java2ClassLoadingCompliance;
>>> +   }
>>> +   +   public void setJava2ClassLoadingCompliance(boolean flag)
>>> +   {
>>> +      this.java2ClassLoadingCompliance = flag;
>>> +   }
>>> +
>>> +   public String getFilteredPackages()
>>> +   {
>>> +      return filteredPackages;
>>> +   }
>>> +   public void setFilteredPackages(String pkgs)
>>> +   {
>>> +      this.filteredPackages = pkgs;
>>> +   }
>>> +
>>> +   @Override
>>> +   public void deploy(VFSDeploymentUnit unit, JBossWebMetaData 
>>> metaData) throws DeploymentException
>>> +   {
>>> +      // Ignore if it already has classloading
>>> +      if (unit.isAttachmentPresent(ClassLoadingMetaData.class))
>>> +         return;
>>> +
>>> +      // The default domain name is the unit name
>>> +      String domainName = unit.getName();
>>> +      +      // The default classloading compliance is on the deployer
>>> +      boolean j2seClassLoadingCompliance = java2ClassLoadingCompliance;
>>> +      +      // Do we have a legacy classloading element?
>>> +      org.jboss.metadata.web.jboss.ClassLoadingMetaData webCLMD = 
>>> metaData.getClassLoading();
>>> +      if (webCLMD != null)
>>> +      {
>>> +         // Was the complince set?
>>> +         if (webCLMD.wasJava2ClassLoadingComplianceSet())
>>> +            j2seClassLoadingCompliance = 
>>> webCLMD.isJava2ClassLoadingCompliance();
>>> +
>>> +         // Does it have a loader repository
>>> +         LoaderRepositoryMetaData lrmd = webCLMD.getLoaderRepository();
>>> +         if (lrmd != null)
>>> +         {
>>> +            // Use the trimmed repository name as the domain
>>> +            String repositoryName = lrmd.getName();
>>> +            if (repositoryName != null)
>>> +            {
>>> +               repositoryName = repositoryName.trim();
>>> +               if (repositoryName != null)
>>> +               {
>>> +                  domainName = repositoryName;
>>> +                  +                  // If there was no compliance 
>>> set see if the loader repository has one
>>> +                  if (webCLMD.wasJava2ClassLoadingComplianceSet() == 
>>> false)
>>> +                  {
>>> +                     Set<LoaderRepositoryConfigMetaData> configs = 
>>> lrmd.getLoaderRepositoryConfig();
>>> +                     if (configs != null && configs.isEmpty() == false)
>>> +                     {
>>> +                        LoaderRepositoryConfigMetaData lrcmd = 
>>> configs.iterator().next();
>>> +
>>> +                        Properties props = new Properties();
>>> +                        String config = lrcmd.getConfig();
>>> +                        try
>>> +                        {
>>> +                           if (config != null)
>>> +                           {
>>> +                              ByteArrayInputStream bais = new 
>>> ByteArrayInputStream(config.getBytes());
>>> +                              props.load(bais);
>>> +                           }
>>> +                        }
>>> +                        catch (Exception e)
>>> +                        {
>>> +                           throw 
>>> DeploymentException.rethrowAsDeploymentException("Error parsing 
>>> repository config " + config, e);
>>> +                        }
>>> +                        String java2ParentDelegation = 
>>> props.getProperty("java2ParentDelegation");
>>> +                        if( java2ParentDelegation == null )
>>> +                        {
>>> +                           // Check for previous mis-spelled 
>>> property name
>>> +                           java2ParentDelegation = 
>>> props.getProperty("java2ParentDelegaton", "false");
>>> +                        }
>>> +                        j2seClassLoadingCompliance = 
>>> Boolean.valueOf(java2ParentDelegation);
>>> +                     }
>>> +                  }
>>> +               }
>>> +            }
>>> +         }
>>> +      }
>>> +
>>> +      // Create a classloading metadata
>>> +      // NOTE: Don't explicitly set the parentDomain otherwise it 
>>> will create a top level classloader
>>> +      //       for subdeployments rather than a classloader hanging 
>>> off the main deployment's classloader
>>> +      ClassLoadingMetaData classLoadingMetaData = new 
>>> ClassLoadingMetaData();
>>> +      classLoadingMetaData.setName(unit.getName());
>>> +      classLoadingMetaData.setDomain(domainName);
>>> +      classLoadingMetaData.setExportAll(ExportAll.NON_EMPTY);
>>> +      classLoadingMetaData.setImportAll(true);
>>> +      classLoadingMetaData.setVersion(Version.DEFAULT_VERSION);
>>> +      
>>> classLoadingMetaData.setJ2seClassLoadingCompliance(j2seClassLoadingCompliance); 
>>>
>>> +      ClassFilter filter = null;
>>> +      if (filteredPackages != null)
>>> +      {
>>> +         filter = 
>>> RecursivePackageClassFilter.createRecursivePackageClassFilterFromString(filteredPackages); 
>>>
>>> +         classLoadingMetaData.setExcluded(filter);
>>> +      }
>>> +      unit.addAttachment(ClassLoadingMetaData.class, 
>>> classLoadingMetaData);
>>> +   }
>>> +}
>>>
>>>
>>> Property changes on: 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/support/MockWarClassLoaderDeployer.java 
>>>
>>> ___________________________________________________________________
>>> Name: svn:keywords
>>>    + Author Date Id Revision
>>> Name: svn:eol-style
>>>    + native
>>>
>>> Modified: 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.java 
>>>
>>> ===================================================================
>>> --- 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.java    
>>> 2009-10-21 14:26:00 UTC (rev 95303)
>>> +++ 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.java    
>>> 2009-10-21 14:26:49 UTC (rev 95304)
>>> @@ -21,6 +21,8 @@
>>>   */
>>>  package org.jboss.test.deployers.vfs.classpool.test;
>>>
>>> +import junit.framework.Test;
>>> +
>>>  import org.jboss.test.deployers.vfs.classpool.support.crm.CrmFacade;
>>>  import org.jboss.test.deployers.vfs.classpool.support.ejb.MySLSBean;
>>>  import org.jboss.test.deployers.vfs.classpool.support.ext.External;
>>> @@ -32,8 +34,6 @@
>>>  import org.jboss.test.deployers.vfs.classpool.support.web.AnyServlet;
>>>  import org.jboss.virtual.AssembledDirectory;
>>>
>>> -import junit.framework.Test;
>>> -
>>>  /**
>>>   * Test case for ClassPool.
>>>   * @@ -94,7 +94,6 @@
>>>     public void testWarInEar() throws Exception     {
>>>        AssembledDirectory directory = createWarInEar();
>>> -      // TODO - make proper .war CL check --> MockWarCLDeployer
>>>        assertClassPool(directory, AnyServlet.class);
>>>     }
>>>
>>> Modified: 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.xml 
>>>
>>> ===================================================================
>>> --- 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.xml    
>>> 2009-10-21 14:26:00 UTC (rev 95303)
>>> +++ 
>>> projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/classpool/test/ClassPoolTestCase.xml    
>>> 2009-10-21 14:26:49 UTC (rev 95304)
>>> @@ -2,6 +2,7 @@
>>>
>>> <bean name="EarStructure" 
>>> class="org.jboss.test.deployers.vfs.structure.ear.support.MockEarStructureDeployer"/> 
>>>
>>> <bean name="WarStructure" 
>>> class="org.jboss.test.deployers.vfs.structure.war.support.MockWarStructureDeployer"/> 
>>>
>>> + <bean name="WarClassLoader" 
>>> class="org.jboss.test.deployers.vfs.classpool.support.MockWarClassLoaderDeployer"/> 
>>>
>>>
>>> <bean name="ClassLoaderScopingPolicy" 
>>> class="org.jboss.classpool.plugins.as5.VFSClassLoaderDomainRegistry"/>
>>>
>>>
>>>
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> jboss-cvs-commits mailing list
>>> jboss-cvs-commits at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jboss-cvs-commits
>>>
>>>
>>> End of jboss-cvs-commits Digest, Vol 40, Issue 522
>>> **************************************************
>>>
> 



More information about the jboss-cvs-commits mailing list