예제 #1
0
        private void TryPattern(String pattern, int numThreads, int numEvents)
        {
            var sendLock   = new Object();
            var threadPool = Executors.NewFixedThreadPool(numThreads);
            var future     = new Future <bool> [numThreads];
            var callables  = new SendEventWaitCallable[numThreads];

            for (int i = 0; i < numThreads; i++)
            {
                callables[i] = new SendEventWaitCallable(i, _engine, sendLock, EnumerationGenerator.Create(numEvents));
                future[i]    = threadPool.Submit(callables[i]);
            }

            var listener = new SupportMTUpdateListener[numEvents];

            for (int i = 0; i < numEvents; i++)
            {
                EPStatement stmt = _engine.EPAdministrator.CreatePattern(pattern);
                listener[i]  = new SupportMTUpdateListener();
                stmt.Events += listener[i].Update;

                lock (sendLock) {
                    Monitor.PulseAll(sendLock);
                }
            }

            foreach (SendEventWaitCallable callable in callables)
            {
                callable.SetShutdown(true);
            }

            lock (sendLock) {
                Monitor.PulseAll(sendLock);
            }

            threadPool.Shutdown();
            threadPool.AwaitTermination(new TimeSpan(0, 0, 10));


            for (int i = 0; i < numEvents; i++)
            {
                Assert.That(listener[i].AssertOneGetNewAndReset().Get("a"), Is.InstanceOf <SupportBean>());
            }
        }
예제 #2
0
        private void TryPattern(EPServiceProvider epService, string pattern, int numThreads, int numEvents)
        {
            var sendLock   = new Object();
            var threadPool = Executors.NewFixedThreadPool(numThreads);
            var future     = new Future <bool> [numThreads];
            var callables  = new SendEventWaitCallable[numThreads];

            for (int i = 0; i < numThreads; i++)
            {
                callables[i] = new SendEventWaitCallable(i, epService, sendLock, new GeneratorIterator(numEvents));
                future[i]    = threadPool.Submit(callables[i]);
            }

            var listener = new SupportMTUpdateListener[numEvents];

            for (int i = 0; i < numEvents; i++)
            {
                EPStatement stmt = epService.EPAdministrator.CreatePattern(pattern);
                listener[i]  = new SupportMTUpdateListener();
                stmt.Events += listener[i].Update;

                lock (sendLock) {
                    Monitor.PulseAll(sendLock);
                }
            }

            foreach (SendEventWaitCallable callable in callables)
            {
                callable.SetShutdown(true);
            }
            lock (sendLock) {
                Monitor.PulseAll(sendLock);
            }

            threadPool.Shutdown();
            threadPool.AwaitTermination(10, TimeUnit.SECONDS);

            for (int i = 0; i < numEvents; i++)
            {
                Assert.IsTrue(listener[i].AssertOneGetNewAndReset().Get("a") is SupportBean);
            }
        }