org.apache.derby.impl.store.access
Class PropertyConglomerate

java.lang.Object
  extended byorg.apache.derby.impl.store.access.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 Summary
private  CacheLock cachedLock
           
private  java.util.Dictionary cachedSet
           
private  LockFactory lf
           
private  PropertyFactory pf
           
protected  long propertiesConglomId
           
protected  java.util.Properties serviceProperties
           
 
Constructor Summary
(package private) PropertyConglomerate(TransactionController tc, boolean create, java.util.Properties serviceProperties, PropertyFactory pf)
           
 
Method Summary
private  boolean bootPasswordChange(TransactionController tc, java.lang.String key, java.io.Serializable value)
           
private  java.util.Dictionary copyValues(java.util.Dictionary to, java.util.Dictionary from, boolean stringsOnly)
           
private  java.util.Dictionary getCachedDbProperties(TransactionController tc)
           
private  java.io.Serializable getCachedProperty(TransactionController tc, java.lang.String key)
           
private  java.io.Serializable getCachedPropertyDefault(TransactionController tc, java.lang.String key, java.util.Dictionary dbProps)
           
(package private)  java.util.Properties getProperties(TransactionController tc)
          Fetch the set of properties as a Properties object.
 void getProperties(TransactionController tc, java.util.Dictionary d, boolean stringsOnly, boolean defaultsOnly)
           
(package private)  java.io.Serializable getProperty(TransactionController tc, java.lang.String key)
          Gets the de-serialized object associated with a property key.
(package private)  java.io.Serializable getPropertyDefault(TransactionController tc, java.lang.String key)
          Get the default for a property.
private  boolean iHoldTheUpdateLock(TransactionController tc)
          Return true if the caller holds the exclusive update lock on the property conglomerate.
(package private)  void lockProperties(TransactionController tc)
          Lock the database properties for an update.
private  DataValueDescriptor[] makeNewTemplate()
          Create a new empty PropertyConglomerate row, to fetch values into.
private  DataValueDescriptor[] makeNewTemplate(java.lang.String key, java.io.Serializable value)
          Create a new PropertyConglomerate row, with values in it.
private  java.io.Serializable map(java.lang.String key, java.io.Serializable value, java.util.Dictionary set)
          Call the property set callbacks to map a proposed property value to a value to save.
private  ScanController openScan(TransactionController tc, java.lang.String key, int open_mode)
          Open a scan on the properties conglomerate looking for "key".
(package private)  boolean propertyDefaultIsVisible(TransactionController tc, java.lang.String key)
           
private  java.util.Dictionary readDbProperties(TransactionController tc)
          Read the database properties and add in the service set.
private  java.io.Serializable readProperty(TransactionController tc, java.lang.String key)
           
(package private)  void resetCache()
           
(package private)  void saveProperty(TransactionController tc, java.lang.String key, java.io.Serializable value)
           
(package private)  void savePropertyDefault(TransactionController tc, java.lang.String key, java.io.Serializable value)
           
private  boolean saveServiceProperty(java.lang.String key, java.io.Serializable value)
           
(package private)  void setProperty(TransactionController tc, java.lang.String key, java.io.Serializable value, boolean dbOnlyProperty)
          Sets the Serializable object associated with a property key.
(package private)  void setPropertyDefault(TransactionController tc, java.lang.String key, java.io.Serializable value)
          Set the default for a property.
private  void validate(java.lang.String key, java.io.Serializable value, java.util.Dictionary set)
          Call the property set callbacks to validate a property change against the property set provided.
private  java.io.Serializable validateApplyAndMap(TransactionController tc, java.lang.String key, java.io.Serializable value, boolean dbOnlyProperty)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

propertiesConglomId

protected long propertiesConglomId

serviceProperties

protected java.util.Properties serviceProperties

lf

private LockFactory lf

cachedSet

private java.util.Dictionary cachedSet

cachedLock

private CacheLock cachedLock

pf

private PropertyFactory pf
Constructor Detail

PropertyConglomerate

PropertyConglomerate(TransactionController tc,
                     boolean create,
                     java.util.Properties serviceProperties,
                     PropertyFactory pf)
               throws StandardException
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.

setPropertyDefault

void setPropertyDefault(TransactionController tc,
                        java.lang.String key,
                        java.io.Serializable value)
                  throws StandardException
Set the default for a property.

Throws:
StandardException - Standard exception policy.

propertyDefaultIsVisible

boolean propertyDefaultIsVisible(TransactionController tc,
                                 java.lang.String key)
                           throws StandardException
Throws:
StandardException

saveProperty

void saveProperty(TransactionController tc,
                  java.lang.String key,
                  java.io.Serializable value)
            throws StandardException
Throws:
StandardException

saveServiceProperty

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

savePropertyDefault

void savePropertyDefault(TransactionController tc,
                         java.lang.String key,
                         java.io.Serializable value)
                   throws StandardException
Throws:
StandardException

validateApplyAndMap

private java.io.Serializable validateApplyAndMap(TransactionController tc,
                                                 java.lang.String key,
                                                 java.io.Serializable value,
                                                 boolean dbOnlyProperty)
                                          throws StandardException
Throws:
StandardException

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

bootPasswordChange

private boolean bootPasswordChange(TransactionController tc,
                                   java.lang.String key,
                                   java.io.Serializable value)
                            throws StandardException
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.

readProperty

private java.io.Serializable readProperty(TransactionController tc,
                                          java.lang.String key)
                                   throws StandardException
Throws:
StandardException

getCachedProperty

private java.io.Serializable getCachedProperty(TransactionController tc,
                                               java.lang.String key)
                                        throws StandardException
Throws:
StandardException

getCachedPropertyDefault

private java.io.Serializable getCachedPropertyDefault(TransactionController tc,
                                                      java.lang.String key,
                                                      java.util.Dictionary dbProps)
                                               throws StandardException
Throws:
StandardException

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.

getPropertyDefault

java.io.Serializable getPropertyDefault(TransactionController tc,
                                        java.lang.String key)
                                  throws StandardException
Get the default for a property.

Throws:
StandardException - Standard exception policy.

copyValues

private java.util.Dictionary copyValues(java.util.Dictionary to,
                                        java.util.Dictionary from,
                                        boolean stringsOnly)

getProperties

java.util.Properties getProperties(TransactionController tc)
                             throws StandardException
Fetch the set of properties as a Properties object. This means that only keys that have String values will be included.

Throws:
StandardException

getProperties

public void getProperties(TransactionController tc,
                          java.util.Dictionary d,
                          boolean stringsOnly,
                          boolean defaultsOnly)
                   throws StandardException
Throws:
StandardException

resetCache

void resetCache()

readDbProperties

private java.util.Dictionary readDbProperties(TransactionController tc)
                                       throws StandardException
Read the database properties and add in the service set.

Throws:
StandardException

getCachedDbProperties

private java.util.Dictionary getCachedDbProperties(TransactionController tc)
                                            throws StandardException
Throws:
StandardException

lockProperties

void lockProperties(TransactionController tc)
              throws StandardException
Lock the database properties for an update.

Throws:
StandardException

iHoldTheUpdateLock

private boolean iHoldTheUpdateLock(TransactionController tc)
                            throws StandardException
Return true if the caller holds the exclusive update lock on the property conglomerate.

Throws:
StandardException

Built on Tue 2006-10-10 19:23:47+0200, from revision exported

Apache Derby V10.1 Engine Documentation - Copyright © 1997,2005 The Apache Software Foundation or its licensors, as applicable.