Package org.jboss.seam.deployment

Source Code of org.jboss.seam.deployment.GroovyHotDeploymentStrategy

package org.jboss.seam.deployment;

import groovy.lang.GroovyClassLoader;

import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.codehaus.groovy.control.CompilerConfiguration;


/**
* A deployment strategy for hot deploying Seam groovy components
*
* @author Pete Muir
*
*/
public class GroovyHotDeploymentStrategy extends HotDeploymentStrategy
{
  
   private static final String DEFAULT_SCRIPT_EXTENSION = new CompilerConfiguration().getDefaultScriptExtension();
  
   private ClassLoader classLoader;
  
   private GroovyDeploymentHandler groovyDeploymentHandler;
  
   /**
    * @param classLoader The parent classloader of the hot deployment classloader
    * @param hotDeployDirectory The directory in which hot deployable java and
    * groovy Seam components are placed
    *
    */
   public GroovyHotDeploymentStrategy(ClassLoader classLoader, File hotDeployDirectory, boolean enabled)
   {
      super(classLoader, hotDeployDirectory, enabled);
      if (enabled)
      {
         groovyDeploymentHandler = new GroovyDeploymentHandler(DEFAULT_SCRIPT_EXTENSION);
         getDeploymentHandlers().put(GroovyDeploymentHandler.NAME, groovyDeploymentHandler);
      }
   }
  
   @Override
   public ClassLoader getClassLoader()
   {
      if (classLoader == null && super.getClassLoader() != null)
      {
         this.classLoader = new GroovyClassLoader(super.getClassLoader());
      }
      return classLoader;
   }

   @Override
   public boolean isFromHotDeployClassLoader(Class componentClass)
   {
      //loaded by groovy or java
      if (getClassLoader() == null)
      {
         return false;
      }
      else
      {
         if (super.isFromHotDeployClassLoader(componentClass)) return true; //Java
         ClassLoader classClassLoader = componentClass.getClassLoader().getParent(); //Groovy use an Inner Delegate CL
         return classClassLoader == getClassLoader() || classClassLoader == getClassLoader().getParent();
      }
   }
  
   @Override
   public Set<ClassDescriptor> getScannedComponentClasses()
   {
      Set<ClassDescriptor> set = new HashSet<ClassDescriptor>();
      set.addAll(super.getScannedComponentClasses());
      set.addAll(groovyDeploymentHandler.getClasses());
      return Collections.unmodifiableSet(set);
   }
  
}
TOP

Related Classes of org.jboss.seam.deployment.GroovyHotDeploymentStrategy

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.