Пример #1
0
        //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);
        }
Пример #2
0
        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));
            };
        }
Пример #3
0
        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);
        }