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
DatabaseException
public 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
DatabaseException
public boolean isRawAccess()
isRawAccess()
public java.lang.Object convertRawObject(RawObject o, java.util.IdentityHashMap converted)