public class PersistCatalog
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
static int |
BETA_VERSION |
static int |
CURRENT_VERSION |
static boolean |
expectNoClassChanges
Used by unit tests.
|
static boolean |
unevolvedFormatsEncountered |
| Constructor and Description |
|---|
PersistCatalog(Transaction txn,
Environment env,
java.lang.String storePrefix,
java.lang.String dbName,
DatabaseConfig dbConfig,
EntityModel modelParam,
Mutations mutationsParam,
boolean rawAccess,
Store store)
Creates a new catalog, opening the database and reading it from a given
catalog database if it already exists.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
close()
Decrements the reference count and closes the catalog DB when it reaches
zero.
|
java.lang.Object |
convertRawObject(RawObject o,
java.util.IdentityHashMap converted) |
Format |
createFormat(java.lang.Class type,
java.util.Map<java.lang.String,Format> newFormats)
If the given class format is not already present in the given map and
a format for this class name does not already exist, creates an
uninitialized format, adds it to the map, and also collects related
formats in the map.
|
Format |
createFormat(java.lang.String clsName,
java.util.Map<java.lang.String,Format> newFormats)
Convenience method that gets the class for the given class name and
calls createFormat with the class object.
|
void |
flush()
Used to write the catalog when a format has been changed, for example,
when Store.evolve has updated a Format's EvolveNeeded property.
|
java.util.List<RawType> |
getAllRawTypes()
Returns all formats as RawTypes.
|
void |
getEntityFormats(java.util.Collection<Format> entityFormats) |
Format |
getFormat(java.lang.Class cls,
boolean checkEntitySubclassIndexes)
Get a format for a given class, creating it if it does not exist.
|
Format |
getFormat(int formatId)
Returns a format for a given ID, or throws an exception.
|
Format |
getFormat(java.lang.String className)
Returns a format by class name.
|
int |
getInitVersion(Format format,
boolean forReader)
When a format is intialized, this method is called to get the version
of the serialized object to be initialized.
|
Format |
getLatestVersion(java.lang.String className) |
Mutations |
getMutations()
Returns the current merged mutations.
|
EntityModel |
getResolvedModel()
Returns the model parameter, default model or stored model.
|
boolean |
isRawAccess() |
void |
openExisting()
Increments the reference count for a catalog that is already open.
|
public static boolean expectNoClassChanges
public static boolean unevolvedFormatsEncountered
public static final int BETA_VERSION
public static final int CURRENT_VERSION
public PersistCatalog(Transaction txn, Environment env, java.lang.String storePrefix, java.lang.String dbName, DatabaseConfig dbConfig, EntityModel modelParam, Mutations mutationsParam, boolean rawAccess, Store store) throws StoreExistsException, StoreNotFoundException, IncompatibleClassException, DatabaseException
public void getEntityFormats(java.util.Collection<Format> entityFormats)
public EntityModel getResolvedModel()
public void openExisting()
public boolean close()
throws DatabaseException
DatabaseExceptionpublic Mutations getMutations()
public Format createFormat(java.lang.String clsName, java.util.Map<java.lang.String,Format> newFormats)
public Format createFormat(java.lang.Class type, java.util.Map<java.lang.String,Format> newFormats)
public java.util.List<RawType> getAllRawTypes()
public int getInitVersion(Format format, boolean forReader)
public Format getFormat(int formatId)
public Format getFormat(java.lang.Class cls, boolean checkEntitySubclassIndexes)
This method is called for top level entity instances by PersistEntityBinding. When a new entity subclass format is added we call Store.checkEntitySubclassSecondaries to ensure that all secondary databases have been opened, before storing the entity. We do this here while not holding a synchronization mutex, not in addNewFormat, to avoid deadlocks. checkEntitySubclassSecondaries synchronizes on the Store. [#16399]
Historical note: At one time we opened / created the secondary databases rather than requiring the user to open them, see [#15247]. Later we found this to be problematic since a user txn may have locked primary records, see [#16399].
checkEntitySubclassIndexes - is true if we're expecting this format
to be an entity subclass and therefore subclass secondary indexes should
be opened.public Format getFormat(java.lang.String className)
#getFormat(Class), the
format will not be created if it is not already known.public Format getLatestVersion(java.lang.String className)
public void flush()
throws DatabaseException
DatabaseExceptionpublic boolean isRawAccess()
isRawAccess()public java.lang.Object convertRawObject(RawObject o, java.util.IdentityHashMap converted)