/**
*
*/
package org.jboss.test.faces.staging;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jboss.test.faces.TestException;
/**
* This class represents file from classpath in the virtual web application
* content.
*
* @author asmirnov
*
*/
public class ClasspathServerResource extends AbstractServerResource {
/**
*
*/
private final String classpath;
private volatile URL url = null;
private static final Logger log = ServerLogger.RESOURCE.getLogger();
/**
* @param name
* @param classpath
*/
public ClasspathServerResource(String classpath) {
this.classpath = classpath;
}
/*
* (non-Javadoc)
*
* @see org.jboss.test.faces.staging.ServerResource#getURL()
*/
public URL getURL() {
if (url == null) {
// JDK-5 singleton-like synchronization.
// @see http://jeremymanson.blogspot.com/2008/05/double-checked-locking.html
synchronized (this) {
if(log.isLoggable(Level.FINEST)){
log.finest("get classpath resource from "+this.classpath);
}
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
if (null == classLoader) {
classLoader = this.getClass().getClassLoader();
}
url = classLoader.getResource(classpath);
if(null == url){
throw new TestException("Virtual server resource can't be loaded from "+classpath);
}
}
}
return url;
}
}