我有一個轉移表,其中用戶可以從一個人正在使用Spring MVC中使用Hibernate創建Web services.I上午理解匯款到another.I一個應用程序,當多個人通過相同的web服務發送請求,多個線程會被調度servlet.Now它每個線程將被創建以進去控制器定義class.Now我有我已與控制器類自動裝配一個daoImplementation類相應的web方法。現在,每個請求線程將使用autowired daoImplementation對象來訪問daoImplementation類方法。 現在,我的第一doubt- 如何一個daoImplementation對象(其單)可以處理多個請求?如果假設千人發送請求需要訪問daoImplementation類方法僅需10秒,每個請求然後第1000請求延遲將是10000秒。如何會話處理多個請求用SpringMVC與和hiberate
現在,之後,請求去了daoImplementation方法,將做數據庫工作。在daoImplementation類我有自動裝配SessionFactory也是單身和線程安全(這意味着每個請求它將創建一個會話線程)。在我的方法我正在創建會話對象來完成我的事務。 現在我的第二doubt- 假設萬人試圖訪問同樣的方法在daoImplementation類,所以1000會話對象將是這些created.How千個對象將與數據庫進行交互,這樣就會出現在每個請求,以及如何沒有多少延遲數據庫將保持一致性? 同樣會是線程安全的,它會如何影響我的系統。現在
我的第三個doubt- 對於轉移,首先我需要得到目前在發件人帳戶的電流量,然後檢查是否是小於,他是想轉移到接收器賬戶的金額,然後從扣除多少金額發件人帳戶,然後添加量多的接收器帳戶,然後關閉session.Being一個初學者,我會寫我的代碼像這個 -
public class CommonDAOImpl{
private SessionFactory sessionFactoryCommon;
public void setSessionFactoryCommon(SessionFactory sessionFactoryCommon) {
this.sessionFactoryCommon = sessionFactoryCommon;
System.out.println("SessionFactory is set");
}
public void addMoney(String userId,double amount) {
Session session = this.sessionFactoryCommon.openSession();
try{
String hqlQuery = "HQL query to update Amount Table where userId = userId";
session.createQuery(hqlQuery).executeUpdate();
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
session.close();
}
}
public void transferMoney(String fromUserId, String toUserId, double amount)
{
Session session = null;
try
{
session = this.sessionFactoryCommon.openSession();
query = "HQL query to get previous amount from sender account";
double prevSenderamount = (double) query.uniqueResult();
if(prevAmount>=amount)
{
String query1 = "HQL query to update sender account";
session.createQuery(hqlQuery).executeUpdate();
String query1 = "HQL query to get previous amount from receiver account";
double prevReceiveramount = (double) query.uniqueResult();
String query3 = "HQL query to update receiver account";
session.createQuery(hqlQuery).executeUpdate();
}
else
{
throw myException("Insufficient Amount");
}
System.out.println("1. Employee save called without transaction, id="+id);
}
catch(Exception ex)
{
System.out.println("Exception Block");
ex.printStackTrace();
}
finally
{
session.close();
}
}
}
是做數據庫調用這個正確的方式? 請嘗試用簡化的方式解釋 - 提前致謝。
嗨JB ...你可以舉一些例子,它可以通過休眠來實現數據庫調用的最佳方式。 – RHUL