IcedTea-Web
NetX

net.sourceforge.jnlp.runtime
Class JNLPClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by java.security.SecureClassLoader
          extended by java.net.URLClassLoader
              extended by net.sourceforge.jnlp.runtime.JNLPClassLoader

public class JNLPClassLoader
extends java.net.URLClassLoader

Classloader that takes it's resources from a JNLP file. If the JNLP file defines extensions, separate classloaders for these will be created automatically. Classes are loaded with the security context when the classloader was created.


Nested Class Summary
static class JNLPClassLoader.CodeBaseClassLoader
           
 
Constructor Summary
protected JNLPClassLoader(JNLPFile file, UpdatePolicy policy)
          Create a new JNLPClassLoader from the specified file.
 
Method Summary
protected  void activateJars(java.util.List<JARDesc> jars)
          Ensures that the list of jars have all been transferred, and makes them available to the classloader.
protected  void activateNative(JARDesc jar)
          Search for and enable any native code contained in a JAR by copying the native files into the filesystem.
protected  void addAvailable()
          Adds whatever resources have already been downloaded in the background.
protected  void addNativeDirectory(java.io.File nativeDirectory)
          Adds the File to the search path of this JNLPClassLoader when trying to find a native library
protected  JNLPClassLoader addNextResource()
          Adds the next unused resource to the classloader.
protected  void addPermission(java.security.Permission p)
           
 void enableCodeBase()
          Add applet's codebase URL.
protected  void fillInPartJars(java.util.List<JARDesc> jars)
          Adds to the specified list of JARS any other JARs that need to be loaded at the same time as the JARs specified (ie, are in the same part).
protected  java.lang.Class findClass(java.lang.String name)
          Find the class in this loader or any of its extension loaders.
protected  java.lang.String findLibrary(java.lang.String lib)
          Return the absolute path to the native library.
protected  java.lang.String findLibraryExt(java.lang.String lib)
          Try to find the library path from another peer classloader.
protected  java.lang.Class findLoadedClassAll(java.lang.String name)
          Find the loaded class in this loader or any of its extension loaders.
 java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
          Finds the resource in this, the parent, or the extension class loaders.
 ApplicationInstance getApplication()
          Returns the JNLP app for this classloader
protected  SecurityDesc getCodeSourceSecurity(java.net.URL source)
          Returns the security descriptor for given code source URL
 java.lang.String getExtensionHREF()
          Deprecated.  
 java.lang.String getExtensionName()
          Deprecated.  
static JNLPClassLoader getInstance(JNLPFile file, UpdatePolicy policy)
          Returns a JNLP classloader for the specified JNLP file.
static JNLPClassLoader getInstance(java.net.URL location, java.lang.String uniqueKey, Version version, UpdatePolicy policy)
          Returns a JNLP classloader for the JNLP file at the specified location.
 JNLPFile getJNLPFile()
          Returns the JNLP file the classloader was created from.
protected  java.io.File getNativeDir()
          Return the base directory to store native code files in.
protected  java.util.List<java.io.File> getNativeDirectories()
          Returns a list of all directories in the search path of the current classloader when it tires to find a native library.
protected  java.security.PermissionCollection getPermissions(java.security.CodeSource cs)
          Returns the permissions for the CodeSource.
 java.net.URL getResource(java.lang.String name)
          Finds the resource in this, the parent, or the extension class loaders.
protected  SecurityDesc getSecurity()
           
 boolean getSigning()
           
 java.lang.Class<?> loadClass(java.lang.String name)
          Find a JAR in the shared 'extension' classloaders, this classloader, or one of the classloaders for the JNLP file's extensions.
 boolean resourceAvailableLocally(java.lang.String s)
          Returns if the specified resource is available locally from a cached jar
 void setApplication(ApplicationInstance app)
          Sets the JNLP app this group is for; can only be called once.
 
Methods inherited from class java.net.URLClassLoader
addURL, definePackage, findResource, getURLs, newInstance, newInstance
 
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JNLPClassLoader

protected JNLPClassLoader(JNLPFile file,
                          UpdatePolicy policy)
                   throws LaunchException
Create a new JNLPClassLoader from the specified file.

Parameters:
file - the JNLP file
Throws:
LaunchException
Method Detail

getInstance

public static JNLPClassLoader getInstance(JNLPFile file,
                                          UpdatePolicy policy)
                                   throws LaunchException
Returns a JNLP classloader for the specified JNLP file.

Parameters:
file - the file to load classes for
policy - the update policy to use when downloading resources
Throws:
LaunchException

getInstance

public static JNLPClassLoader getInstance(java.net.URL location,
                                          java.lang.String uniqueKey,
                                          Version version,
                                          UpdatePolicy policy)
                                   throws java.io.IOException,
                                          ParseException,
                                          LaunchException
Returns a JNLP classloader for the JNLP file at the specified location.

Parameters:
location - the file's location
version - the file's version
policy - the update policy to use when downloading resources
Throws:
java.io.IOException
ParseException
LaunchException

enableCodeBase

public void enableCodeBase()
Add applet's codebase URL. This allows compatibility with applets that load resources from their codebase instead of through JARs, but can slow down resource loading. Resources loaded from the codebase are not cached.


setApplication

public void setApplication(ApplicationInstance app)
Sets the JNLP app this group is for; can only be called once.


getApplication

public ApplicationInstance getApplication()
Returns the JNLP app for this classloader


getJNLPFile

public JNLPFile getJNLPFile()
Returns the JNLP file the classloader was created from.


getPermissions

protected java.security.PermissionCollection getPermissions(java.security.CodeSource cs)
Returns the permissions for the CodeSource.

Overrides:
getPermissions in class java.net.URLClassLoader

addPermission

protected void addPermission(java.security.Permission p)

fillInPartJars

protected void fillInPartJars(java.util.List<JARDesc> jars)
Adds to the specified list of JARS any other JARs that need to be loaded at the same time as the JARs specified (ie, are in the same part).


activateJars

protected void activateJars(java.util.List<JARDesc> jars)
Ensures that the list of jars have all been transferred, and makes them available to the classloader. If a jar contains native code, the libraries will be extracted and placed in the path.

Parameters:
jars - the list of jars to load

activateNative

protected void activateNative(JARDesc jar)
Search for and enable any native code contained in a JAR by copying the native files into the filesystem. Called in the security context of the classloader.


getNativeDir

protected java.io.File getNativeDir()
Return the base directory to store native code files in. This method does not need to return the same directory across calls.


addNativeDirectory

protected void addNativeDirectory(java.io.File nativeDirectory)
Adds the File to the search path of this JNLPClassLoader when trying to find a native library


getNativeDirectories

protected java.util.List<java.io.File> getNativeDirectories()
Returns a list of all directories in the search path of the current classloader when it tires to find a native library.

Returns:
a list of directories in the search path for native libraries

findLibrary

protected java.lang.String findLibrary(java.lang.String lib)
Return the absolute path to the native library.

Overrides:
findLibrary in class java.lang.ClassLoader

findLibraryExt

protected java.lang.String findLibraryExt(java.lang.String lib)
Try to find the library path from another peer classloader.


findLoadedClassAll

protected java.lang.Class findLoadedClassAll(java.lang.String name)
Find the loaded class in this loader or any of its extension loaders.


loadClass

public java.lang.Class<?> loadClass(java.lang.String name)
                             throws java.lang.ClassNotFoundException
Find a JAR in the shared 'extension' classloaders, this classloader, or one of the classloaders for the JNLP file's extensions.

Overrides:
loadClass in class java.lang.ClassLoader
Throws:
java.lang.ClassNotFoundException

findClass

protected java.lang.Class findClass(java.lang.String name)
                             throws java.lang.ClassNotFoundException
Find the class in this loader or any of its extension loaders.

Overrides:
findClass in class java.net.URLClassLoader
Throws:
java.lang.ClassNotFoundException

getResource

public java.net.URL getResource(java.lang.String name)
Finds the resource in this, the parent, or the extension class loaders.

Overrides:
getResource in class java.lang.ClassLoader

findResources

public java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
                                                  throws java.io.IOException
Finds the resource in this, the parent, or the extension class loaders.

Overrides:
findResources in class java.net.URLClassLoader
Throws:
java.io.IOException

resourceAvailableLocally

public boolean resourceAvailableLocally(java.lang.String s)
Returns if the specified resource is available locally from a cached jar

Parameters:
s - The name of the resource
Returns:
Whether or not the resource is available locally

addAvailable

protected void addAvailable()
Adds whatever resources have already been downloaded in the background.


addNextResource

protected JNLPClassLoader addNextResource()
Adds the next unused resource to the classloader. That resource and all those in the same part will be downloaded and added to the classloader before returning. If there are no more resources to add, the method returns immediately.

Returns:
the classloader that resources were added to, or null

getExtensionName

@Deprecated
public java.lang.String getExtensionName()
Deprecated. 


getExtensionHREF

@Deprecated
public java.lang.String getExtensionHREF()
Deprecated. 


getSigning

public boolean getSigning()

getSecurity

protected SecurityDesc getSecurity()

getCodeSourceSecurity

protected SecurityDesc getCodeSourceSecurity(java.net.URL source)
Returns the security descriptor for given code source URL

Parameters:
source - the origin (remote) url of the code
Returns:
The SecurityDescriptor for that source

IcedTea-Web
NetX

Submit a bug or feature