org.salespointframework.core.data.database
Class PersistenceManager

java.lang.Object
  extended by org.salespointframework.core.data.database.PersistenceManager
All Implemented Interfaces:
java.beans.PropertyChangeListener, java.util.EventListener

public class PersistenceManager
extends java.lang.Object
implements java.beans.PropertyChangeListener

The PersistenceManager is the core of SalesPoints Persistence layer Its job is to manage the database connections and persist and recover objects

Since:
4.0
Author:
Thomas Kissinger

Nested Class Summary
(package private) static class PersistenceManager.CachedResultSet
          this class cahches ResultSets in performance mode to decrease query count
private static class PersistenceManager.DelayedAssignmentInfo
           
static class PersistenceManager.LogonInformation
          Logon information of users in local Salespoints should work with remote logons in future version
private static class PersistenceManager.ModificationEntry
          an entry which defines a modification event
private  class PersistenceManager.ModificationTriggerWorker
          this worker constantly checks for table modifications on active connection
(package private) static class PersistenceManager.MovingAverage
          this class calculates the moving average of a given window size
static class PersistenceManager.PerformanceTimer
          Simple Performance timer with nano seconds precision
(package private) static class PersistenceManager.ShopInstance
          A shop instance that will be written to data source
 
Field Summary
private static PersistenceManager _instance
          Singleton instance
private  java.sql.Statement _statement
          The Statement to work with
private  boolean broadcastStateChanged
          indicates whether a state changed should be broadcasted to PersistenceStateListeners
private  java.util.Map<java.lang.String,java.lang.Object> cache
          Cache for all recovered and known objects
private  ClassFieldMapper cfMapper
          current ClassFieldMapper
private  java.lang.Object changeLock
          Locking object
private  java.lang.Object cncLock
          Locking object
private  ClassNameEncoder cnEncoder
          current ClassNameEncoder
private  java.sql.Connection connection
          actual JDBC connection
private  java.util.List<DatabaseConnection> connections
          list of connections
private  java.util.List<DatabaseConnectionListener> connectionsListener
          list of database connection listeners
private  java.util.List<DatabaseConnectionTemplate> connectionTemplates
          list of connection templates
private  DatabaseConnection dbConnection
          the actual Database connection
private  boolean dbGeneratedKeys
          flag for Driver capability to return generated keys
private  java.io.PrintWriter dmLog
          Log output stream for DriverManager and debug messages, if #debug is false
private  java.util.List<DatasourceChangeListener> dsChangedListener
          List of datasource changed listener
private  java.util.List<DatasourceOnChangeListener> dsOnChangeListener
          List of datasource on change listener
private  java.util.Map<java.lang.String,java.util.List<ExternalModificationListener>> externalModificationListeners
          listeners that listen for external modifications
private  boolean ignoreOpen
          Ignores open() call
private  boolean initQueryInProgress
          true, while checkForDataInit() is displayed
private  PersistenceStateListener.ConnectionState lastConnectionState
          the last connection state
private  PersistenceStateListener.OperationalState lastOperation
          the last operation
private  java.lang.Object lastOperationalObject
          the last operational object
private  PersistenceManager.ShopInstance localShopInstance
          the local shop instance
private  java.util.concurrent.locks.Lock lock
          Main Lock
static long lockTimeout
          Main lock timeout in milliseconds
 java.util.logging.Logger logger
          The logger
private  java.util.List<PersistenceManager.LogonInformation> logonInformations
          Logon information list
private  PersistenceManager.MovingAverage ma
          Moving average for latency
static int MODIFICATION_TRIGGER_WORKER_ENTRY_REMOVE_MULTIPLIER
          defines after how much cycles a PersistenceManager.ModificationEntry should be removed from modification table
static long MODIFICATION_TRIGGER_WORKER_INTERVAL
          interval in which PersistenceManager.ModificationTriggerWorker checks for changes in database
static java.lang.String MODIFICATION_TRIGGER_WORKER_THREAD_NAME
          name of the modification trigger worker thread
private  PersistenceManager.ModificationTriggerWorker modificationTriggerWorker
          the modification checker
private  boolean performanceMode
          flag for performance mode
private  java.util.List<PersistenceStateListener> psListener
          Persistencestate listener
private  java.util.Map<java.lang.String,PersistenceManager.CachedResultSet> qCache
          The query cache
protected  boolean stopModificationTriggerWorker
          signal stop fpr MTW
private  java.util.Set<java.lang.String> tableCache
          Table name cache
 
Constructor Summary
PersistenceManager()
          Constructor
 
Method Summary
 boolean addDatasourceChangedListener(DatasourceChangeListener dscl)
          Add a Datasource changed listener
 boolean addDatasourceOnChangeListener(DatasourceOnChangeListener docl)
          Add a Datasource on change listener
 boolean addDBCListener(DatabaseConnectionListener dbcl)
          Add as database connection listener
 boolean addPersistenceStateListener(PersistenceStateListener psl)
          Add a Persistence state Listener
 java.lang.Object addToList(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, java.lang.Object o, java.lang.Object k, boolean uniqueKey, java.lang.Object host, int index, boolean newIndex)
          Core function for persisting lists. this method persists items to the list.
 void aquireMainLock()
           
 boolean attachExternalModificationListener(java.lang.String tableid, ExternalModificationListener eml)
          add an ExternalModificationListener
 void checkForDataInit()
           
private  boolean checkTableAlternation(java.lang.String tname, java.util.Map<java.lang.String,java.lang.String> scheme)
          Checks for changes in the table scheme and tries to fix them
 void clearDatabase()
          Clears the Database
 void close()
          closes the JDBC connection
 int countListItems(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, java.lang.Object k, boolean uniqueKey, java.lang.Object host, java.lang.Object o)
          Core function for persisting lists. this method counts the items of a list.
 void dettachExternalModificationListener(java.lang.String tableid, ExternalModificationListener eml)
          remove ExternalModificationListener
protected  java.lang.Object doTypeChecking(java.lang.Object odata, java.lang.Class c)
           
private  void fireCSChanged(PersistenceStateListener.ConnectionState state)
          fire a Connection state changed event
 void fireDBCUpdate()
          notifies connection listeners about an update
private  void fireDSChanged()
          fire datasource changes event
private  void fireLatencyChanged(float latency)
          fire a latency changed event
private  void fireOnDSChange()
          fire datasource on change event
private  void fireOPSChanged(PersistenceStateListener.OperationalState op, java.lang.Object o)
          fire a operational state change event
 boolean forceOpen()
          Enforces the connection opening
private  java.lang.String getCacheKey(java.lang.Class c, java.lang.Object ident)
           
private  java.lang.Object getChangeLock()
          retrieve the change lock object
 java.util.List<DatabaseConnection> getConnections()
          returns a read only list of regsitered database connections
 java.util.List<DatabaseConnectionTemplate> getConnectionTemplates()
          returns the list of Database connection templates
 DatabaseConnection getDatabaseConnection()
          returns the current database connection
 java.util.List<java.lang.Object> getEntireList(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, boolean uniqueKey, boolean returnKeys, java.lang.Object RecoveryContext, java.lang.Object host, java.lang.Object k, boolean isMap)
          Core function for persisting lists. this method recovers the entire list.
 java.util.List<java.lang.Object> getFromList(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, java.lang.Object k, boolean uniqueKey, java.lang.Object recoveryContext, java.lang.Object host, java.lang.Object ident)
          Core function for persisting lists. this method recovers a set of entry objects from the list can be used for Maps as well as Lists
static PersistenceManager getInstance()
          get the singleton instance
 java.util.Map<java.lang.Object,java.lang.Object> getLargeList(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, boolean uniqueKey, java.lang.Object RecoveryContext, java.lang.Object host, java.lang.Object k, boolean isMap)
          Core function for persisting lists. this method recovers the entire list.
 java.lang.String getListId(java.lang.Class c, java.lang.String id, java.lang.Object host)
          build table name for list
 java.lang.String getListId(java.lang.Class c, java.lang.String id, java.lang.Object host, boolean raw)
           
 java.util.Map<java.lang.String,java.lang.Object> getObjectCache()
          get the object cache, which caches all recovered objects of current session
 java.sql.Statement getSimpleStatement()
          Create a Statement
 java.sql.PreparedStatement getStatement(java.lang.String sql)
           
 java.sql.PreparedStatement getStatement(java.lang.String sql, int args)
          Closes recent Statement if required and returns a new one
 java.util.Set<java.lang.String> getTableCache()
          get the table cache, which contains all verified tables of current session
 java.util.List<PersistenceManager.LogonInformation> getUserSessions()
          returns a list of all PersistenceManager.LogonInformation
 java.util.List<PersistenceManager.LogonInformation> getUserSessions(User user)
          returns a list of all PersistenceManager.LogonInformation for given user
 void initalizeData()
          fill database data
 boolean isOpen()
          determines whether the JDBC connection is open
 boolean isPerformanceMode()
          Sets Performance mode.
 void loadConnections()
          Loads connections from PreferenceStorage
 void logoffUser(SalesPoint sp)
          logoff user form given SalesPoint and remove PersistenceManager.LogonInformation record
 boolean logonUser(User user, SalesPoint sp)
           
 void markTableAsDirty(java.lang.String tname)
          writes a PersistenceManager.ModificationEntry that marks given table as modified
 boolean open()
          tries to open the JDBC connection, with help of the dbConnection
 java.lang.Object persist(java.lang.Object o)
          Persist an object to DataSource
private  java.lang.Object persist(java.lang.Object o, boolean commit, java.util.Map<java.lang.Object,java.lang.Object> stack)
          Persist an object to DataSource
protected  void prepareListTable(java.lang.String tname, java.lang.Class o, java.lang.Class k, boolean uniqueKey)
          Prepares a table for a list, if table does not exist
protected  void prepareTable(java.lang.Class c, java.lang.Object o)
          Create a table for a Class, if table doesn't exist
private  void printDbg(java.lang.String msg)
          print a debug message. if debug is on: to error stream. if off: to log file
private  void printDbg(java.lang.String msg, PersistenceManager.PerformanceTimer pt)
          print a debug message with taken time.
private  void printWarn(java.lang.String msg)
          print a warning message, if warn is on
 void propertyChange(java.beans.PropertyChangeEvent evt)
          react on property change
 boolean realOpen()
          this method really tries to open the connection
<T> T
recover(java.lang.Class<T> c, java.lang.Object ident, java.lang.Object recoveryContext)
          Recovers an object identified by ident.
private
<T> T
recoverRow(java.lang.Class<T> c, java.sql.ResultSet rs, java.sql.PreparedStatement st, boolean close, java.lang.Object recoveryContext, java.lang.Object ident, boolean useCache, PersistenceManager.CachedResultSet qrs, java.util.Map<java.lang.String,java.lang.Object> stack, java.util.List<PersistenceManager.DelayedAssignmentInfo> delayed)
          Tries to recover a database.
private
<T> T
recoverSingleObject(java.lang.Class<T> c, java.lang.Object ident, java.lang.Object recoveryContext, boolean useCache, java.util.Map<java.lang.String,java.lang.Object> stack, java.util.List<PersistenceManager.DelayedAssignmentInfo> delayed)
          Recovers a single object, identified by ident
 void refireCSChanged()
          fire the current connection state again
 boolean registerConnection(DatabaseConnection dbc)
          registers an new Database connection
 void registerShop(Shop shop)
          register shop instance
 void releaseMainLock()
           
 void removeDatasourceChangedListener(DatasourceChangeListener dscl)
          Remove a Datasource changed listener
 void removeDatasourceOnChangeListener(DatasourceOnChangeListener docl)
          Remove a datasource on change listener
 void removeDBCListener(DatabaseConnectionListener dbcl)
          Removes a database connection listener
 void removeListItems(java.lang.Class c, java.lang.String id, java.lang.Class oc, java.lang.Class kc, java.lang.Object k, boolean uniqueKey, java.lang.Object host, java.lang.Object o, java.lang.String ctr, java.lang.Object ctro, boolean removeItem, int index)
          Core function for persisting lists. this method removes items from a list can be used for Maps as well as Lists
 void removePersistenceStateListener(PersistenceStateListener psl)
          Remove a persistence state listener
private
<T> T
respawn(java.lang.Class<T> c, java.util.Map<java.lang.String,java.lang.Object> data, boolean force0ctor, java.util.List<java.lang.String> exclude)
          core method for instantiate an object of specified Class
 void saveConnections()
          Saves Connections to PrferenceStorage
 void setBroadcastStateChanged(boolean val)
          set broadcastStateChanged
 void setClassFieldMapper(ClassFieldMapper cfm)
          sets the current ClassFieldMapper
 void setClassNameEncoder(ClassNameEncoder cne)
          Sets the current ClassNameEncoder
 void setConsoleLogLevel(java.util.logging.Level level)
          Set the log level for Console output
 void setDatabaseConnection(DatabaseConnection dbc)
          set the current database connection
 void setLogStream(java.io.PrintWriter log)
          Set the LogStream for DriverManager
 void setPerformanceMode(boolean value)
          Set performance mode
 void stopMTW()
          Stop the Modification Trigger Worker
private  boolean testDbGeneratedKeys()
          test if driver is able to fetch generated keys
private  void triggerModificationTableReset()
          writes a reset ievent to modification tabel
 void unpersist(java.lang.Class c, java.lang.Object ident)
          Removes an Object from DataSource
private  void unpersist(java.lang.String cn, java.lang.Object ident, boolean deleteRecord)
          Removes an Object from DataSource
 void unregisterConnection(DatabaseConnection dbc)
          removes a database connection
 void unregisterShop()
          unregister shop from datasource
protected  java.lang.Object upsert(java.lang.Object o, java.lang.Class c, java.util.Map<java.lang.Object,java.lang.Object> stack)
          insert or update an object in persistent storage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODIFICATION_TRIGGER_WORKER_INTERVAL

public static long MODIFICATION_TRIGGER_WORKER_INTERVAL
interval in which PersistenceManager.ModificationTriggerWorker checks for changes in database


MODIFICATION_TRIGGER_WORKER_ENTRY_REMOVE_MULTIPLIER

public static int MODIFICATION_TRIGGER_WORKER_ENTRY_REMOVE_MULTIPLIER
defines after how much cycles a PersistenceManager.ModificationEntry should be removed from modification table


MODIFICATION_TRIGGER_WORKER_THREAD_NAME

public static java.lang.String MODIFICATION_TRIGGER_WORKER_THREAD_NAME
name of the modification trigger worker thread


_instance

private static PersistenceManager _instance
Singleton instance


logger

public final java.util.logging.Logger logger
The logger


broadcastStateChanged

private boolean broadcastStateChanged
indicates whether a state changed should be broadcasted to PersistenceStateListeners


dbConnection

private DatabaseConnection dbConnection
the actual Database connection


connectionTemplates

private java.util.List<DatabaseConnectionTemplate> connectionTemplates
list of connection templates


connections

private java.util.List<DatabaseConnection> connections
list of connections


connectionsListener

private java.util.List<DatabaseConnectionListener> connectionsListener
list of database connection listeners


dsChangedListener

private final java.util.List<DatasourceChangeListener> dsChangedListener
List of datasource changed listener


dsOnChangeListener

private final java.util.List<DatasourceOnChangeListener> dsOnChangeListener
List of datasource on change listener


psListener

private final java.util.List<PersistenceStateListener> psListener
Persistencestate listener


ma

private PersistenceManager.MovingAverage ma
Moving average for latency


lastConnectionState

private PersistenceStateListener.ConnectionState lastConnectionState
the last connection state


initQueryInProgress

private boolean initQueryInProgress
true, while checkForDataInit() is displayed


lastOperation

private PersistenceStateListener.OperationalState lastOperation
the last operation


lastOperationalObject

private java.lang.Object lastOperationalObject
the last operational object


connection

private java.sql.Connection connection
actual JDBC connection


lock

private java.util.concurrent.locks.Lock lock
Main Lock


lockTimeout

public static long lockTimeout
Main lock timeout in milliseconds


changeLock

private java.lang.Object changeLock
Locking object


cncLock

private java.lang.Object cncLock
Locking object


_statement

private java.sql.Statement _statement
The Statement to work with


dmLog

private java.io.PrintWriter dmLog
Log output stream for DriverManager and debug messages, if #debug is false


cache

private java.util.Map<java.lang.String,java.lang.Object> cache
Cache for all recovered and known objects


qCache

private java.util.Map<java.lang.String,PersistenceManager.CachedResultSet> qCache
The query cache


tableCache

private java.util.Set<java.lang.String> tableCache
Table name cache


performanceMode

private boolean performanceMode
flag for performance mode


cnEncoder

private ClassNameEncoder cnEncoder
current ClassNameEncoder


cfMapper

private ClassFieldMapper cfMapper
current ClassFieldMapper


dbGeneratedKeys

private boolean dbGeneratedKeys
flag for Driver capability to return generated keys


ignoreOpen

private boolean ignoreOpen
Ignores open() call


localShopInstance

private PersistenceManager.ShopInstance localShopInstance
the local shop instance


externalModificationListeners

private java.util.Map<java.lang.String,java.util.List<ExternalModificationListener>> externalModificationListeners
listeners that listen for external modifications


logonInformations

private java.util.List<PersistenceManager.LogonInformation> logonInformations
Logon information list


modificationTriggerWorker

private PersistenceManager.ModificationTriggerWorker modificationTriggerWorker
the modification checker


stopModificationTriggerWorker

protected boolean stopModificationTriggerWorker
signal stop fpr MTW

Constructor Detail

PersistenceManager

public PersistenceManager()
Constructor

Method Detail

setConsoleLogLevel

public void setConsoleLogLevel(java.util.logging.Level level)
Set the log level for Console output


getInstance

public static PersistenceManager getInstance()
get the singleton instance

Returns:
the PersistenceManager

setClassFieldMapper

public void setClassFieldMapper(ClassFieldMapper cfm)
sets the current ClassFieldMapper

Parameters:
cfm -

setClassNameEncoder

public void setClassNameEncoder(ClassNameEncoder cne)
Sets the current ClassNameEncoder

Parameters:
cne -

setLogStream

public void setLogStream(java.io.PrintWriter log)
Set the LogStream for DriverManager

Parameters:
log -

isPerformanceMode

public boolean isPerformanceMode()
Sets Performance mode. In performance mode, persistence manager tries to load all object at once.


setPerformanceMode

public void setPerformanceMode(boolean value)
Set performance mode

Parameters:
value - true to activate

isOpen

public boolean isOpen()
determines whether the JDBC connection is open

Returns:

close

public void close()
closes the JDBC connection


getChangeLock

private java.lang.Object getChangeLock()
retrieve the change lock object

Returns:

addDatasourceOnChangeListener

public boolean addDatasourceOnChangeListener(DatasourceOnChangeListener docl)
Add a Datasource on change listener


removeDatasourceOnChangeListener

public void removeDatasourceOnChangeListener(DatasourceOnChangeListener docl)
Remove a datasource on change listener


addDatasourceChangedListener

public boolean addDatasourceChangedListener(DatasourceChangeListener dscl)
Add a Datasource changed listener


removeDatasourceChangedListener

public void removeDatasourceChangedListener(DatasourceChangeListener dscl)
Remove a Datasource changed listener


addPersistenceStateListener

public boolean addPersistenceStateListener(PersistenceStateListener psl)
Add a Persistence state Listener

Parameters:
psl - the listener

removePersistenceStateListener

public void removePersistenceStateListener(PersistenceStateListener psl)
Remove a persistence state listener

Parameters:
the - listener

fireOnDSChange

private void fireOnDSChange()
fire datasource on change event


setBroadcastStateChanged

public void setBroadcastStateChanged(boolean val)
set broadcastStateChanged

Parameters:
val -

fireDSChanged

private void fireDSChanged()
fire datasource changes event


fireLatencyChanged

private void fireLatencyChanged(float latency)
fire a latency changed event


refireCSChanged

public void refireCSChanged()
fire the current connection state again


fireCSChanged

private void fireCSChanged(PersistenceStateListener.ConnectionState state)
fire a Connection state changed event


fireOPSChanged

private void fireOPSChanged(PersistenceStateListener.OperationalState op,
                            java.lang.Object o)
fire a operational state change event


loadConnections

public void loadConnections()
Loads connections from PreferenceStorage


aquireMainLock

public void aquireMainLock()

releaseMainLock

public void releaseMainLock()

saveConnections

public void saveConnections()
Saves Connections to PrferenceStorage


getStatement

public java.sql.PreparedStatement getStatement(java.lang.String sql,
                                               int args)
                                        throws java.sql.SQLException
Closes recent Statement if required and returns a new one

Returns:
Throws:
java.sql.SQLException

getStatement

public java.sql.PreparedStatement getStatement(java.lang.String sql)
                                        throws java.sql.SQLException
Throws:
java.sql.SQLException

getSimpleStatement

public java.sql.Statement getSimpleStatement()
                                      throws java.sql.SQLException
Create a Statement

Throws:
java.sql.SQLException

getTableCache

public java.util.Set<java.lang.String> getTableCache()
get the table cache, which contains all verified tables of current session

Returns:

getObjectCache

public java.util.Map<java.lang.String,java.lang.Object> getObjectCache()
get the object cache, which caches all recovered objects of current session

Returns:

getConnectionTemplates

public java.util.List<DatabaseConnectionTemplate> getConnectionTemplates()
returns the list of Database connection templates

Returns:

getConnections

public java.util.List<DatabaseConnection> getConnections()
returns a read only list of regsitered database connections

Returns:

addDBCListener

public boolean addDBCListener(DatabaseConnectionListener dbcl)
Add as database connection listener

Parameters:
dbcl -
Returns:
true on success

removeDBCListener

public void removeDBCListener(DatabaseConnectionListener dbcl)
Removes a database connection listener

Parameters:
dbcl -

fireDBCUpdate

public void fireDBCUpdate()
notifies connection listeners about an update


registerConnection

public boolean registerConnection(DatabaseConnection dbc)
registers an new Database connection

Parameters:
dbc - the connection to be registered
Returns:
true on success

unregisterConnection

public void unregisterConnection(DatabaseConnection dbc)
removes a database connection

Parameters:
dbc - connection to be removed

forceOpen

public boolean forceOpen()
Enforces the connection opening

Returns:

open

public boolean open()
tries to open the JDBC connection, with help of the dbConnection

Returns:
true on success

checkForDataInit

public void checkForDataInit()

realOpen

public boolean realOpen()
this method really tries to open the connection

Returns:
true on success

testDbGeneratedKeys

private boolean testDbGeneratedKeys()
test if driver is able to fetch generated keys

Returns:
true, if it is capable

clearDatabase

public void clearDatabase()
Clears the Database


initalizeData

public void initalizeData()
fill database data


doTypeChecking

protected java.lang.Object doTypeChecking(java.lang.Object odata,
                                          java.lang.Class c)

respawn

private <T> T respawn(java.lang.Class<T> c,
                      java.util.Map<java.lang.String,java.lang.Object> data,
                      boolean force0ctor,
                      java.util.List<java.lang.String> exclude)
core method for instantiate an object of specified Class

Type Parameters:
T - expected class type
Parameters:
c - Class to instantiate
data - Object data. used for constructor calls
force0ctor - force the use of constructor with no parameters
exclude - list will be filled with parameters used for constructor call, after execution
Returns:
maybe the instantiated class of expected type. otherwise null.

recoverRow

private <T> T recoverRow(java.lang.Class<T> c,
                         java.sql.ResultSet rs,
                         java.sql.PreparedStatement st,
                         boolean close,
                         java.lang.Object recoveryContext,
                         java.lang.Object ident,
                         boolean useCache,
                         PersistenceManager.CachedResultSet qrs,
                         java.util.Map<java.lang.String,java.lang.Object> stack,
                         java.util.List<PersistenceManager.DelayedAssignmentInfo> delayed)
Tries to recover a database. Which means: instantiate an object of the class, fill data and call post-recovering methods

Type Parameters:
T - expected class type
Parameters:
c - Class to recover
rs - ResultSet with cursor set to target record
st - Statement that belongs to ResultSet
close - close re & st after call
recoveryContext - RecoveryContext which will be passed to post-recovering operations
Returns:
the fully recovered object

recover

public <T> T recover(java.lang.Class<T> c,
                     java.lang.Object ident,
                     java.lang.Object recoveryContext)
Recovers an object identified by ident.

Type Parameters:
T - expected class type
Parameters:
c - Class of object
ident - Identification of the object
recoveryContext - parameter which will be passed to post-recovering operations
Returns:
the fully recovered object

recoverSingleObject

private <T> T recoverSingleObject(java.lang.Class<T> c,
                                  java.lang.Object ident,
                                  java.lang.Object recoveryContext,
                                  boolean useCache,
                                  java.util.Map<java.lang.String,java.lang.Object> stack,
                                  java.util.List<PersistenceManager.DelayedAssignmentInfo> delayed)
Recovers a single object, identified by ident

Type Parameters:
T - expected class type
Parameters:
c - Class of object
ident - Identification of the object
recoveryContext - parameter which will be passed to post-recovering operations
useCache - indicates whether the cache should be used
Returns:
the fully recovered object

stopMTW

public void stopMTW()
Stop the Modification Trigger Worker


getCacheKey

private java.lang.String getCacheKey(java.lang.Class c,
                                     java.lang.Object ident)

persist

public java.lang.Object persist(java.lang.Object o)
Persist an object to DataSource

Parameters:
o - Object to persist
Returns:
identification for recovery

persist

private java.lang.Object persist(java.lang.Object o,
                                 boolean commit,
                                 java.util.Map<java.lang.Object,java.lang.Object> stack)
Persist an object to DataSource

Parameters:
o - Object to persist
commit - true if commit should be called on connection
Returns:
identification for recovery

unpersist

public void unpersist(java.lang.Class c,
                      java.lang.Object ident)
Removes an Object from DataSource

Parameters:
c - Class of Object to remove
ident - objects identification

unpersist

private void unpersist(java.lang.String cn,
                       java.lang.Object ident,
                       boolean deleteRecord)
Removes an Object from DataSource

Parameters:
cn - Classname as string
ident - objects identification
deleteRecord -

upsert

protected java.lang.Object upsert(java.lang.Object o,
                                  java.lang.Class c,
                                  java.util.Map<java.lang.Object,java.lang.Object> stack)
insert or update an object in persistent storage

Parameters:
o - object to persist
c - class of object
Returns:
identification object

triggerModificationTableReset

private void triggerModificationTableReset()
writes a reset ievent to modification tabel


markTableAsDirty

public void markTableAsDirty(java.lang.String tname)
writes a PersistenceManager.ModificationEntry that marks given table as modified

Parameters:
tname - affected table

getLargeList

public java.util.Map<java.lang.Object,java.lang.Object> getLargeList(java.lang.Class c,
                                                                     java.lang.String id,
                                                                     java.lang.Class oc,
                                                                     java.lang.Class kc,
                                                                     boolean uniqueKey,
                                                                     java.lang.Object RecoveryContext,
                                                                     java.lang.Object host,
                                                                     java.lang.Object k,
                                                                     boolean isMap)
Core function for persisting lists. this method recovers the entire list. can be used for Maps as well as Lists used in performance mode

Parameters:
c - Class of calling List
id - Lists unique id
oc - Class of entry object
kc - class of key object
uniqueKey - guaranty max. one occurrence of a key
RecoveryContext -
host - host object
ident -
isMap -
Returns:
List of keys or entry objects

getEntireList

public java.util.List<java.lang.Object> getEntireList(java.lang.Class c,
                                                      java.lang.String id,
                                                      java.lang.Class oc,
                                                      java.lang.Class kc,
                                                      boolean uniqueKey,
                                                      boolean returnKeys,
                                                      java.lang.Object RecoveryContext,
                                                      java.lang.Object host,
                                                      java.lang.Object k,
                                                      boolean isMap)
Core function for persisting lists. this method recovers the entire list. can be used for Maps as well as Lists

Parameters:
c - Class of calling List
id - Lists unique id
oc - Class of entry object
kc - class of key object
uniqueKey - guaranty max. one occurrence of a key
returnKeys - true, if all keys should be returned. otherwise only entry objects will be returned
RecoveryContext -
host - host object
ident -
isMap -
Returns:
List of keys or entry objects

removeListItems

public void removeListItems(java.lang.Class c,
                            java.lang.String id,
                            java.lang.Class oc,
                            java.lang.Class kc,
                            java.lang.Object k,
                            boolean uniqueKey,
                            java.lang.Object host,
                            java.lang.Object o,
                            java.lang.String ctr,
                            java.lang.Object ctro,
                            boolean removeItem,
                            int index)
Core function for persisting lists. this method removes items from a list can be used for Maps as well as Lists

Parameters:
c - Class of calling list
id - unique id of calling list
oc - entry objects class
kc - key objects class
k - key to remove. if null: list will be cleared
uniqueKey - guaranty unique occurrence of key
host - host object
ident -

countListItems

public int countListItems(java.lang.Class c,
                          java.lang.String id,
                          java.lang.Class oc,
                          java.lang.Class kc,
                          java.lang.Object k,
                          boolean uniqueKey,
                          java.lang.Object host,
                          java.lang.Object o)
Core function for persisting lists. this method counts the items of a list. can be used for Maps as well as Lists

Parameters:
c - calling class's type
id - id of calling class
oc - entry objects class
kc - key objects class
k - keys to count. if null: all keys will be counted
uniqueKey - guaranty single occurrence of key
host - host object
ident -
Returns:
count of items

getFromList

public java.util.List<java.lang.Object> getFromList(java.lang.Class c,
                                                    java.lang.String id,
                                                    java.lang.Class oc,
                                                    java.lang.Class kc,
                                                    java.lang.Object k,
                                                    boolean uniqueKey,
                                                    java.lang.Object recoveryContext,
                                                    java.lang.Object host,
                                                    java.lang.Object ident)
Core function for persisting lists. this method recovers a set of entry objects from the list can be used for Maps as well as Lists

Parameters:
c - lists class
id - lists unique id
oc - objects class
kc - keys class
k - keys to recover
uniqueKey -
recoveryContext -
host - host object
ident -
Returns:
List of recovered objects

addToList

public java.lang.Object addToList(java.lang.Class c,
                                  java.lang.String id,
                                  java.lang.Class oc,
                                  java.lang.Class kc,
                                  java.lang.Object o,
                                  java.lang.Object k,
                                  boolean uniqueKey,
                                  java.lang.Object host,
                                  int index,
                                  boolean newIndex)
Core function for persisting lists. this method persists items to the list. can be used for Maps as well as Lists

Parameters:
c - lists class
id - lists unique id
oc - objects class
kc - keys class
o - object to persist
k - objects key. can be null, is autoKeys
uniqueKey - guaranty single occurrence of key
host - host element
Returns:
objects id

getListId

public java.lang.String getListId(java.lang.Class c,
                                  java.lang.String id,
                                  java.lang.Object host)
build table name for list

Parameters:
c - class of list
id - unique id of list
Returns:
table name

getListId

public java.lang.String getListId(java.lang.Class c,
                                  java.lang.String id,
                                  java.lang.Object host,
                                  boolean raw)

prepareListTable

protected void prepareListTable(java.lang.String tname,
                                java.lang.Class o,
                                java.lang.Class k,
                                boolean uniqueKey)
Prepares a table for a list, if table does not exist

Parameters:
tname - desired table name
o - class of entry object
k - class of key object
uniqueKey -

prepareTable

protected void prepareTable(java.lang.Class c,
                            java.lang.Object o)
Create a table for a Class, if table doesn't exist

Parameters:
c - objects class
o - object to persist

checkTableAlternation

private boolean checkTableAlternation(java.lang.String tname,
                                      java.util.Map<java.lang.String,java.lang.String> scheme)
Checks for changes in the table scheme and tries to fix them

Parameters:
tname - taget table
scheme - new table scheme
Returns:
true if table exists

setDatabaseConnection

public void setDatabaseConnection(DatabaseConnection dbc)
set the current database connection

Parameters:
dbc -

getDatabaseConnection

public DatabaseConnection getDatabaseConnection()
returns the current database connection

Returns:

logonUser

public boolean logonUser(User user,
                         SalesPoint sp)

logoffUser

public void logoffUser(SalesPoint sp)
logoff user form given SalesPoint and remove PersistenceManager.LogonInformation record

Parameters:
sp -

getUserSessions

public java.util.List<PersistenceManager.LogonInformation> getUserSessions(User user)
returns a list of all PersistenceManager.LogonInformation for given user

Parameters:
user - user
Returns:

getUserSessions

public java.util.List<PersistenceManager.LogonInformation> getUserSessions()
returns a list of all PersistenceManager.LogonInformation

Returns:

registerShop

public void registerShop(Shop shop)
register shop instance

Parameters:
shop - shop to register

unregisterShop

public void unregisterShop()
unregister shop from datasource


attachExternalModificationListener

public boolean attachExternalModificationListener(java.lang.String tableid,
                                                  ExternalModificationListener eml)
add an ExternalModificationListener

Parameters:
tableid - table it is interested in
eml - the listener
Returns:
true on success

dettachExternalModificationListener

public void dettachExternalModificationListener(java.lang.String tableid,
                                                ExternalModificationListener eml)
remove ExternalModificationListener

Parameters:
tableid - table name
eml - the listener

printWarn

private void printWarn(java.lang.String msg)
print a warning message, if warn is on

Parameters:
msg -

printDbg

private void printDbg(java.lang.String msg)
print a debug message. if debug is on: to error stream. if off: to log file

Parameters:
msg -

printDbg

private void printDbg(java.lang.String msg,
                      PersistenceManager.PerformanceTimer pt)
print a debug message with taken time.

Parameters:
msg -
pt - timer to evaluate

propertyChange

public void propertyChange(java.beans.PropertyChangeEvent evt)
react on property change

Specified by:
propertyChange in interface java.beans.PropertyChangeListener