예제 #1
0
            /// <exception cref="System.Exception"></exception>
            public virtual void TestCommittedCallbacks()
            {
                Lock4        lockObject  = new Lock4();
                BooleanByRef ownEvent    = new BooleanByRef(false);
                BooleanByRef gotEvent    = new BooleanByRef(false);
                BooleanByRef shallListen = new BooleanByRef(false);

                OwnCommittedCallbacksFixture.IContainerFactory factory = ((OwnCommittedCallbacksFixture.IContainerFactory
                                                                           )Factory.Value);
                OwnCommittedCallbacksFixture.CommitAction action = ((OwnCommittedCallbacksFixture.CommitAction
                                                                     )Action.Value);
                factory.Open();
                IObjectContainer clientA  = factory.OpenClient();
                IObjectContainer clientB  = factory.OpenClient();
                IEventRegistry   registry = EventRegistryFactory.ForObjectContainer(clientA);

                registry.Committed += new System.EventHandler <Db4objects.Db4o.Events.CommitEventArgs>
                                          (new _IEventListener4_153(shallListen, gotEvent, ownEvent, lockObject).OnEvent);
                lockObject.Run(new _IClosure4_170(shallListen, action, clientA, clientB, lockObject
                                                  ));
                shallListen.value = false;
                clientB.Close();
                clientA.Close();
                factory.Close();
                Assert.IsTrue(gotEvent.value);
                Assert.AreEqual(action.SelectsFirstClient(), ownEvent.value);
            }
예제 #2
0
        /// <exception cref="System.Exception"></exception>
        public virtual void TestExceptionInUpdateCallback()
        {
            var doThrow = new BooleanByRef();

            EventRegistryFactory.ForObjectContainer(Db()).Updated += new _IEventListener4_42(doThrow).OnEvent;
            var holder = new Holder
                             ();
            var item = new Item();

            Store(holder);
            Store(item);
            Commit();
            doThrow.value = true;
            holder.list   = new ArrayList();
            holder.list.Add(item);
            try
            {
                Db().Store(holder, int.MaxValue);
            }
            catch (Exception)
            {
            }
            // rex.printStackTrace();
            Checkdb();
            Commit();
            Checkdb();
            Reopen();
            Checkdb();
        }
예제 #3
0
        public static void Main(string[] args)
        {
            using (IObjectContainer container = Db4oEmbedded.OpenFile("database.db4"))
            {
                // #example: Register validation for the create and update event
                IEventRegistry events = EventRegistryFactory.ForObjectContainer(container);
                events.Creating += ValidateObject;
                events.Updating += ValidateObject;
                // #end example


                // #example: Storing a valid pilot
                var pilot = new Pilot {
                    Name = "Joe"
                };
                container.Store(pilot);
                // #end example


                // #example: Storing a invalid pilot throws exception
                var otherPilot = new Pilot {
                    Name = ""
                };
                try
                {
                    container.Store(otherPilot);
                }
                catch (EventException e)
                {
                    ValidationException cause = (ValidationException)e.InnerException;
                    Console.WriteLine(cause.ValidationResult.ErrorMessage);
                }
                // #end example
            }
        }
        public void Apply(IInternalObjectContainer container)
        {
            My <LinqQueryMonitor> .Instance.Initialize();

            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(container);

            PerformanceCounter unoptimizedNativeQueriesPerSec = Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.UnoptimizedNativeQueriesPerSec, false);
            PerformanceCounter nativeQueriesPerSec            = Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.NativeQueriesPerSec, false);

            container.GetNativeQueryHandler().QueryExecution += delegate(object sender, QueryExecutionEventArgs args)
            {
                if (args.ExecutionKind == QueryExecutionKind.Unoptimized)
                {
                    unoptimizedNativeQueriesPerSec.Increment();
                }

                nativeQueriesPerSec.Increment();
            };

            eventRegistry.Closing += delegate
            {
                nativeQueriesPerSec.RemoveInstance();

                nativeQueriesPerSec.Dispose();
                unoptimizedNativeQueriesPerSec.Dispose();

                container.WithEnvironment(delegate
                {
                    My <LinqQueryMonitor> .Instance.Dispose();
                });
            };
        }
예제 #5
0
        public ClientSlotCacheImpl(ClientObjectContainer clientObjectContainer)
        {
            var eventRegistry = EventRegistryFactory.ForObjectContainer(clientObjectContainer
                                                                        );

            eventRegistry.Activated += new _IEventListener4_29(this).OnEvent;
        }
예제 #6
0
        /// <exception cref="System.Exception"></exception>
        public virtual void TestExceptionInUpdateCallback()
        {
            BooleanByRef doThrow = new BooleanByRef();

            EventRegistryFactory.ForObjectContainer(Db()).Updated += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                                                         (new _IEventListener4_42(doThrow).OnEvent);
            ExceptionsInCallbackTestCase.Holder holder = new ExceptionsInCallbackTestCase.Holder
                                                             ();
            ExceptionsInCallbackTestCase.Item item = new ExceptionsInCallbackTestCase.Item();
            Store(holder);
            Store(item);
            Commit();
            doThrow.value = true;
            holder.list   = new ArrayList();
            holder.list.Add(item);
            try
            {
                Db().Store(holder, int.MaxValue);
            }
            catch (Exception)
            {
            }
            // rex.printStackTrace();
            Checkdb();
            Commit();
            Checkdb();
            Reopen();
            Checkdb();
        }
예제 #7
0
        private void RegisterEventHandlers()
        {
            IObjectContainer deletionEventSource = Db();

            if (Fixture() is IDb4oClientServerFixture)
            {
                IDb4oClientServerFixture clientServerFixture = (IDb4oClientServerFixture)Fixture(
                    );
                deletionEventSource = clientServerFixture.Server().Ext().ObjectContainer();
            }
            IEventRegistry eventRegistry         = EventRegistryFactory.ForObjectContainer(Db());
            IEventRegistry deletionEventRegistry = EventRegistryFactory.ForObjectContainer(deletionEventSource
                                                                                           );

            // No dedicated IncrementListener class due to sharpen event semantics
            deletionEventRegistry.Deleted += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                                 (new _IEventListener4_91(this).OnEvent);
            eventRegistry.Activated += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                           (new _IEventListener4_96(this).OnEvent);
            eventRegistry.Committed += new System.EventHandler <Db4objects.Db4o.Events.CommitEventArgs>
                                           (new _IEventListener4_101(this).OnEvent);
            eventRegistry.Created += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                         (new _IEventListener4_106(this).OnEvent);
            eventRegistry.Updated += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                         (new _IEventListener4_111(this).OnEvent);
        }
        private void RegisterPushedUpdates(IExtObjectContainer client)
        {
            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(client);

            eventRegistry.Committed += new System.EventHandler <Db4objects.Db4o.Events.CommitEventArgs>
                                           (new _IEventListener4_120(this, client).OnEvent);
        }
예제 #9
0
        private void FlushOnQueryStarted(IInternalObjectContainer container)
        {
            IEventRegistry registry = EventRegistryFactory.ForObjectContainer(container);

            registry.QueryStarted += new System.EventHandler <Db4objects.Db4o.Events.QueryEventArgs>
                                         (new _IEventListener4_46(this).OnEvent);
        }
예제 #10
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));
            };
        }
예제 #11
0
            public void Apply(IInternalObjectContainer container)
            {
                IEventRegistry registry = EventRegistryFactory.ForObjectContainer(container);

                registry.Creating += new CancellableObjectEventHandler(registry_Creating);
                registry.Updating += new CancellableObjectEventHandler(registry_Updating);
            }
예제 #12
0
            /// <exception cref="System.Exception"></exception>
            public virtual void TestCommittedCallbacks()
            {
                var lockObject  = new Lock4();
                var ownEvent    = new BooleanByRef(false);
                var gotEvent    = new BooleanByRef(false);
                var shallListen = new BooleanByRef(false);
                var factory     = ((IContainerFactory
                                    )Factory.Value);
                var action = ((CommitAction
                               )Action.Value);

                factory.Open();
                var clientA  = factory.OpenClient();
                var clientB  = factory.OpenClient();
                var registry = EventRegistryFactory.ForObjectContainer(clientA);

                registry.Committed += new _IEventListener4_153(shallListen, gotEvent, ownEvent, lockObject).OnEvent;
                lockObject.Run(new _IClosure4_170(shallListen, action, clientA, clientB, lockObject
                                                  ));
                shallListen.value = false;
                clientB.Close();
                clientA.Close();
                factory.Close();
                Assert.IsTrue(gotEvent.value);
                Assert.AreEqual(action.SelectsFirstClient(), ownEvent.value);
            }
예제 #13
0
        private static void EventsClientServer()
        {
            CleanUp();
            StoreJoe();

            using (IObjectServer server = OpenServer())
            {
                IEventRegistry eventsOnServer = EventRegistryFactory.ForObjectContainer(server.Ext().ObjectContainer());
                RegisterAFewEvents(eventsOnServer, "db4o server");

                IObjectContainer client1         = OpenClient();
                IEventRegistry   eventsOnClient1 = EventRegistryFactory.ForObjectContainer(client1);
                RegisterAFewEvents(eventsOnClient1, "db4o client 1");
                RunOperations(client1);


                IObjectContainer client2         = OpenClient();
                IEventRegistry   eventsOnClient2 = EventRegistryFactory.ForObjectContainer(client2);
                RegisterAFewEvents(eventsOnClient2, "db4o client 2");

                SleepForAWhile();
                client1.Dispose();
                client2.Dispose();
            }

            CleanUp();
        }
        public void Apply(IInternalObjectContainer container)
        {
            PerformanceCounter queriesPerSec         = null;
            PerformanceCounter classIndexScansPerSec = null;

            container.WithEnvironment(delegate
            {
                queriesPerSec         = Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.QueriesPerSec, false);
                classIndexScansPerSec = Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.ClassIndexScansPerSec, false);
            });

            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(container);

            eventRegistry.QueryFinished += delegate
            {
                queriesPerSec.Increment();
            };

            container.Configure().Diagnostic().AddListener(new DiagnosticListener(classIndexScansPerSec));

            eventRegistry.Closing += delegate
            {
                queriesPerSec.RemoveInstance();
                classIndexScansPerSec.RemoveInstance();

                queriesPerSec.Dispose();
                classIndexScansPerSec.Dispose();
            };
        }
예제 #15
0
        private static void CancelInEvent()
        {
            CleanUp();
            StoreJoe();

            using (IObjectContainer container = OpenEmbedded())
            {
                // #example: Cancel store operation
                IEventRegistry events = EventRegistryFactory.ForObjectContainer(container);
                events.Creating +=
                    delegate(object sender, CancellableObjectEventArgs args)
                {
                    if (args.Object is Person)
                    {
                        Person p = (Person)args.Object;
                        if (p.Name.Equals("Joe Junior"))
                        {
                            args.Cancel();
                        }
                    }
                };

                // #end example
                container.Store(new Person("Joe Junior"));

                int personCount = container.Query <Person>().Count;
                Console.WriteLine("Only " + personCount + " because store was cancelled");
            }
            CleanUp();
        }
예제 #16
0
        private static void CommitEvents()
        {
            CleanUp();
            StoreJoe();

            using (IObjectContainer container = OpenEmbedded())
            {
                // #example: Commit-info
                IEventRegistry events = EventRegistryFactory.ForObjectContainer(container);
                events.Committed +=
                    delegate(object sender, CommitEventArgs args)
                {
                    foreach (LazyObjectReference reference in args.Added)
                    {
                        Console.WriteLine("Added " + reference.GetObject());
                    }
                    foreach (LazyObjectReference reference in args.Updated)
                    {
                        Console.WriteLine("Updated " + reference.GetObject());
                    }
                    foreach (FrozenObjectInfo reference in args.Deleted)
                    {
                        //the deleted info might doesn't contain the object anymore and
                        //return the null.
                        Console.WriteLine("Deleted " + reference.GetObject());
                    }
                };
                // #end example
                RunOperations(container);
            }
            CleanUp();
        }
예제 #17
0
        static void Main()
        {
            var config = Db4oEmbedded.NewConfiguration();

            config.File.Storage = new MemoryStorage();
            var container = Db4oEmbedded.OpenFile(config, "IN-MEMORY");

            var client = container.Ext().OpenSession();

            var clientEvents = EventRegistryFactory.ForObjectContainer(client);

            clientEvents.Committed += (s, a) =>
            {
                foreach (IObjectInfo added in a.Added)
                {
                    System.Console.WriteLine(added.GetObject());
                }
            };

            container.Store(new Item {
                Value = 1
            });
            container.Commit();
            container.Store(new Item {
                Value = 2
            });
            container.Commit();
            container.Store(new Item {
                Value = 3
            });
            container.Commit();

            client.Close();
            container.Close();
        }
예제 #18
0
        private static MutableInteger ActivationCounter(IObjectContainer container)
        {
            var activationCounter = new MutableInteger();

            EventRegistryFactory.ForObjectContainer(container)
            .Activating += (sender, args) => activationCounter.Increment();
            return(activationCounter);
        }
예제 #19
0
        public ClientSlotCacheImpl(ClientObjectContainer clientObjectContainer)
        {
            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(clientObjectContainer
                                                                                   );

            eventRegistry.Activated += new System.EventHandler <Db4objects.Db4o.Events.ObjectInfoEventArgs>
                                           (new _IEventListener4_29(this).OnEvent);
        }
예제 #20
0
        protected override void ConfigureSession(IObjectContainer session)
        {
            base.ConfigureSession(session);

            var registry = EventRegistryFactory.ForObjectContainer(session);

            registry.Activated += new EventHandler <ObjectInfoEventArgs>(ActivateThing);
            registry.Created   += new EventHandler <ObjectInfoEventArgs>(ThingCreated);
        }
예제 #21
0
 private static void RegisterForEventsOnTheServer()
 {
     // #example: register for events on the server
     IObjectServer server =
         Db4oClientServer.OpenServer(DatabaseFileName, PortNumber);
     IEventRegistry eventsOnServer =
         EventRegistryFactory.ForObjectContainer(server.Ext().ObjectContainer());
     // #end example
 }
        private void AssertEventThrows(string eventName, ICodeBlock codeBlock, IProcedure4
                                       listenerSetter)
        {
            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(Db());

            listenerSetter.Apply(eventRegistry);
            Assert.Expect(typeof(EventException), typeof(NotImplementedException), codeBlock,
                          eventName);
        }
        public virtual void TestClassRegistrationEvents()
        {
            var eventFlag = new EventFlag
                                ();
            var registry = EventRegistryFactory.ForObjectContainer(Db());

            registry.ClassRegistered += new _IEventListener4_23(eventFlag).OnEvent;
            Store(new Data());
            Assert.IsTrue(eventFlag.eventOccurred);
        }
예제 #24
0
        public static void Install(IObjectContainer installOn)
        {
            var events  = EventRegistryFactory.ForObjectContainer(installOn);
            var support = new AutoIncrementSupport();

            events.Creating += (sender, args)
                               => support.IncrementIdsFor(args.Object, installOn);
            events.Committing += (sender, args)
                                 => support.StoreState(installOn);
        }
예제 #25
0
 // Nothing to do...
 /// <summary>internal method, public for implementation reasons.</summary>
 /// <remarks>internal method, public for implementation reasons.</remarks>
 public virtual void Apply(IInternalObjectContainer objectContainer)
 {
     if (objectContainer.IsClient)
     {
         throw new InvalidOperationException(GetType().FullName + " should be configured on the server."
                                             );
     }
     EventRegistryFactory.ForObjectContainer(objectContainer).Committing += new System.EventHandler <Db4objects.Db4o.Events.CommitEventArgs>
                                                                                (new _IEventListener4_46(this, objectContainer).OnEvent);
 }
예제 #26
0
파일: Db.cs 프로젝트: jenseralmeida/nfroggy
        public static void Open()
        {
            Db4oFactory.Configure().Queries().EvaluationMode(QueryEvaluationMode.Snapshot);
            _Current = Db4oFactory.OpenFile("yapFile.yap");
            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(_Current);

            eventRegistry.Creating   += eventRegistry_Validate;
            eventRegistry.Updating   += eventRegistry_Validate;
            eventRegistry.Committing += eventRegistry_Committing;
            _Validators = new Dictionary <Type, ObjectValidator>();
        }
예제 #27
0
        public virtual void TestClassRegistrationEvents()
        {
            ClassRegistrationEventsTestCase.EventFlag eventFlag = new ClassRegistrationEventsTestCase.EventFlag
                                                                      ();
            IEventRegistry registry = EventRegistryFactory.ForObjectContainer(Db());

            registry.ClassRegistered += new System.EventHandler <Db4objects.Db4o.Events.ClassEventArgs>
                                            (new _IEventListener4_23(eventFlag).OnEvent);
            Store(new ClassRegistrationEventsTestCase.Data());
            Assert.IsTrue(eventFlag.eventOccurred);
        }
        public void Apply(IInternalObjectContainer container)
        {
            PerformanceCounter storedObjectsPerSec =
                Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.ObjectsStoredPerSec, false);
            PerformanceCounter activatedObjectsPerSec =
                Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.ObjectsActivatedPerSec, false);
            PerformanceCounter deactivatedObjectsPerSec =
                Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.ObjectsDeactivatedPerSec, false);
            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(container);

            EventHandler <ObjectInfoEventArgs> eventHandler = delegate
            {
                storedObjectsPerSec.Increment();
            };

            eventRegistry.Created += eventHandler;
            eventRegistry.Updated += eventHandler;

            eventRegistry.Activated += delegate
            {
                activatedObjectsPerSec.Increment();
            };
            eventRegistry.Deactivated += delegate
            {
                deactivatedObjectsPerSec.Increment();
            };

            eventRegistry.Closing += delegate
            {
                storedObjectsPerSec.Dispose();
                activatedObjectsPerSec.Dispose();
                deactivatedObjectsPerSec.Dispose();

                storedObjectsPerSec.RemoveInstance();
            };
            if (container.IsClient)
            {
                return;
            }

            PerformanceCounter deletedObjectsPerSec =
                Db4oPerformanceCounters.CounterFor(PerformanceCounterSpec.ObjectsDeletedPerSec, false);

            eventRegistry.Deleted += delegate
            {
                deletedObjectsPerSec.Increment();
            };

            eventRegistry.Closing += delegate
            {
                deletedObjectsPerSec.Dispose();
            };
        }
예제 #29
0
        private void AssertQueryEvents(IRunnable query)
        {
            var events        = new ArrayList();
            var eventRegistry = EventRegistryFactory.ForObjectContainer(FileSession
                                                                            ());

            eventRegistry.QueryStarted  += new _IEventListener4_40(events).OnEvent;
            eventRegistry.QueryFinished += new _IEventListener4_45(events).OnEvent;
            query.Run();
            string[] expected = { QueryStarted, QueryFinished };
            Iterator4Assert.AreEqual(expected, Iterators.Iterator(events));
        }
예제 #30
0
        public virtual void TestTransactionInEventArgs()
        {
            var factory    = EventRegistryFactory.ForObjectContainer(Db());
            var called     = new BooleanByRef();
            var foundTrans = new ObjectByRef();

            factory.Creating += new _IEventListener4_20(called, foundTrans).OnEvent;
            Db().Store(new Item());
            Db().Commit();
            Assert.IsTrue(called.value);
            Assert.AreSame(Trans(), foundTrans.value);
        }