2013-11-01 62 views
1

我在Java RMI中開發了一個簡單的不可信系統,現在我必須將其更改爲Web Services。我有一個問題,我的數據結構:WebService中的Hashtable更新java

Hashtable<String, ArrayList<Records>> recordsTable;

它不序列/正確更新我的對象。

我很笨,如何改變我的數據結構來克服這樣的問題?

將帖子

爲了簡單起見,我說有這種數據結構:

Hashtable<String, Integer> store = new Hashtable<String, Integer>();

我有一個購買()和顯示()服務,其發佈。最初我在店裏有100個蘋果,所以當我購買()10個蘋果時,它會打印90個蘋果的結果。 但是當我調用顯示後,它將打印100個蘋果。

所以有一個序列化問題,我不知道如何解決這個問題。

public class StoreServer{ 

Hashtable<String, Integer> store= new Hashtable<String, Integer>(); 

public StoreServer() 
{ 
    store.put("Coffee", 20); 
    store.put("Apple", 100); 
    store.put("Banana", 50); 
    display(); 
} 

public String buy(String item, int quantity) 
{ 
    if(store.containsKey(item)) 
    { 
     int oldQuantity = store.get(item); 
     int newQuantity; 
     if(oldQuantity-quantity>=0) 
     { 
      newQuantity= oldQuantity -quantity; 
      store.put(item, newQuantity); 
      return quantity+" "+item+" were successfully purchased!\n" + 

        ("1. Coffee: "+store.get("Coffee")+"\n")+ 
        ("2. Apples: "+store.get("Apple")+"\n")+ 
        ("3. Bananas: "+store.get("Banana")+"\n")+ 
        ("---------------------------\n"); 
     } 
     else 
     { 
      return "error with your purchase"; 
     } 
    } 
    else 
    { 
     return "error with your purchase"; 
    } 
} 


public void display() 
{ 
    System.out.println("------Store Inventory-----"); 
    System.out.println("1. Coffee: "+store.get("Coffee")); 
    System.out.println("2. Apples: "+store.get("Apple")); 
    System.out.println("3. Bananas: "+store.get("Banana")); 
    System.out.println("---------------------------"); 
}} 
+1

向我們顯示teh codez –

+0

請張貼一些代碼來重現問題。 'Records'是否實現了'java.io.Serializable'接口? – Bizmarck

+0

@SeanPatrickFloyd我添加了一個我的問題的簡單代碼 – newbieLinuxCpp

回答

0

Web服務使用無狀態協議。您需要將商店HashMap設置爲靜態。
另外,請確保它是一個ConcurrentHashMap,因爲它可能會被多個線程同時訪問。

+0

我嘗試使用static關鍵字,仍然相同,不正確更新。 – newbieLinuxCpp

+0

發佈其餘的代碼,然後(即相關的服務器代碼) – Bizmarck