Java-клиент Couchbase реализован с RxJava 1, по крайней мере, в версиях 2.x.
Если вы посмотрите, например, на операцию документа get
, вы можете превратить эту операцию в наблюдаемый поток, вставив вызов async. Таким образом, bucket.async().get(id)
возвращает тип Observable<JsonDocument>
.
Хотя я не использую сохраненный procs, у Вас могло быть что-то как этот:
public Response<SomeObject> SaveSomething(Object yourObject)
{
DbTransaction dbTransaction = null;
try
{
using (DataContext context = new DataContext())
{
//Creates a new DB transaction
if (context.Connection.State == System.Data.ConnectionState.Closed)
{
context.Connection.Open();
}
dbTransaction = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable);
context.Transaction = dbTransaction;
context.SaveYourObject(yourObject);
//Commit the transaction
dbTransaction.Commit();
response.ResponseObject = yourObject;
response.Messages.AddSuccessfulSave("Saved!");
}
}
}
catch (ChangeConflictException cex)
{
if (dbTransaction != null) dbTransaction.Rollback();
response.Errors.AddConcurrencyError();
response.IsSuccessful = false;
}
catch (SqlException sqlEx)
{
if (dbTransaction != null) dbTransaction.Rollback();
if (sqlEx.Class == 14 && (sqlEx.Number == 2601 || sqlEx.Number == 2627)) //Duplicated key
{
response.Errors.Add(new Error
{
Name = "Duplicate item",
Description = "This object already exists."
});
ExceptionPolicy.HandleException(sqlEx, SERVICE_EXCEPTION_POLICY);
response.IsSuccessful = false;
}
else //other SQL errors
{
response.Errors.AddSavingError("Your object", yourObjectId);
ExceptionPolicy.HandleException(sqlEx, SERVICE_EXCEPTION_POLICY);
response.IsSuccessful = false;
}
}
Другая альтернатива DbTransaction
TransactionScope
- это обеспечивает намного более простую модель программирования и расширяемо к нескольким одновременным базам данных и другой подаче (через DTC) - но за счет небольшого количества издержек на соединении. Это раньше было больше служебным, но под SQL2005 и т.д. это будет использовать "LTM", пока Вы не начнете охватывать многочисленные связи - таким образом, единственная операция является обычно очень дешевой:
using (TransactionScope tran = new TransactionScope())
using (FooDataContext ctx = new FooDataContext())
{
// your work with ctx
// ...
// other work involving connections etc
// ...
tran.Complete();
}
Очень простой;-p необходимо также смочь сделать транзакцию более детализированной (всего по нескольким запросам) ormore охватывающий очень просто. Большая часть существующего кода автоматически поступит на службу в область транзакций, делая очень легким модифицировать в существующий код.
Для большего количества информации о TransactionScope (и общие транзакции в.NET), посмотрите здесь.
private string RollBack_fn()
{
int sal = 0;
OracleConnection myconn = new OracleConnection(ConfigurationManager.AppSettings["con"].ToString());
cmd = new OracleCommand("SP_student_MAST", myconn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = null, param2 = null, param3 = null, param4 = null, param5 = null;
try
{
myconn.Open();
trans = myconn.BeginTransaction();
cmd.Transaction = trans;
//param1 = new OracleParameter("pSNo", OracleType.VarChar, 5);
//param1.Value ="";
//cmd.Parameters.Add(param1);
param2 = new OracleParameter("pSName", OracleType.VarChar, 10);
// param2.Value = "Saravanan";
param2.Value = TextBox1.Text;
cmd.Parameters.Add(param2);
param3 = new OracleParameter("pENo", OracleType.VarChar,5);
param3.Value = TextBox2.Text;
cmd.Parameters.Add(param3);
param4 = new OracleParameter("pEName", OracleType.VarChar,10);
// param4.Value = "Sangeetha";
param4.Value = TextBox3.Text;
cmd.Parameters.Add(param4);
param5 = new OracleParameter("pSENo", OracleType.Char, 5);
param5.Value = "";
cmd.Parameters.Add(param5);
sal = cmd.ExecuteNonQuery();
trans.Commit();
Response.Write("Record Saved");
myconn.Close();
// rollbackvalue = 0;
}
catch (Exception ex)
{
Response.Write("Not saved.RollBacked");
trans.Rollback();
//rollbackvalue = 1;
}
string cs = Convert.ToString(sal);
return cs;
}