## Class RJavaClassLoader

- java.lang.Object
- - java.lang.ClassLoader
  - - java.security.SecureClassLoader
    - - java.net.URLClassLoader
      - - RJavaClassLoader

All Implemented Interfaces:
  `java.io.Closeable`, `java.lang.AutoCloseable`

    public class RJavaClassLoader
    extends java.net.URLClassLoader

Class loader used internally by rJava The class manages the class paths and the native libraries (jri, ...)

### Field Summary

Fields
`static RJavaClassLoader` `primaryLoader` singleton
`boolean` `useSystem` Should the system class loader be used to resolve classes as well as this class loader
`static boolean` `verbose` Print debug messages if is set to `true`

### Constructor Summary

Constructors
`RJavaClassLoader​(java.lang.String path, java.lang.String libpath)` Constructor.
`RJavaClassLoader​(java.lang.String path, java.lang.String libpath, RJavaClassLoader parent)` Constructor.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `addClassPath​(java.lang.String cp)` adds an entry to the class path
`void` `addClassPath​(java.lang.String[] cp)` adds several entries to the class path
`void` `addRLibrary​(java.lang.String name, java.lang.String path)` add a library to path mapping for a native library
`void` `bootClass​(java.lang.String cName, java.lang.String mName, java.lang.String[] args)` Boots the specified method of the specified class
`protected java.lang.Class` `findClass​(java.lang.String name)`
`protected java.lang.String` `findLibrary​(java.lang.String name)`
`java.net.URL` `findResource​(java.lang.String name)`
`java.lang.String[]` `getClassPath()`
`static RJavaClassLoader` `getPrimaryLoader()` Returns the singleton instance of RJavaClassLoader
`static void` `main​(java.lang.String[] args)` main method
`static void` `setDebug​(int level)` Set the debug level.
`static byte[]` `toByte​(java.lang.Object object)` Serialize an object to a byte array.
`java.lang.Object` `toObject​(byte[] byteArray)` Deserialize an object from a byte array.
`static java.lang.Object` `toObjectPL​(byte[] byteArray)` converts the byte array into an Object using the primary RJavaClassLoader
`static java.lang.String` `u2w​(java.lang.String fn)` Utility to convert paths for windows.

### Methods inherited from class java.net.URLClassLoader

`addURL, close, definePackage, findResources, getPermissions, getResourceAsStream, 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, findClass, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### primaryLoader

    public static RJavaClassLoader primaryLoader

singleton

#### verbose

    public static boolean verbose

Print debug messages if is set to `true`

#### useSystem

    public boolean useSystem

Should the system class loader be used to resolve classes as well as this class loader

### Constructor Detail

#### RJavaClassLoader

    public RJavaClassLoader​(java.lang.String path,
                            java.lang.String libpath)

Constructor. The first time an RJavaClassLoader is created, it is cached as the primary loader.

Parameters:
  `path` - path of the rJava package
  `libpath` - lib sub directory of the rJava package

#### RJavaClassLoader

    public RJavaClassLoader​(java.lang.String path,
                            java.lang.String libpath,
                            RJavaClassLoader parent)

Constructor. The first time an RJavaClassLoader is created, it is cached as the primary loader.

Parameters:
  `path` - path of the rJava package
  `libpath` - lib sub directory of the rJava package
  `parent` - parent loader if we should fall back upstream or NULL

### Method Detail

#### getPrimaryLoader

    public static RJavaClassLoader getPrimaryLoader()

Returns the singleton instance of RJavaClassLoader

#### findClass

    protected java.lang.Class findClass​(java.lang.String name)
                                 throws java.lang.ClassNotFoundException

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

#### findResource

    public java.net.URL findResource​(java.lang.String name)

Overrides:
  `findResource` in class `java.net.URLClassLoader`

#### addRLibrary

    public void addRLibrary​(java.lang.String name,
                            java.lang.String path)

add a library to path mapping for a native library

#### addClassPath

    public void addClassPath​(java.lang.String cp)

adds an entry to the class path

#### addClassPath

    public void addClassPath​(java.lang.String[] cp)

adds several entries to the class path

#### getClassPath

    public java.lang.String[] getClassPath()

Returns:
  the array of class paths used by this class loader

#### findLibrary

    protected java.lang.String findLibrary​(java.lang.String name)

Overrides:
  `findLibrary` in class `java.lang.ClassLoader`

#### bootClass

    public void bootClass​(java.lang.String cName,
                          java.lang.String mName,
                          java.lang.String[] args)
                   throws java.lang.IllegalAccessException,
                          java.lang.reflect.InvocationTargetException,
                          java.lang.NoSuchMethodException,
                          java.lang.ClassNotFoundException

Boots the specified method of the specified class

Parameters:
  `cName` - class to boot
  `mName` - method to boot (typically main). The method must take a String[] as parameter
  `args` - arguments to pass to the method
Throws:
  `java.lang.IllegalAccessException`
  `java.lang.reflect.InvocationTargetException`
  `java.lang.NoSuchMethodException`
  `java.lang.ClassNotFoundException`

#### setDebug

    public static void setDebug​(int level)

Set the debug level. At the moment, there is only verbose (level > 0) or quiet

Parameters:
  `level` - debug level. verbose (>0), quiet otherwise

#### u2w

    public static java.lang.String u2w​(java.lang.String fn)

Utility to convert paths for windows. Converts / to the path separator in use

Parameters:
  `fn` - file name

#### main

    public static void main​(java.lang.String[] args)

main method

This uses the system properties:

- `rjava.path` : path of the rJava package
- `rjava.lib` : lib sub directory of the rJava package
- `main.class` : main class to "boot", assumes Main if not specified
- `rjava.class.path` : set of paths to populate the initiate the class path

and boots the "main" method of the specified `main.class`, passing the args down to the booted class

This makes sure R and rJava are known by the class loader

#### toByte

    public static byte[] toByte​(java.lang.Object object)
                         throws java.lang.Exception

Serialize an object to a byte array. (code by CB)

Parameters:
  `object` - object to serialize
Returns:
  byte array that represents the object
Throws:
  `java.lang.Exception`

#### toObject

    public java.lang.Object toObject​(byte[] byteArray)
                              throws java.lang.Exception

Deserialize an object from a byte array. (code by CB)

Parameters:
  `byteArray` -
Returns:
  the object that is represented by the byte array
Throws:
  `java.lang.Exception`

#### toObjectPL

    public static java.lang.Object toObjectPL​(byte[] byteArray)
                                       throws java.lang.Exception

converts the byte array into an Object using the primary RJavaClassLoader

Throws:
  `java.lang.Exception`