示例#1
0
 public virtual void Release(ShutdownMode mode, Transaction transaction, bool rollbackOnClose
                             )
 {
     lock (_mainContainer.Lock())
     {
         ClientTransactionPool.ContainerCount entry = (ClientTransactionPool.ContainerCount
                                                       )_transaction2Container.Get(transaction);
         entry.Container().CloseTransaction(transaction, false, mode.IsFatal() ? false : rollbackOnClose
                                            );
         _transaction2Container.Remove(transaction);
         entry.Release();
         if (entry.IsEmpty())
         {
             _fileName2Container.Remove(entry.FileName());
             try
             {
                 entry.Close(mode);
             }
             catch (Exception t)
             {
                 // If we are in fatal ShutdownMode close will
                 // throw but we want to continue shutting down
                 // all entries.
                 Sharpen.Runtime.PrintStackTrace(t);
             }
         }
     }
 }
示例#2
0
 public virtual void Close(ShutdownMode mode)
 {
     lock (_mainContainer.Lock())
     {
         IEnumerator entryIter = _fileName2Container.Iterator();
         while (entryIter.MoveNext())
         {
             IEntry4 hashEntry = (IEntry4)entryIter.Current;
             ClientTransactionPool.ContainerCount containerCount = (ClientTransactionPool.ContainerCount
                                                                    )hashEntry.Value();
             try
             {
                 containerCount.Close(mode);
             }
             catch (Exception t)
             {
                 // If we are in fatal ShutdownMode close will
                 // throw but we want to continue shutting down
                 // all entries.
                 Sharpen.Runtime.PrintStackTrace(t);
             }
         }
         _closed = true;
     }
 }
示例#3
0
 public ClientTransactionPool(LocalObjectContainer mainContainer)
 {
     // Transaction -> ContainerCount
     // String -> ContainerCount
     ClientTransactionPool.ContainerCount mainEntry = new ClientTransactionPool.ContainerCount
                                                          (mainContainer, 1);
     _transaction2Container = new Hashtable4();
     _fileName2Container    = new Hashtable4();
     _fileName2Container.Put(mainContainer.FileName(), mainEntry);
     _mainContainer = mainContainer;
 }
		public ClientTransactionPool(LocalObjectContainer mainContainer)
		{
			// Transaction -> ContainerCount
			// String -> ContainerCount
			ClientTransactionPool.ContainerCount mainEntry = new ClientTransactionPool.ContainerCount
				(mainContainer, 1);
			_transaction2Container = new Hashtable4();
			_fileName2Container = new Hashtable4();
			_fileName2Container.Put(mainContainer.FileName(), mainEntry);
			_mainContainer = mainContainer;
		}
示例#5
0
 public override bool Equals(object obj)
 {
     if (this == obj)
     {
         return(true);
     }
     if (obj == null || GetType() != obj.GetType())
     {
         return(false);
     }
     ClientTransactionPool.ContainerCount other = (ClientTransactionPool.ContainerCount
                                                   )obj;
     return(FileName().Equals(other.FileName()));
 }
示例#6
0
 public virtual Transaction Acquire(string fileName)
 {
     lock (_mainContainer.Lock())
     {
         ClientTransactionPool.ContainerCount entry = (ClientTransactionPool.ContainerCount
                                                       )_fileName2Container.Get(fileName);
         if (entry == null)
         {
             LocalObjectContainer container = (LocalObjectContainer)Db4oEmbedded.OpenFile(Db4oEmbedded
                                                                                          .NewConfiguration(), fileName);
             container.ConfigImpl.SetMessageRecipient(_mainContainer.ConfigImpl.MessageRecipient
                                                          ());
             entry = new ClientTransactionPool.ContainerCount(container);
             _fileName2Container.Put(fileName, entry);
         }
         Transaction            transaction            = entry.NewTransaction();
         ObjectContainerSession objectContainerSession = new ObjectContainerSession(entry.
                                                                                    Container(), transaction);
         transaction.SetOutSideRepresentation(objectContainerSession);
         _transaction2Container.Put(transaction, entry);
         return(transaction);
     }
 }
		public virtual Transaction Acquire(string fileName)
		{
			lock (_mainContainer.Lock())
			{
				ClientTransactionPool.ContainerCount entry = (ClientTransactionPool.ContainerCount
					)_fileName2Container.Get(fileName);
				if (entry == null)
				{
					LocalObjectContainer container = (LocalObjectContainer)Db4oEmbedded.OpenFile(Db4oEmbedded
						.NewConfiguration(), fileName);
					container.ConfigImpl.SetMessageRecipient(_mainContainer.ConfigImpl.MessageRecipient
						());
					entry = new ClientTransactionPool.ContainerCount(container);
					_fileName2Container.Put(fileName, entry);
				}
				Transaction transaction = entry.NewTransaction();
				ObjectContainerSession objectContainerSession = new ObjectContainerSession(entry.
					Container(), transaction);
				transaction.SetOutSideRepresentation(objectContainerSession);
				_transaction2Container.Put(transaction, entry);
				return transaction;
			}
		}