2012-05-30 47 views
0

我正在爲我的應用程序開發使用gwt平臺。GWTP處理程序是線程安全的?

我開了2個瀏覽器中運行相同的應用程序,我做了2個不同的數據相同的操作,但現在在同一個視圖中的瀏覽器訪問類似的處理動作

現在的問題是2個瀏覽器已經與更新第一次收到處理程序的數據..

我不明白爲什麼它不能識別發送請求的瀏覽器......所以這意味着它不是Threadsafe ...?

我看到在吉斯@RequestedScope註釋是有用,當我用處理器

任何建議的執行()?

在此先感謝...

回答

1

也許......

你必須使你的操作線程安全的。 (attrs有最終的,例如注入構造函數),並且你的邏輯必須是線程安全的。

順便說一句,你能發表一個你的行動的例子嗎?

+0

嘿我兩個都是不同的對象.. – JAVAC

0
public class InfoAction extends UnsecuredActionImpl<Response<ObjectTO>> 
{ 
    private List<OpenTO> request; 
    private String machineId; 
    private int actionType; 
    private UserBean userBean; 

    /** 
    * This is been in the case of double dated flight. 
    */ 
    private String orignalFpesLegId; 

    public List<OpenTO> getRequest() { 
     return request; 
    } 

    public void setRequest(List<OpenTO> request) { 
     this.request = request; 
    } 

    public String getMachineId() { 
     return machineId; 
    } 

    public void setMachineId(String machineId) { 
     this.machineId = machineId; 
    } 

    /** 
    * @return the actionType 
    */ 
    public int getActionType() { 
     return actionType; 
    } 

    /** 
    * @param actionType the actionType to set 
    */ 
    public void setActionType(int actionType) { 
     this.actionType = actionType; 
    } 

    /** 
    * @param userBean the userBean to set 
    */ 
    public void setUserBean(UserBean userBean) { 
     this.userBean = userBean; 
    } 

    /** 
    * @return the userBean 
    */ 
    public UserBean getUserBean() { 
     return userBean; 
    } 
} 

請找我的動作類代碼

1

隨着2瀏覽器,你應該有你的應用程序運行的2個不同的實例。在你的onModuleLoad(),只需要一個System.out.println(this);。你應該看到不同的結果,這意味着你有不同的實例。

如果您從瀏覽器1執行操作,則操作將在瀏覽器1中執行只有。我不知道您的操作正在做什麼,但是如果它更新數據存儲區(或數據庫)中的數據,實例共享持久層,您將在瀏覽器2中看到新數據。

在兩個瀏覽器上執行瀏覽器1中觸發的操作的可能性非常小。這意味着他們共享相同的事件總線。

+0

也許它可能是共享相同的公交車事件..我怎麼能找到它正在通過的事件總線的實例......按照gwt平臺它是應用程序只有水平..你能詳細說明這一點,謝謝 – JAVAC

+0

在你的主持人,事件應該注入。只需調用一個'System.out.println(eventBus)'來查看實例。你確定這個動作被調用兩次。確保在回調中留下痕跡。 – Sydney

+0

嘿我兩個都是不同的對象.. – JAVAC