//Container/Client Staff private IObjectContainer GetContainerFromConfig(DB4ODatabaseElement dataBaseData, HttpContext context) { Debug.WriteLine(String.Format("GetContainerFromConfig (database: {0})", dataBaseData.Alias)); IObjectContainer container; switch (dataBaseData.ServerType) { case Db4oServerType.NetworkingServer: var clientConfig = Db4oClientServer.NewClientConfiguration(); if (dataBaseData.ExistAnyCustomConfiguration()) { clientConfig = dataBaseData.GetServerConfig <IClientConfiguration>(); } container = Db4oClientServer.OpenClient(clientConfig, dataBaseData.RemoteHost, dataBaseData.RemotePort, dataBaseData.RemoteUser, dataBaseData.RemotePassWord); break; case Db4oServerType.EmbeddedServer: default: var server = GetEmbeddedServer(dataBaseData, 0, context); container = server.OpenClient(); break; } BindContainerEvents(container, dataBaseData); return(container); }
private static void BindContainerEvents(IObjectContainer container, DB4ODatabaseElement dataBaseData) { Debug.WriteLine(String.Format("BindingContainerEvents (database: {0})", dataBaseData.Alias)); var eventRegistry = EventRegistryFactory.ForObjectContainer(container); eventRegistry.Activated += (sender, e) => { if (e.Object == null || !dataBaseData.FillIDB4OEntityInfo) { return; } var entityInfo = e.Object as IDB4OEntityInfo; if (entityInfo == null) { return; } if (entityInfo.HasDB4OEntityInfo()) { return; } entityInfo.FillDB4OInfo(e.ObjectContainer(), dataBaseData.FillMode); Debug.WriteLine(String.Format("FilledDB4OInfo (database {0})", dataBaseData.Alias)); }; }
private IObjectServer GetEmbeddedServer(DB4ODatabaseElement dataBaseData, int retries, HttpContext context) { IObjectServer database; var databaseAlias = dataBaseData.Alias; if (_repository.AnyDataBase()) { database = _repository.GetDataBase <IObjectServer>(databaseAlias); if (database != null) { Debug.WriteLine(String.Format("GetEmbeddedServer ({0}, retry {1}) return cached database from repository", dataBaseData.Alias, retries)); return(database); } } if (dataBaseData.ServerType == Db4oServerType.NetworkingServer) { throw new Exception(String.Format("The server '{0}' is remote and you can´t get a instance of this server", databaseAlias)); } lock (_thisLock) { var serverConfig = Db4oClientServer.NewServerConfiguration(); if (dataBaseData.ExistAnyCustomConfiguration()) { serverConfig = dataBaseData.GetServerConfig <IServerConfiguration>(); } try { database = Db4oClientServer.OpenServer( serverConfig, GetAbsolutePath(dataBaseData.FileDb4oPath, context), Embeddedportserver); } catch (DatabaseFileLockedException) { if (retries < dataBaseData.OpenServerRetries) { Debug.WriteLine(String.Format("DatabaseFileLockedException (database: {1}) retry {0}", retries, dataBaseData.Alias)); return(GetEmbeddedServer(dataBaseData, retries + 1, context)); } throw; } _repository.AddDataBase(databaseAlias, database); Debug.WriteLine(String.Format("AddDataBase (database: '{0}') to Repository", dataBaseData.Alias)); } return(database); }