Esempio n. 1
0
        private void ApplyTo()
        {
            int realWriteNumber = 0;
            int noPointerWA     = 0;

            if (!isCommited)
            {
                NeoDatis.Tool.DLogger.Info("can not execute a transaction that is not confirmed");
                return;
            }
            if (hasAllWriteActionsInMemory)
            {
                for (int i = 0; i < writeActions.Count; i++)
                {
                    NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction wa = (NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                                                )writeActions[i];
                    wa.ApplyTo(fsiToApplyWriteActions, i + 1);
                    wa.Clear();
                }
                fsiToApplyWriteActions.Flush();
            }
            else
            {
                LoadWriteActions(true);
                fsiToApplyWriteActions.Flush();
            }
        }
Esempio n. 2
0
 public virtual void Test2B()
 {
     if (!isLocal)
     {
         return;
     }
     NeoDatis.Odb.Core.Layers.Layer3.Engine.IByteArrayConverter byteArrayConverter = NeoDatis.Odb.OdbConfiguration
                                                                                     .GetCoreProvider().GetByteArrayConverter();
     DeleteBase("test78.neodatis");
     // 155 : to avoid protected zone
     NeoDatis.Odb.Core.Transaction.IWriteAction wa1 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (300 + 1, byteArrayConverter.IntToByteArray(1), "size");
     NeoDatis.Odb.Core.Transaction.IWriteAction wa2 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (300 + 15, byteArrayConverter.StringToByteArray(" 1 - ol√° chico! - 1", true, -1
                                                                                                          , true), "name");
     NeoDatis.Odb.Core.Transaction.IWriteAction wa3 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (300 + 1, byteArrayConverter.IntToByteArray(2), "size");
     NeoDatis.Odb.Core.Transaction.IWriteAction wa4 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (300 + 15, byteArrayConverter.StringToByteArray(" 2 - ol√° chico! - 2", true, -1
                                                                                                          , true), "name");
     NeoDatis.Odb.Core.Layers.Layer3.IStorageEngine se = NeoDatis.Odb.OdbConfiguration
                                                         .GetCoreProvider().GetClientStorageEngine(new NeoDatis.Odb.Core.Layers.Layer3.IOFileParameter
                                                                                                       (NeoDatis.Odb.Test.ODBTest.Directory + "test78.neodatis", true, null, null));
     // se.close();
     NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface fsi = se.GetObjectWriter
                                                                           ().GetFsi();
     // new FileSystemInterface(null,se.getSession(),new
     // IOFileParameter("test.neodatis",true),false,Configuration.getDefaultBufferSizeForData());
     NeoDatis.Odb.Core.Transaction.ITransaction transaction = se.GetSession(true).GetTransaction
                                                                  ();
     transaction.SetArchiveLog(true);
     transaction.ManageWriteAction(wa1.GetPosition(), wa1.GetBytes(0));
     transaction.ManageWriteAction(wa2.GetPosition(), wa2.GetBytes(0));
     transaction.ManageWriteAction(wa3.GetPosition(), wa3.GetBytes(0));
     transaction.ManageWriteAction(wa4.GetPosition(), wa4.GetBytes(0));
     // transaction.getFsi().flush();
     NeoDatis.Odb.Core.Transaction.IWriteAction wat1 = (NeoDatis.Odb.Core.Transaction.IWriteAction
                                                        )((NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction)transaction).GetWriteActions
                                                           ()[2];
     byte[] bytes = wat1.GetBytes(0);
     transaction.Commit();
     NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction transaction2 = NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction
                                                                          .Read(NeoDatis.Odb.Test.ODBTest.Directory + transaction.GetName());
     NeoDatis.Odb.Core.Transaction.IWriteAction wat2 = (NeoDatis.Odb.Core.Transaction.IWriteAction
                                                        )transaction2.GetWriteActions()[2];
     AssertEquals(NeoDatis.Tool.DisplayUtility.ByteArrayToString(bytes), NeoDatis.Tool.DisplayUtility
                  .ByteArrayToString(wat2.GetBytes(0)));
     AssertEquals(wat1.GetPosition(), wat2.GetPosition());
     transaction2.Rollback();
     fsi.Close();
     DeleteBase("test78.neodatis");
     DeleteBase(transaction.GetName());
 }
		/// <exception cref="System.Exception"></exception>
		public virtual void Test2B()
		{
			if (!isLocal)
			{
				return;
			}
			NeoDatis.Odb.Core.Layers.Layer3.Engine.IByteArrayConverter byteArrayConverter = NeoDatis.Odb.OdbConfiguration
				.GetCoreProvider().GetByteArrayConverter();
			DeleteBase("test78.neodatis");
			// 155 : to avoid protected zone
			NeoDatis.Odb.Core.Transaction.IWriteAction wa1 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(300 + 1, byteArrayConverter.IntToByteArray(1), "size");
			NeoDatis.Odb.Core.Transaction.IWriteAction wa2 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(300 + 15, byteArrayConverter.StringToByteArray(" 1 - ol√° chico! - 1", true, -1
				, true), "name");
			NeoDatis.Odb.Core.Transaction.IWriteAction wa3 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(300 + 1, byteArrayConverter.IntToByteArray(2), "size");
			NeoDatis.Odb.Core.Transaction.IWriteAction wa4 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(300 + 15, byteArrayConverter.StringToByteArray(" 2 - ol√° chico! - 2", true, -1
				, true), "name");
			NeoDatis.Odb.Core.Layers.Layer3.IStorageEngine se = NeoDatis.Odb.OdbConfiguration
				.GetCoreProvider().GetClientStorageEngine(new NeoDatis.Odb.Core.Layers.Layer3.IOFileParameter
				(NeoDatis.Odb.Test.ODBTest.Directory + "test78.neodatis", true, null, null));
			// se.close();
			NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface fsi = se.GetObjectWriter
				().GetFsi();
			// new FileSystemInterface(null,se.getSession(),new
			// IOFileParameter("test.neodatis",true),false,Configuration.getDefaultBufferSizeForData());
			NeoDatis.Odb.Core.Transaction.ITransaction transaction = se.GetSession(true).GetTransaction
				();
			transaction.SetArchiveLog(true);
			transaction.ManageWriteAction(wa1.GetPosition(), wa1.GetBytes(0));
			transaction.ManageWriteAction(wa2.GetPosition(), wa2.GetBytes(0));
			transaction.ManageWriteAction(wa3.GetPosition(), wa3.GetBytes(0));
			transaction.ManageWriteAction(wa4.GetPosition(), wa4.GetBytes(0));
			// transaction.getFsi().flush();
			NeoDatis.Odb.Core.Transaction.IWriteAction wat1 = (NeoDatis.Odb.Core.Transaction.IWriteAction
				)((NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction)transaction).GetWriteActions
				()[2];
			byte[] bytes = wat1.GetBytes(0);
			transaction.Commit();
			NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction transaction2 = NeoDatis.Odb.Impl.Core.Transaction.DefaultTransaction
				.Read(NeoDatis.Odb.Test.ODBTest.Directory + transaction.GetName());
			NeoDatis.Odb.Core.Transaction.IWriteAction wat2 = (NeoDatis.Odb.Core.Transaction.IWriteAction
				)transaction2.GetWriteActions()[2];
			AssertEquals(NeoDatis.Tool.DisplayUtility.ByteArrayToString(bytes), NeoDatis.Tool.DisplayUtility
				.ByteArrayToString(wat2.GetBytes(0)));
			AssertEquals(wat1.GetPosition(), wat2.GetPosition());
			transaction2.Rollback();
			fsi.Close();
			DeleteBase("test78.neodatis");
			DeleteBase(transaction.GetName());
		}
Esempio n. 4
0
 public virtual void Test4()
 {
     NeoDatis.Odb.Core.Layers.Layer3.Engine.IByteArrayConverter byteArrayConverter = NeoDatis.Odb.OdbConfiguration
                                                                                     .GetCoreProvider().GetByteArrayConverter();
     NeoDatis.Odb.Core.Transaction.IWriteAction wa1 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (1, byteArrayConverter.IntToByteArray(1), "size");
     AssertEquals(wa1.GetBytes(0).Length, 4);
     NeoDatis.Odb.Core.Transaction.IWriteAction wa2 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (1, byteArrayConverter.StringToByteArray("ol√° chico", true, -1, true), "size");
     NeoDatis.Odb.Core.Transaction.IWriteAction wa3 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                          (1, byteArrayConverter.BigDecimalToByteArray(new System.Decimal(1.123456789),
                                                                                                       true), "size");
 }
		/// <exception cref="System.IO.IOException"></exception>
		/// <exception cref="System.TypeLoadException"></exception>
		public virtual void Test4()
		{
			NeoDatis.Odb.Core.Layers.Layer3.Engine.IByteArrayConverter byteArrayConverter = NeoDatis.Odb.OdbConfiguration
				.GetCoreProvider().GetByteArrayConverter();
			NeoDatis.Odb.Core.Transaction.IWriteAction wa1 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(1, byteArrayConverter.IntToByteArray(1), "size");
			AssertEquals(wa1.GetBytes(0).Length, 4);
			NeoDatis.Odb.Core.Transaction.IWriteAction wa2 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(1, byteArrayConverter.StringToByteArray("ol√° chico", true, -1, true), "size");
			NeoDatis.Odb.Core.Transaction.IWriteAction wa3 = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
				(1, byteArrayConverter.BigDecimalToByteArray(new System.Decimal(1.123456789), 
				true), "size");
		}
Esempio n. 6
0
 /// <summary>Adds a write action to the transaction</summary>
 /// <param name="writeAction">The write action to be added</param>
 /// <param name="persistWriteAcion">To indicate if write action must be persisted</param>
 public virtual void AddWriteAction(NeoDatis.Odb.Core.Transaction.IWriteAction writeAction
                                    , bool persistWriteAcion)
 {
     if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
     {
         NeoDatis.Tool.DLogger.Info("Adding WA in Transaction of session " + session.GetId
                                        ());
     }
     if (writeAction.IsEmpty())
     {
         return;
     }
     CheckRollback();
     if (!hasBeenPersisted && persistWriteAcion)
     {
         Persist();
     }
     if (persistWriteAcion)
     {
         writeAction.Persist(fsi, numberOfWriteActions + 1);
     }
     // Only adds the writeaction to the list if the transaction keeps all in
     // memory
     if (hasAllWriteActionsInMemory)
     {
         writeActions.Add(writeAction);
     }
     numberOfWriteActions++;
     if (hasAllWriteActionsInMemory && numberOfWriteActions > NeoDatis.Odb.OdbConfiguration
         .GetMaxNumberOfWriteObjectPerTransaction())
     {
         hasAllWriteActionsInMemory = false;
         System.Collections.IEnumerator iterator = writeActions.GetEnumerator();
         NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction wa = null;
         while (iterator.MoveNext())
         {
             wa = (NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction)iterator.Current;
             wa.Clear();
         }
         writeActions.Clear();
         if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
         {
             NeoDatis.Tool.DLogger.Info("Number of objects has exceeded the max number " + numberOfWriteActions
                                        + "/" + NeoDatis.Odb.OdbConfiguration.GetMaxNumberOfWriteObjectPerTransaction()
                                        + ": switching to persistent transaction managment");
         }
     }
 }
Esempio n. 7
0
 public virtual void LoadWriteActions(string filename, bool apply)
 {
     if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
     {
         NeoDatis.Tool.DLogger.Debug("Load write actions of " + filename);
     }
     NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction wa = null;
     try
     {
         CheckFileAccess(false, filename);
         fsi.UseBuffer(true);
         fsi.SetReadPosition(0);
         isCommited       = fsi.ReadByte() == 1;
         creationDateTime = fsi.ReadLong();
         long totalNumberOfWriteActions = fsi.ReadLong();
         if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
         {
             NeoDatis.Tool.DLogger.Info(writeActions.Count + " write actions in file");
         }
         for (int i = 0; i < totalNumberOfWriteActions; i++)
         {
             wa = NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction.Read(fsi, i + 1);
             if (apply)
             {
                 wa.ApplyTo(fsiToApplyWriteActions, i + 1);
                 wa.Clear();
             }
             else
             {
                 AddWriteAction(wa, false);
             }
         }
         if (apply)
         {
             fsiToApplyWriteActions.Flush();
         }
     }
     finally
     {
     }
 }
Esempio n. 8
0
 public static NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction Read(NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface
                                                                          fsi, int index)
 {
     try
     {
         long   position = fsi.ReadLong();
         int    size     = fsi.ReadInt();
         byte[] bytes    = fsi.ReadBytes(size);
         NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction writeAction = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
                                                                                 (position, bytes);
         if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
         {
             NeoDatis.Tool.DLogger.Debug("Loading Write Action # " + index + " at " + fsi.GetPosition
                                             () + " => " + writeAction.ToString());
         }
         return(writeAction);
     }
     catch (NeoDatis.Odb.ODBRuntimeException e)
     {
         NeoDatis.Tool.DLogger.Error("error reading write action " + index + " at position "
                                     + fsi.GetPosition());
         throw;
     }
 }
		public static NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction Read(NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface
			 fsi, int index)
		{
			try
			{
				long position = fsi.ReadLong();
				int size = fsi.ReadInt();
				byte[] bytes = fsi.ReadBytes(size);
				NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction writeAction = new NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction
					(position, bytes);
				if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId))
				{
					NeoDatis.Tool.DLogger.Debug("Loading Write Action # " + index + " at " + fsi.GetPosition
						() + " => " + writeAction.ToString());
				}
				return writeAction;
			}
			catch (NeoDatis.Odb.ODBRuntimeException e)
			{
				NeoDatis.Tool.DLogger.Error("error reading write action " + index + " at position "
					 + fsi.GetPosition());
				throw;
			}
		}