Class BundleCache


  • public class BundleCache
    extends java.lang.Object

    This class, combined with BundleArchive, and concrete BundleRevision subclasses, implement the Felix bundle cache. It is possible to configure the default behavior of this class by passing properties into Felix' constructor. The configuration properties for this class are (properties starting with "felix" are specific to Felix, while those starting with "org.osgi" are standard OSGi properties):

    • felix.cache.filelimit - The integer value of this string sets an upper limit on how many files the cache will open. The default value is zero, which means there is no limit.
    • org.osgi.framework.storage - Sets the directory to use as the bundle cache; by default bundle cache directory is felix-cache in the current working directory. The value should be a valid directory name. The directory name can be either absolute or relative. Relative directory names are relative to the current working directory. The specified directory will be created if it does not exist.
    • felix.cache.rootdir - Sets the root directory to use to calculate the bundle cache directory for relative directory names. If org.osgi.framework.storage is set to a relative name, by default it is relative to the current working directory. If this property is set, then it will be calculated as being relative to the specified root directory.
    • felix.cache.locking - Enables or disables bundle cache locking, which is used to prevent concurrent access to the bundle cache. This is enabled by default, but on older/smaller JVMs file channel locking is not available; set this property to false to disable it.
    • felix.cache.bufsize - Sets the buffer size to be used by the cache; the default value is 4096. The integer value of this string provides control over the size of the internal buffer of the disk cache for performance reasons.
    • For specific information on how to configure the Felix framework, refer to the Felix framework usage documentation.

    See Also:
    BundleArchive
    • Field Detail

      • CACHE_BUFSIZE_PROP

        public static final java.lang.String CACHE_BUFSIZE_PROP
        See Also:
        Constant Field Values
      • CACHE_ROOTDIR_PROP

        public static final java.lang.String CACHE_ROOTDIR_PROP
        See Also:
        Constant Field Values
      • CACHE_LOCKING_PROP

        public static final java.lang.String CACHE_LOCKING_PROP
        See Also:
        Constant Field Values
      • CACHE_FILELIMIT_PROP

        public static final java.lang.String CACHE_FILELIMIT_PROP
        See Also:
        Constant Field Values
      • CACHE_SINGLEBUNDLEFILE_PROP

        public static final java.lang.String CACHE_SINGLEBUNDLEFILE_PROP
        See Also:
        Constant Field Values
      • BUFSIZE

        protected static transient int BUFSIZE
      • CACHE_DIR_NAME

        private static final transient java.lang.String CACHE_DIR_NAME
        See Also:
        Constant Field Values
      • CACHE_ROOTDIR_DEFAULT

        private static final transient java.lang.String CACHE_ROOTDIR_DEFAULT
        See Also:
        Constant Field Values
      • CACHE_LOCK_NAME

        private static final transient java.lang.String CACHE_LOCK_NAME
        See Also:
        Constant Field Values
      • BUNDLE_DIR_PREFIX

        static final transient java.lang.String BUNDLE_DIR_PREFIX
        See Also:
        Constant Field Values
      • m_secureAction

        private static final SecureAction m_secureAction
      • m_logger

        private final Logger m_logger
      • m_configMap

        private final java.util.Map m_configMap
      • m_lock

        private final java.lang.Object m_lock
    • Constructor Detail

      • BundleCache

        public BundleCache​(Logger logger,
                           java.util.Map configMap)
                    throws java.lang.Exception
        Throws:
        java.lang.Exception
    • Method Detail

      • release

        public void release()
      • delete

        public void delete()
                    throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getArchives

        public BundleArchive[] getArchives()
                                    throws java.lang.Exception
        Throws:
        java.lang.Exception
      • create

        public BundleArchive create​(long id,
                                    int startLevel,
                                    java.lang.String location,
                                    java.io.InputStream is)
                             throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getSystemBundleDataFile

        public java.io.File getSystemBundleDataFile​(java.lang.String fileName)
                                             throws java.lang.Exception
        Provides the system bundle access to its private storage area; this special case is necessary since the system bundle is not really a bundle and therefore must be treated in a special way.
        Parameters:
        fileName - the name of the file in the system bundle's private area.
        Returns:
        a File object corresponding to the specified file name.
        Throws:
        java.lang.Exception - if any error occurs.
      • copyStreamToFile

        static void copyStreamToFile​(java.io.InputStream is,
                                     java.io.File outputFile)
                              throws java.io.IOException
        This method copies an input stream to the specified file.
        Parameters:
        is - the input stream to copy.
        outputFile - the file to which the input stream should be copied.
        Throws:
        java.io.IOException
      • deleteDirectoryTree

        static boolean deleteDirectoryTree​(java.io.File target)
      • determineCacheDir

        private static java.io.File determineCacheDir​(java.util.Map configMap)
      • deleteDirectoryTreeRecursive

        private static boolean deleteDirectoryTreeRecursive​(java.io.File target)