示例#1
0
        public void PerformPieceOfOperation(ISession prevSession)
        {
            Assert.IsNotNull(prevSession);

            using (ISession sess = sessManager.OpenSession())
            {
                Assert.IsNotNull(sess);
                Assert.IsTrue(SessionDelegate.AreEqual(sess, prevSession));
            }
        }
        protected bool EnlistIfNecessary(bool weAreSessionOwner,
                                         ITransaction transaction, SessionDelegate session)
        {
            if (transaction == null)
            {
                return(false);
            }

            IList list = (IList)transaction.Context["nh.session.enlisted"];

            bool shouldEnlist = false;

            if (list == null)
            {
                list = new ArrayList();

                list.Add(session);

                transaction.Context["nh.session.enlisted"] = list;

                shouldEnlist = true;
            }
            else
            {
                shouldEnlist = true;

                foreach (ISession sess in list)
                {
                    if (SessionDelegate.AreEqual(session, sess))
                    {
                        shouldEnlist = false;
                        break;
                    }
                }
            }

            if (shouldEnlist)
            {
                // TODO: propagate IsolationLevel, expose as transaction property

                transaction.Enlist(new ResourceAdapter(session.BeginTransaction()));

                if (weAreSessionOwner)
                {
                    transaction.RegisterSynchronization(
                        new SessionDisposeSynchronization(session));
                }
            }

            return(true);
        }
示例#3
0
        public void SharedSession()
        {
            var manager = container.Resolve <ISessionManager>();

            ISession session1 = manager.OpenSession();
            ISession session2 = manager.OpenSession();
            ISession session3 = manager.OpenSession();

            Assert.IsNotNull(session1);
            Assert.IsNotNull(session2);
            Assert.IsNotNull(session3);

            Assert.IsTrue(SessionDelegate.AreEqual(session1, session2));
            Assert.IsTrue(SessionDelegate.AreEqual(session1, session3));

            session3.Dispose();
            session2.Dispose();
            session1.Dispose();

            Assert.IsTrue(container.Resolve <ISessionStore>().IsCurrentActivityEmptyFor(Constants.DefaultAlias));
        }