|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jboss.cache.loader.AbstractCacheLoader
org.jboss.cache.loader.AdjListJDBCCacheLoader
@ThreadSafe public abstract class AdjListJDBCCacheLoader
Adjacency List Model is the model of persisting trees in which each children holds a reference to its parent. An alternative model is the Nested Set Model (a.k.a. Modified Preorder Model) - this approach adds some additional indexing information to each persisted node. This indexing info is further used for optimizing operations like subtree loading, deleting etc. The indexes are update for each insertion.
Adjacency List Model proved more performance-effective for the following reason: the entire path is persisted rather than only a reference to parent. Looking up nodes heavily relies on that, and the performance is similar as in the case of Modified Preorder Model. Even more there is no costly update indexes operation.
Field Summary | |
---|---|
protected ConnectionFactory |
cf
|
protected java.lang.String |
driverName
|
protected StripedLock |
lock
|
protected static java.util.Map<java.lang.Object,java.lang.Object> |
NULL_NODE_IN_ROW
|
Fields inherited from class org.jboss.cache.loader.AbstractCacheLoader |
---|
buddyFqnTransformer, cache, regionManager, transactions |
Constructor Summary | |
---|---|
AdjListJDBCCacheLoader()
|
Method Summary | |
---|---|
void |
commit(java.lang.Object tx)
Commits a transaction. |
boolean |
exists(Fqn name)
Checks that there is a row for the fqn in the database. |
java.util.Map<java.lang.Object,java.lang.Object> |
get(Fqn name)
Returns a map representing a node. |
protected java.lang.String |
getDriverName(java.sql.Connection con)
|
java.util.Set<java.lang.String> |
getChildrenNames(Fqn fqn)
Fetches child node names (not pathes). |
protected abstract org.apache.commons.logging.Log |
getLogger()
|
protected void |
insertNode(Fqn name,
java.util.Map dataMap,
boolean rowMayExist)
Inserts a node into the database |
protected java.util.Map<java.lang.Object,java.lang.Object> |
loadNode(Fqn name)
Loads a node from the database. |
protected ByteBuffer |
marshall(java.lang.Object obj)
|
protected void |
populatePreparedStatementForInsert(Fqn name,
java.util.Map dataMap,
java.sql.PreparedStatement ps)
Expects a PreparedStatement binded to AdjListJDBCCacheLoaderConfig.getInsertNodeSql() |
void |
prepare(java.lang.Object tx,
java.util.List<Modification> modifications,
boolean one_phase)
First phase in transaction commit process. |
protected java.sql.PreparedStatement |
prepareAndLogStatement(java.sql.Connection conn,
java.lang.String sql,
java.lang.String... params)
Creates a prepared statement using the given connection and SQL string, logs the statement that is about to be executed to the logger, and optionally sets String parameters provided on the prepared statement before returning the prepared statement. |
protected abstract AdjListJDBCCacheLoaderConfig |
processConfig(CacheLoaderConfig.IndividualCacheLoaderConfig base)
|
java.lang.Object |
remove(Fqn name,
java.lang.Object key)
Removes attribute's value for a key. |
void |
removeData(Fqn name)
Nullifies the node. |
protected void |
reportAndRethrowError(java.lang.String message,
java.lang.Exception cause)
|
void |
rollback(java.lang.Object tx)
Rolls back a transaction. |
protected void |
safeClose(java.io.InputStream is)
|
protected void |
safeClose(java.sql.ResultSet rs)
|
protected void |
safeClose(java.sql.Statement st)
|
void |
setConfig(CacheLoaderConfig.IndividualCacheLoaderConfig base)
Sets the configuration. |
void |
start()
|
void |
stop()
|
protected boolean |
tableExists(java.lang.String tableName,
java.sql.Connection con)
|
protected java.lang.Object |
unmarshall(java.io.InputStream from)
|
protected void |
updateNode(Fqn name,
java.util.Map<java.lang.Object,java.lang.Object> node)
Updates a node in the database. |
Methods inherited from class org.jboss.cache.loader.AbstractCacheLoader |
---|
create, destroy, doMarshall, doUnmarshall, getMarshaller, getNodeDataList, loadEntireState, loadState, loadStateHelper, move, put, put, regionAwareMarshall, regionAwareUnmarshall, setCache, setRegionManager, storeEntireState, storeState, storeStateHelper |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.jboss.cache.loader.CacheLoader |
---|
getConfig, put, put, remove |
Field Detail |
---|
protected ConnectionFactory cf
protected java.lang.String driverName
protected StripedLock lock
protected static final java.util.Map<java.lang.Object,java.lang.Object> NULL_NODE_IN_ROW
Constructor Detail |
---|
public AdjListJDBCCacheLoader()
Method Detail |
---|
protected java.sql.PreparedStatement prepareAndLogStatement(java.sql.Connection conn, java.lang.String sql, java.lang.String... params) throws java.lang.Exception
conn
- Connection to use to create the prepared statementsql
- SQL to use with the prepared statementparams
- optional parameters to add to the statement.
java.lang.Exception
- if there are problemspublic void setConfig(CacheLoaderConfig.IndividualCacheLoaderConfig base)
CacheLoader
Lifecycle.create()
and Lifecycle.start()
.
base
- May be an instance of the CacheLoaderConfig.IndividualCacheLoaderConfig
base
class, in which case the cache loader should use the
PluggableConfigurationComponent.getProperties()
method to find configuration information. Alternatively,
may be a type-specific subclass of CacheLoaderConfig.IndividualCacheLoaderConfig
,
if there is one.public java.util.Map<java.lang.Object,java.lang.Object> get(Fqn name) throws java.lang.Exception
name
- node's fqn
java.lang.Exception
public java.util.Set<java.lang.String> getChildrenNames(Fqn fqn) throws java.lang.Exception
fqn
- parent fqn
java.lang.Exception
public void removeData(Fqn name) throws java.lang.Exception
name
- node's fqn
java.lang.Exception
public void prepare(java.lang.Object tx, java.util.List<Modification> modifications, boolean one_phase) throws java.lang.Exception
prepare
in interface CacheLoader
prepare
in class AbstractCacheLoader
tx
- something representing transactionmodifications
- a list of modificationsone_phase
- indicates whether it's one or two phase commit transaction
java.lang.Exception
public void commit(java.lang.Object tx) throws java.lang.Exception
commit
in interface CacheLoader
commit
in class AbstractCacheLoader
tx
- the tx to commit
java.lang.Exception
public void rollback(java.lang.Object tx)
rollback
in interface CacheLoader
rollback
in class AbstractCacheLoader
tx
- the tx to rollbackpublic void start() throws java.lang.Exception
start
in interface Lifecycle
start
in class AbstractCacheLoader
java.lang.Exception
public void stop()
stop
in interface Lifecycle
stop
in class AbstractCacheLoader
public boolean exists(Fqn name) throws java.lang.Exception
name
- node's fqn
java.lang.Exception
public java.lang.Object remove(Fqn name, java.lang.Object key) throws java.lang.Exception
name
- node's namekey
- attribute's key
java.lang.Exception
protected java.util.Map<java.lang.Object,java.lang.Object> loadNode(Fqn name)
name
- the fqn
protected void insertNode(Fqn name, java.util.Map dataMap, boolean rowMayExist)
name
- the fqndataMap
- the noderowMayExist
- if true, then this method will not be strict in testing for 1 row being inserted, since 0 may be inserted if the row already exists.protected void populatePreparedStatementForInsert(Fqn name, java.util.Map dataMap, java.sql.PreparedStatement ps) throws java.lang.Exception
AdjListJDBCCacheLoaderConfig.getInsertNodeSql()
java.lang.Exception
protected void updateNode(Fqn name, java.util.Map<java.lang.Object,java.lang.Object> node)
name
- the fqnnode
- new node valueprotected java.lang.String getDriverName(java.sql.Connection con)
protected boolean tableExists(java.lang.String tableName, java.sql.Connection con)
protected abstract org.apache.commons.logging.Log getLogger()
protected abstract AdjListJDBCCacheLoaderConfig processConfig(CacheLoaderConfig.IndividualCacheLoaderConfig base)
protected void reportAndRethrowError(java.lang.String message, java.lang.Exception cause) throws java.lang.IllegalStateException
java.lang.IllegalStateException
protected void safeClose(java.io.InputStream is)
protected void safeClose(java.sql.Statement st)
protected void safeClose(java.sql.ResultSet rs)
protected java.lang.Object unmarshall(java.io.InputStream from) throws java.lang.Exception
java.lang.Exception
protected ByteBuffer marshall(java.lang.Object obj) throws java.lang.Exception
java.lang.Exception
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |