public void Commit(NotesClientActivated clientActivated) { List <Note> notes = singleton.GetPesistentData(); List <Note> changedNotes = clientActivated.RequestCacheRecords(); Logger.Write("Transaction begin"); //Проверка целостности, обеспечивающая атомарность транзакции //т.е. либо запишется всё, либо ничего //(Да, O(2n). Можно сделать за n создавая промежуточный список //с оригинальными данными участвующими в транзакции, но лень) VerifyTransaction(notes, changedNotes); //Завершение транзакции, если проверка пройдена completeTransaction(notes, changedNotes); //Очищение списка транзакции клиента clientActivated.Clear(); Logger.Write("Transaction end"); }
public void Commit(NotesClientActivated clientActivated) { List<Note> notes = singleton.GetPesistentData(); List<Note> changedNotes = clientActivated.RequestCacheRecords(); Logger.Write("Transaction begin"); //Проверка целостности, обеспечивающая атомарность транзакции //т.е. либо запишется всё, либо ничего //(Да, O(2n). Можно сделать за n создавая промежуточный список //с оригинальными данными участвующими в транзакции, но лень) VerifyTransaction(notes, changedNotes); //Завершение транзакции, если проверка пройдена completeTransaction(notes, changedNotes); //Очищение списка транзакции клиента clientActivated.Clear(); Logger.Write("Transaction end"); }
public void Rollback(NotesClientActivated clientActivated) { //Очищение списка транзакции клиента clientActivated.Clear(); }
public MainWindow() : base(WindowType.Toplevel) { VBox mainVBox = new VBox(false, 0); HBox nodeViewHBox = new HBox(true, 0); HBox crudButtonsHBox = new HBox(true, 0); HBox transactionContolButtonsHBox = new HBox(true, 0); Button refreshButton = new Button("Refresh"); Button createButton = new Button("Create"); Button deleteButton = new Button("Delete"); Button commitButton = new Button("Commit"); Button rollbackButton = new Button("Rollback"); refreshButton.Clicked += RefreshButtonClicked; createButton.Clicked += CreateButtonClicked; deleteButton.Clicked += DeleteButtonClicked; commitButton.Clicked += CommitButtonClicked; rollbackButton.Clicked += RollbackButtonClicked; HSeparator separator = new HSeparator(); view = new NodeView(Store); CellRendererText titleRenderer = new CellRendererText(); CellRendererText contentRenderer = new CellRendererText(); titleRenderer.Editable = true; contentRenderer.Editable = true; titleRenderer.Edited += NoteTitleEdited; contentRenderer.Edited += NoteContentEdited; view.AppendColumn("Title", titleRenderer, "text", 0); view.AppendColumn("Content", contentRenderer, "text", 1); ScrolledWindow scrolledWindow = new ScrolledWindow(); scrolledWindow.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); scrolledWindow.AddWithViewport(view); try { //Если сервер и клиент запускаются из ИДЕ (по порядку, но практически одновременно), //сервер не успевает создать сокет, поэтому надо немного подождать System.Threading.Thread.Sleep(1000); RemotingConfiguration.Configure("remoteNotes.exe.config", false); clientActivated = new NotesClientActivated(); singleton = new NotesSingleton(); singlecall = new NotesTransactionSinglecall(); } catch (System.Net.WebException) { Logger.Write("Unable to connect"); return; } foreach (Note note in singleton.GetPesistentData()) { store.AddNode(new NoteTreeNode(note)); } nodeViewHBox.PackStart(scrolledWindow, false, true, 0); nodeViewHBox.SetSizeRequest(200, 200); crudButtonsHBox.PackStart(refreshButton, false, true, 0); crudButtonsHBox.PackStart(createButton, false, true, 0); crudButtonsHBox.PackStart(deleteButton, false, true, 0); transactionContolButtonsHBox.PackStart(commitButton, false, true, 0); transactionContolButtonsHBox.PackStart(rollbackButton, false, true, 0); mainVBox.PackStart(nodeViewHBox, true, false, 0); mainVBox.PackStart(crudButtonsHBox, true, false, 0); mainVBox.PackStart(separator, true, false, 2); mainVBox.PackStart(transactionContolButtonsHBox, true, false, 0); Add(mainVBox); mainVBox.ShowAll(); Build(); }