Class PropertyConglomerate


  • class PropertyConglomerate
    extends java.lang.Object
    Stores properties in a congolmerate with complete transactional support.

    The PropertyConglomerate contains one row with 2 columns per property. Column 0 is the UTF key, and column 1 is the data.

    The property conglomerate manages the storage of database properties and thier defaults. Each property is stored as a row in the PropertyConglomerate

    1. Column 0 is the UTF key,
    2. Column 1 is the data.
    All the property defaults are stored in a single row of the Property Conglomerate:
    1. Column 0 is the UTF key "derby.defaultPropertyName".
    2. Column 1 is a FormatableProperties object with one row per default property.

    In general a propery default defines it value if the property itself is not defined.

    Because the properties conglomerate is stored in a conglomerate the information it contains is not available before the raw store runs recovery. To make a small number of properties (listed in servicePropertyList) available during early boot, this copies them to services.properties.

    • Field Detail

      • propertiesConglomId

        protected long propertiesConglomId
      • serviceProperties

        protected java.util.Properties serviceProperties
      • cachedSet

        private java.util.Dictionary<java.lang.String,​java.lang.Object> cachedSet
    • Method Detail

      • makeNewTemplate

        private DataValueDescriptor[] makeNewTemplate​(java.lang.String key,
                                                      java.io.Serializable value)
        Create a new PropertyConglomerate row, with values in it.
      • makeNewTemplate

        private DataValueDescriptor[] makeNewTemplate()
        Create a new empty PropertyConglomerate row, to fetch values into.
      • openScan

        private ScanController openScan​(TransactionController tc,
                                        java.lang.String key,
                                        int open_mode)
                                 throws StandardException
        Open a scan on the properties conglomerate looking for "key".

        Open a scan on the properties conglomerate qualified to find the row with value key in column 0. Both column 0 and column 1 are included in the scan list.

        Parameters:
        tc - The transaction to do the Conglomerate work under.
        key - The "key" of the property that is being requested.
        open_mode - Whether we are setting or getting the property.
        Returns:
        an open ScanController on the PropertyConglomerate.
        Throws:
        StandardException - Standard exception policy.
      • saveServiceProperty

        private boolean saveServiceProperty​(java.lang.String key,
                                            java.io.Serializable value)
      • map

        private java.io.Serializable map​(java.lang.String key,
                                         java.io.Serializable value,
                                         java.util.Dictionary set)
                                  throws StandardException
        Call the property set callbacks to map a proposed property value to a value to save.

        The caller must run this in a block synchronized on this to serialize validations with changes to the set of property callbacks

        Throws:
        StandardException
      • validate

        private void validate​(java.lang.String key,
                              java.io.Serializable value,
                              java.util.Dictionary set)
                       throws StandardException
        Call the property set callbacks to validate a property change against the property set provided.

        The caller must run this in a block synchronized on this to serialize validations with changes to the set of property callbacks

        Throws:
        StandardException
      • setProperty

        void setProperty​(TransactionController tc,
                         java.lang.String key,
                         java.io.Serializable value,
                         boolean dbOnlyProperty)
                  throws StandardException
        Sets the Serializable object associated with a property key.

        This implementation turns the setProperty into an insert into the PropertyConglomerate conglomerate.

        See the discussion of getProperty().

        The value stored may be a Formatable object or a Serializable object whose class name starts with java.*. This stops arbitary objects being stored in the database by class name, which will cause problems in obfuscated/non-obfuscated systems.

        Parameters:
        tc - The transaction to do the Conglomerate work under.
        key - The key used to lookup this property.
        value - The value to be associated with this key. If null, delete the property from the properties list.
        Throws:
        StandardException - Standard exception policy.
      • getProperty

        java.io.Serializable getProperty​(TransactionController tc,
                                         java.lang.String key)
                                  throws StandardException
        Gets the de-serialized object associated with a property key.

        The Store provides a transaction protected list of database properties. Higher levels of the system can store and retrieve these properties once Recovery has finished. Each property is a serializable object and is stored/retrieved using a String key.

        In this implementation a lookup is done on the PropertyConglomerate conglomerate, using a scan with "key" as the qualifier.

        Parameters:
        tc - The transaction to do the Conglomerate work under.
        key - The "key" of the property that is being requested.
        Returns:
        object The object associated with property key. n ull means no such key-value pair.
        Throws:
        StandardException - Standard exception policy.
      • copyValues

        private <K,​V> java.util.Dictionary<? super K,​? super V> copyValues​(java.util.Dictionary<? super K,​? super V> to,
                                                                                       java.util.Dictionary<K,​V> from,
                                                                                       boolean stringsOnly)
      • resetCache

        void resetCache()
      • findServiceModule

        private static java.lang.Object findServiceModule​(java.lang.Object serviceModule,
                                                          java.lang.String factoryInterface)
                                                   throws StandardException
        Privileged startup. Must be private so that user code can't call this entry point.
        Throws:
        StandardException