Package org.jboss.aop.asintegration.jboss4

Source Code of org.jboss.aop.asintegration.jboss4.RepositoryClassLoaderScopingPolicy

/*     */ package org.jboss.aop.asintegration.jboss4;
/*     */
/*     */ import java.util.Map;
/*     */ import java.util.WeakHashMap;
/*     */ import org.jboss.aop.AspectManager;
/*     */ import org.jboss.aop.Domain;
/*     */ import org.jboss.aop.classpool.AOPClassLoaderScopingPolicy;
/*     */ import org.jboss.aop.classpool.AOPClassPoolRepository;
/*     */ import org.jboss.aop.domain.DomainInitializer;
/*     */ import org.jboss.aop.domain.DomainInitializerCallback;
/*     */ import org.jboss.aop.domain.DomainInitializerCallbackHandler;
/*     */ import org.jboss.aop.domain.ScopedRepositoryClassLoaderDomain;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
/*     */ import org.jboss.mx.loading.RepositoryClassLoader;
/*     */
/*     */ public class RepositoryClassLoaderScopingPolicy
/*     */   implements AOPClassLoaderScopingPolicy, DomainInitializer
/*     */ {
/*  46 */   Logger log = Logger.getLogger(RepositoryClassLoaderScopingPolicy.class);
/*     */
/*  49 */   private Map<Object, Domain> scopedClassLoaderDomains = new WeakHashMap();
/*     */
/*     */   public Domain initializeDomain(DomainInitializerCallbackHandler handler)
/*     */   {
/*  54 */     DomainInitializerCallback callback = new DomainInitializerCallback(ClassLoader.class);
/*  55 */     DomainInitializerCallback[] callbacks = { callback };
/*  56 */     handler.handle(callbacks);
/*     */
/*  58 */     ClassLoader loader = (ClassLoader)callback.getValue();
/*  59 */     Domain domain = getDomain(loader, AspectManager.getTopLevelAspectManager());
/*     */
/*  61 */     AspectManager.instance().registerClassLoader(loader);
/*     */
/*  63 */     return domain;
/*     */   }
/*     */
/*     */   public synchronized Domain getDomain(ClassLoader classLoader, AspectManager parent)
/*     */   {
/*  68 */     ClassLoader scopedClassLoader = ifScopedDeploymentGetScopedParentUclForCL(classLoader);
/*  69 */     if (scopedClassLoader != null)
/*     */     {
/*  71 */       Domain scopedManager = null;
/*  72 */       synchronized (AOPClassPoolRepository.getInstance().getRegisteredCLs())
/*     */       {
/*  74 */         Object loaderRepository = getLoaderRepository(classLoader);
/*  75 */         scopedManager = (Domain)this.scopedClassLoaderDomains.get(loaderRepository);
/*     */
/*  78 */         if ((scopedManager != null) && (!scopedManager.isValid()))
/*     */         {
/*  80 */           this.scopedClassLoaderDomains.remove(loaderRepository);
/*  81 */           scopedManager = null;
/*     */         }
/*     */
/*  84 */         if (scopedManager == null)
/*     */         {
/*  86 */           scopedManager = getScopedClassLoaderDomain(scopedClassLoader, parent);
/*  87 */           this.log.debug("Created domain " + scopedManager + " for scoped deployment on: " + classLoader + "; identifying scoped ucl: " + scopedClassLoader);
/*     */
/*  89 */           scopedManager.setInheritsBindings(true);
/*  90 */           scopedManager.setInheritsDeclarations(true);
/*     */
/*  92 */           this.scopedClassLoaderDomains.put(loaderRepository, scopedManager);
/*     */         }
/*  94 */         return scopedManager;
/*     */       }
/*     */     }
/*  97 */     return null;
/*     */   }
/*     */
/*     */   public Domain getTopLevelDomain(AspectManager parent)
/*     */   {
/* 102 */     ClassLoader classLoader = getTopLevelJBossClassLoader();
/* 103 */     return getDomain(classLoader, parent);
/*     */   }
/*     */
/*     */   private ClassLoader ifScopedDeploymentGetScopedParentUclForCL(ClassLoader loader)
/*     */   {
/* 110 */     ClassLoader parent = loader;
/*     */
/* 112 */     while (parent != null)
/*     */     {
/* 114 */       if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(parent))
/*     */       {
/* 116 */         return parent;
/*     */       }
/* 118 */       if ((parent instanceof RepositoryClassLoader))
/*     */       {
/* 121 */         return null;
/*     */       }
/* 123 */       parent = parent.getParent();
/*     */     }
/* 125 */     return null;
/*     */   }
/*     */
/*     */   private ClassLoader getTopLevelJBossClassLoader()
/*     */   {
/* 130 */     ClassLoader loader = Thread.currentThread().getContextClassLoader();
/* 131 */     RepositoryClassLoader topRcl = null;
/* 132 */     while (loader != null)
/*     */     {
/* 134 */       if ((loader instanceof RepositoryClassLoader))
/*     */       {
/* 136 */         topRcl = (RepositoryClassLoader)loader;
/*     */       }
/* 138 */       loader = loader.getParent();
/*     */     }
/* 140 */     return topRcl;
/*     */   }
/*     */
/*     */   private Domain getScopedClassLoaderDomain(ClassLoader cl, AspectManager parent)
/*     */   {
/* 145 */     boolean parentDelegation = true;
/* 146 */     if ((cl instanceof RepositoryClassLoader))
/*     */     {
/* 148 */       HeirarchicalLoaderRepository3 repository = (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
/* 149 */       parentDelegation = repository.getUseParentFirst();
/*     */     }
/* 151 */     String name = String.valueOf(System.identityHashCode(cl));
/* 152 */     return new ScopedRepositoryClassLoaderDomain(cl, name, parentDelegation, parent, false);
/*     */   }
/*     */
/*     */   private Object getLoaderRepository(ClassLoader loader)
/*     */   {
/* 157 */     ClassLoader cl = ifScopedDeploymentGetScopedParentUclForCL(loader);
/* 158 */     if (cl != null)
/*     */     {
/* 160 */       return ((RepositoryClassLoader)cl).getLoaderRepository();
/*     */     }
/* 162 */     return null;
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.aop.asintegration.jboss4.RepositoryClassLoaderScopingPolicy
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.aop.asintegration.jboss4.RepositoryClassLoaderScopingPolicy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.