【问题标题】:Hashtable update in WebService javaWebService java中的哈希表更新
【发布时间】:2013-11-01 13:22:09
【问题描述】:

我在 Java RMI 中开发了一个简单的不信任系统,现在我必须将其更改为 Web 服务。我的数据结构有问题:

Hashtable<String, ArrayList<Records>> recordsTable;

它没有正确序列化/更新我的对象。

我不知道如何改变我的数据结构来克服这个问题?

[已编辑]

为简单起见,假设我有这样的数据结构:

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

我有一个发布的 buy() 和 display() 服务。最初我店里有 100 个苹果,所以当我购买() 10 个苹果时,它会打印 90 个苹果的结果。 但是当我稍后调用 display 时,它会打印 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("---------------------------");
}}

【问题讨论】:

  • 请发布一些重现问题的代码。 Records 是否实现了java.io.Serializable 接口?
  • @SeanPatrickFloyd 我添加了我的问题的简单代码
  • @bizmark 不,它没有。我使用 String 和 Integer 的 Hashtable 编辑了我的帖子,但仍然出现问题。
  • 您可能想检查如何跨线程/请求保存 HashTable 状态。它是您的一个类中的静态变量,是在每次请求时重新创建的,还是...!?
  • @Grove 我现在没有线程,但正在测试 WS 中的功能。你可以查看代码,我用全班更新了。

标签: java web-services hashtable


【解决方案1】:

Web 服务使用无状态协议。您需要将商店 HashMap 设置为静态。
另外,请确保它是一个 ConcurrentHashMap,因为它可能被多个线程同时访问。

【讨论】:

  • 我用静态关键字试过了,还是一样,没有正确更新。
  • 发布其余代码,然后(即相关服务器代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多