org.neodatis.odb.impl.core.server.layers.layer3.engine
Class ClientStorageEngine

java.lang.Object
  extended by org.neodatis.odb.impl.core.layers.layer3.engine.StorageEngineAdapter
      extended by org.neodatis.odb.impl.core.server.layers.layer3.engine.ClientStorageEngine
All Implemented Interfaces:
IStorageEngine
Direct Known Subclasses:
SameVmClientEngine

public class ClientStorageEngine
extends StorageEngineAdapter


Field Summary
protected  java.lang.String connectionId
           
protected  IIntrospectionCallback introspectionCallbackForInsert
          This is a visitor used to execute some specific action(like calling 'Before Insert Trigger') when introspecting an object
protected  IIntrospectionCallback introspectionCallbackForUpdate
          This is a visitor used to execute some specific action when introspecting an object
static java.lang.String LOG_ID
           
protected  IMessageStreamer messageStreamer
           
static int nbcalls
           
static int nbdiffcalls
           
protected  IOSocketParameter parameters
           
protected  ICoreProvider provider
           
protected  java.util.List<ReturnValueProcessor> returnValueProcessors
           
 
Fields inherited from class org.neodatis.odb.impl.core.layers.layer3.engine.StorageEngineAdapter
currentTransactionId, isClosed, triggerManager
 
Constructor Summary
  ClientStorageEngine(IOSocketParameter parameters)
           
protected ClientStorageEngine(java.lang.String hostName, int port, java.lang.String baseId)
           
protected ClientStorageEngine(java.lang.String hostName, int port, java.lang.String baseId, java.lang.String user, java.lang.String password)
           
 
Method Summary
 ClassInfoList addClasses(ClassInfoList classInfoList)
          TODO Remove comment public ClassInfo addClass(ClassInfo newClassInfo, boolean addDependentClasses) { ClassInfoList ciList = new ClassInfoList(newClassInfo); ciList = addClasses(ciList); return session.getMetaModel ().getClassInfo(newClassInfo.getFullClassName(),true); }
 void addCommitListener(ICommitListener commitListener)
           
 void addDeleteTrigger(java.lang.Class clazz, DeleteTrigger trigger)
           
 void addDeleteTrigger(DeleteTrigger trigger)
           
 void addIndexOn(java.lang.String className, java.lang.String indexName, java.lang.String[] indexFields, boolean verbose, boolean acceptMultipleValuesForSameKey)
           
 void addInsertTrigger(java.lang.Class clazz, InsertTrigger trigger)
           
 void addInsertTrigger(InsertTrigger trigger)
           
 void addOidTrigger(java.lang.Class clazz, OIDTrigger trigger)
           
 void addOidTrigger(OIDTrigger trigger)
           
 void addSelectTrigger(java.lang.Class clazz, SelectTrigger trigger)
           
 void addSelectTrigger(SelectTrigger trigger)
           
 void addSession(ISession session, boolean readMetamodel)
           
 void addUpdateTrigger(java.lang.Class clazz, UpdateTrigger trigger)
           
 void addUpdateTrigger(UpdateTrigger trigger)
           
 ISession buildDefaultSession()
           
 IObjectIntrospector buildObjectIntrospector()
           
 IObjectReader buildObjectReader()
           
 IObjectWriter buildObjectWriter()
           
 ITriggerManager buildTriggerManager()
           
 void close()
           
 void commit()
           
 long count(CriteriaQuery query)
           
 void defragmentTo(java.lang.String newFileName)
           
 OID delete(java.lang.Object object, boolean cascade)
          Actually deletes an object database
 void deleteIndex(java.lang.String className, java.lang.String indexName, boolean verbose)
           
 void deleteObjectWithOid(OID oid, boolean cascade)
          Delete an object from the database with the id
 void disconnect(java.lang.Object object)
          Used to disconnect the object from the current session.
 IBaseIdentification getBaseIdentification()
           
 ClassRepresentation getClassRepresentation(java.lang.Class clazz)
           
 IOdbList<ICommitListener> getCommitListeners()
           
 NonNativeObjectInfo getMetaObjectFromOid(OID oid)
          FIXME : not very efficient because it retrieves the full object
 java.lang.Object getObjectFromOid(OID oid)
           
 OID getObjectId(java.lang.Object object, boolean throwExceptionIfDoesNotExist)
           
 ObjectInfoHeader getObjectInfoHeaderFromOid(OID oid, boolean useCache)
           
<T> Objects<T>
getObjectInfos(IQuery query, boolean inMemory, int startIndex, int endIndex, boolean returnOjects)
          Return Meta representation of objects
<T> Objects<T>
getObjectInfos(java.lang.String fullClassName, boolean inMemory, int startIndex, int endIndex, boolean returnOjects)
           
 IObjectIntrospector getObjectIntrospector()
           
<T> Objects<T>
getObjects(java.lang.Class clazz)
           
<T> Objects<T>
getObjects(java.lang.Class clazz, boolean inMemory)
           
<T> Objects<T>
getObjects(java.lang.Class clazz, boolean inMemory, int startIndex, int endIndex)
           
<T> Objects<T>
getObjects(IQuery query)
           
<T> Objects<T>
getObjects(IQuery query, boolean inMemory)
           
<T> Objects<T>
getObjects(IQuery query, boolean inMemory, int startIndex, int endIndex)
           
 IRefactorManager getRefactorManager()
          Returns the object used to refactor the database
 ISession getSession(boolean throwExceptionIfDoesNotExist)
           
 ITriggerManager getTriggerManager()
           
 Values getValues(IValuesQuery query, int startIndex, int endIndex)
           
protected  void initMessageStreamer()
           
protected  void initODBConnection()
           
 void internalDeleteObjectWithOid(OID oid, boolean cascade)
          Delete an object from the database with the id
 OID internalStore(OID oid, java.lang.Object object, boolean forceUpdate)
          This method is synchronized to allow multi-threading.
 boolean isLocal()
          Used to know if the storage engine is executed in local mode (embedded mode) or client server mode
 void rebuildIndex(java.lang.String className, java.lang.String indexName, boolean verbose)
           
 void reconnect(java.lang.Object object, OID oid)
          Reconnect an object to the current session.
 void resetCommitListeners()
           
 void rollback()
           
 void run()
          or shutdown hook
 Message sendMessage(Message msg)
          Opens socket send message and close.
 OID store(java.lang.Object object)
          Store an object in an database.
 OID store(OID oid, java.lang.Object object)
           
 OID updateObject(NonNativeObjectInfo nnoi2, boolean forceUpdate)
          Updates an object already transformed into meta representation!
 OID writeObjectInfo(OID oid, NonNativeObjectInfo aoi, long position, boolean updatePointers)
          Write an object already transformed into meta representation!
 
Methods inherited from class org.neodatis.odb.impl.core.layers.layer3.engine.StorageEngineAdapter
addClass, addDeleteTriggerFor, addInsertTriggerFor, addOidTriggerFor, addSelectTriggerFor, addUpdateTriggerFor, checkMetaModelCompatibility, count, count, criteriaQuery, criteriaQuery, deleteObjectWithOid, get2MetaModel, getAllObjectIdInfos, getAllObjectIds, getCurrentIdBlockMaxOid, getCurrentIdBlockNumber, getCurrentIdBlockPosition, getCurrentTransactionId, getDatabaseId, getFsi, getMaxOid, getObjectFromId, getObjectInfos, getObjectReader, getObjects, getObjectWriter, getVersion, internalDelete, isClosed, mainStoreObject, persistClass, reconnect, setCurrentIdBlockInfos, setCurrentTransactionId, setDatabaseId, setDatabaseId, setLastODBCloseStatus, setMetaModel, setNbClasses, setVersion
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOG_ID

public static final java.lang.String LOG_ID
See Also:
Constant Field Values

nbcalls

public static int nbcalls

nbdiffcalls

public static int nbdiffcalls

messageStreamer

protected IMessageStreamer messageStreamer

connectionId

protected java.lang.String connectionId

parameters

protected IOSocketParameter parameters

provider

protected ICoreProvider provider

introspectionCallbackForInsert

protected IIntrospectionCallback introspectionCallbackForInsert
This is a visitor used to execute some specific action(like calling 'Before Insert Trigger') when introspecting an object


introspectionCallbackForUpdate

protected IIntrospectionCallback introspectionCallbackForUpdate
This is a visitor used to execute some specific action when introspecting an object


returnValueProcessors

protected java.util.List<ReturnValueProcessor> returnValueProcessors
Constructor Detail

ClientStorageEngine

protected ClientStorageEngine(java.lang.String hostName,
                              int port,
                              java.lang.String baseId)

ClientStorageEngine

protected ClientStorageEngine(java.lang.String hostName,
                              int port,
                              java.lang.String baseId,
                              java.lang.String user,
                              java.lang.String password)

ClientStorageEngine

public ClientStorageEngine(IOSocketParameter parameters)
Method Detail

buildDefaultSession

public ISession buildDefaultSession()

initMessageStreamer

protected void initMessageStreamer()

initODBConnection

protected void initODBConnection()

sendMessage

public Message sendMessage(Message msg)
Opens socket send message and close.

Parameters:
msg -
Returns:
The response message

commit

public void commit()
Specified by:
commit in interface IStorageEngine
Overrides:
commit in class StorageEngineAdapter

close

public void close()
Specified by:
close in interface IStorageEngine
Overrides:
close in class StorageEngineAdapter

rollback

public void rollback()
Specified by:
rollback in interface IStorageEngine
Overrides:
rollback in class StorageEngineAdapter

store

public OID store(java.lang.Object object)
Description copied from interface: IStorageEngine
Store an object in an database. To detect if object must be updated or insert, we use the cache. To update an object, it must be first selected from the database. When an object is to be stored, if it exist in the cache, then it will be updated, else it will be inserted as a new object. If the object is null, the cache will be used to check if the meta representation is in the cache


store

public OID store(OID oid,
                 java.lang.Object object)

internalStore

public OID internalStore(OID oid,
                         java.lang.Object object,
                         boolean forceUpdate)
This method is synchronized to allow multi-threading. if not synchronized, the client/server id synchronization will fail check junit org.neodatis.odb.test.multithread.sameVm.TestSameVmClientServerMultiThread.testSameVmOneOdbInTwoThreadsX


addClasses

public ClassInfoList addClasses(ClassInfoList classInfoList)
TODO Remove comment public ClassInfo addClass(ClassInfo newClassInfo, boolean addDependentClasses) { ClassInfoList ciList = new ClassInfoList(newClassInfo); ciList = addClasses(ciList); return session.getMetaModel ().getClassInfo(newClassInfo.getFullClassName(),true); }

Specified by:
addClasses in interface IStorageEngine
Overrides:
addClasses in class StorageEngineAdapter

getObjects

public <T> Objects<T> getObjects(java.lang.Class clazz)

getObjects

public <T> Objects<T> getObjects(java.lang.Class clazz,
                                 boolean inMemory)

getObjects

public <T> Objects<T> getObjects(java.lang.Class clazz,
                                 boolean inMemory,
                                 int startIndex,
                                 int endIndex)
Specified by:
getObjects in interface IStorageEngine
Specified by:
getObjects in class StorageEngineAdapter

count

public long count(CriteriaQuery query)

delete

public OID delete(java.lang.Object object,
                  boolean cascade)
Description copied from interface: IStorageEngine
Actually deletes an object database

Specified by:
delete in interface IStorageEngine
Overrides:
delete in class StorageEngineAdapter

deleteObjectWithOid

public void deleteObjectWithOid(OID oid,
                                boolean cascade)
Delete an object from the database with the id

Parameters:
oid - The object id to be deleted @

internalDeleteObjectWithOid

public void internalDeleteObjectWithOid(OID oid,
                                        boolean cascade)
Delete an object from the database with the id

Parameters:
oid - The object id to be deleted @

getObjects

public <T> Objects<T> getObjects(IQuery query)

getObjects

public <T> Objects<T> getObjects(IQuery query,
                                 boolean inMemory)

getObjects

public <T> Objects<T> getObjects(IQuery query,
                                 boolean inMemory,
                                 int startIndex,
                                 int endIndex)
Specified by:
getObjects in interface IStorageEngine
Overrides:
getObjects in class StorageEngineAdapter

getValues

public Values getValues(IValuesQuery query,
                        int startIndex,
                        int endIndex)

getObjectId

public OID getObjectId(java.lang.Object object,
                       boolean throwExceptionIfDoesNotExist)
Specified by:
getObjectId in interface IStorageEngine
Overrides:
getObjectId in class StorageEngineAdapter

getObjectFromOid

public java.lang.Object getObjectFromOid(OID oid)

getMetaObjectFromOid

public NonNativeObjectInfo getMetaObjectFromOid(OID oid)
FIXME : not very efficient because it retrieves the full object


getObjectInfoHeaderFromOid

public ObjectInfoHeader getObjectInfoHeaderFromOid(OID oid,
                                                   boolean useCache)

defragmentTo

public void defragmentTo(java.lang.String newFileName)
Specified by:
defragmentTo in interface IStorageEngine
Overrides:
defragmentTo in class StorageEngineAdapter

getClassRepresentation

public ClassRepresentation getClassRepresentation(java.lang.Class clazz)

run

public void run()
or shutdown hook


addUpdateTrigger

public void addUpdateTrigger(UpdateTrigger trigger)

addInsertTrigger

public void addInsertTrigger(InsertTrigger trigger)

addOidTrigger

public void addOidTrigger(OIDTrigger trigger)

addDeleteTrigger

public void addDeleteTrigger(DeleteTrigger trigger)

addSelectTrigger

public void addSelectTrigger(SelectTrigger trigger)

getBaseIdentification

public IBaseIdentification getBaseIdentification()

getObjectInfos

public <T> Objects<T> getObjectInfos(IQuery query,
                                     boolean inMemory,
                                     int startIndex,
                                     int endIndex,
                                     boolean returnOjects)
Description copied from interface: IStorageEngine
Return Meta representation of objects

Specified by:
getObjectInfos in interface IStorageEngine
Overrides:
getObjectInfos in class StorageEngineAdapter
Parameters:
query - The query to select objects
inMemory - To indicate if object must be all loaded in memory
startIndex - First object index
endIndex - Last object index
returnOjects - To indicate if object instances must be created
Returns:
The list of objects @

getObjectInfos

public <T> Objects<T> getObjectInfos(java.lang.String fullClassName,
                                     boolean inMemory,
                                     int startIndex,
                                     int endIndex,
                                     boolean returnOjects)

getSession

public ISession getSession(boolean throwExceptionIfDoesNotExist)
Specified by:
getSession in interface IStorageEngine
Overrides:
getSession in class StorageEngineAdapter

updateObject

public OID updateObject(NonNativeObjectInfo nnoi2,
                        boolean forceUpdate)
Description copied from interface: IStorageEngine
Updates an object already transformed into meta representation!

Parameters:
nnoi2 - The Object Meta representation
Returns:
The OID of the update object @

writeObjectInfo

public OID writeObjectInfo(OID oid,
                           NonNativeObjectInfo aoi,
                           long position,
                           boolean updatePointers)
Description copied from interface: IStorageEngine
Write an object already transformed into meta representation!

Returns:
te object position(or id (if <0, it is id)) @

addSession

public void addSession(ISession session,
                       boolean readMetamodel)

addIndexOn

public void addIndexOn(java.lang.String className,
                       java.lang.String indexName,
                       java.lang.String[] indexFields,
                       boolean verbose,
                       boolean acceptMultipleValuesForSameKey)
Parameters:
className - The class name on which the index must be created
indexName - The name of the index
indexFields - The list of fields of the index
verbose - A boolean value to indicate of ODB must describe what it is doing @ @

rebuildIndex

public void rebuildIndex(java.lang.String className,
                         java.lang.String indexName,
                         boolean verbose)

deleteIndex

public void deleteIndex(java.lang.String className,
                        java.lang.String indexName,
                        boolean verbose)

addCommitListener

public void addCommitListener(ICommitListener commitListener)

getCommitListeners

public IOdbList<ICommitListener> getCommitListeners()

getRefactorManager

public IRefactorManager getRefactorManager()
Description copied from interface: IStorageEngine
Returns the object used to refactor the database


resetCommitListeners

public void resetCommitListeners()

isLocal

public boolean isLocal()
Description copied from interface: IStorageEngine
Used to know if the storage engine is executed in local mode (embedded mode) or client server mode


getTriggerManager

public ITriggerManager getTriggerManager()
Specified by:
getTriggerManager in interface IStorageEngine
Overrides:
getTriggerManager in class StorageEngineAdapter

disconnect

public void disconnect(java.lang.Object object)
Description copied from interface: IStorageEngine
Used to disconnect the object from the current session. The object is removed from the cache

Specified by:
disconnect in interface IStorageEngine
Overrides:
disconnect in class StorageEngineAdapter

reconnect

public void reconnect(java.lang.Object object,
                      OID oid)
Reconnect an object to the current session. It connects the object and all the dependent objects (Objects accessible from the object graph of the root object
        This code is duplicated here because we don't have ObjectReader on client side,
 so all needed object reader methods are implement in the ClientStorageEngine class
 


addDeleteTrigger

public void addDeleteTrigger(java.lang.Class clazz,
                             DeleteTrigger trigger)
Specified by:
addDeleteTrigger in class StorageEngineAdapter

addInsertTrigger

public void addInsertTrigger(java.lang.Class clazz,
                             InsertTrigger trigger)
Specified by:
addInsertTrigger in class StorageEngineAdapter

addOidTrigger

public void addOidTrigger(java.lang.Class clazz,
                          OIDTrigger trigger)
Specified by:
addOidTrigger in class StorageEngineAdapter

addSelectTrigger

public void addSelectTrigger(java.lang.Class clazz,
                             SelectTrigger trigger)
Specified by:
addSelectTrigger in class StorageEngineAdapter

addUpdateTrigger

public void addUpdateTrigger(java.lang.Class clazz,
                             UpdateTrigger trigger)
Specified by:
addUpdateTrigger in class StorageEngineAdapter

buildObjectIntrospector

public IObjectIntrospector buildObjectIntrospector()

buildObjectReader

public IObjectReader buildObjectReader()

buildObjectWriter

public IObjectWriter buildObjectWriter()

buildTriggerManager

public ITriggerManager buildTriggerManager()

getObjectIntrospector

public IObjectIntrospector getObjectIntrospector()