2013-11-21 79 views
1

我正在寫一個Java項目在汽車租賃機構的月食GWT。 我需要交易2機構(服務器)之間的信息,如可租用的汽車列表,我建議使用 gwt-syncproxy。 站點描述:gwt-syncproxy無法連接到地址

GWT SyncProxy在Java客戶端和RemoteService servlet之間提供同步RPC。通過使用SyncProxy,我們可以從純Java(無JSNI)代碼調用GWT RemoteService方法。

我已經按照官方指南(也是在網絡上的唯一一個) https://code.google.com/p/gwt-syncproxy/ ,但它不工作:在瀏覽器的消息說:

插件無法連接到發展在127.0.0.1:9997模式服務器按照基本故障排除說明

(我在Java客戶端代碼中指定的地址)project.java

//create new proxy instance for the service interface: 
    private static GreetingService rpcService = 
     SyncProxy.newProxyInstance(GreetingService.class, 
     "http://127.0.0.1:9997", "greet"); 

    //invoke the RPC method: 
    String result = rpcService.greetServer("SyncProxy"); 

這是GreetingService.java

@RemoteServiceRelativePath("greet") 
     public interface GreetingService extends RemoteService { 
     String greetServer(String name); 
    } 

和服務實現GreetingServiceImpl.java

public class GreetingServiceImpl extends RemoteServiceServlet 
    implements GreetingService { 
    public String greetServer(String name) { 
    return "Hello, " + name; 
    } 
    } 

我到底做錯了什麼?有沒有更好的方法來在不同的服務器之間進行RPC的局域網? (我沒有在日誌文件和Eclipse控制檯中的錯誤)

+0

9997端口通常用於dev模式的代碼服務器 - 爲什麼您在這裏使用它而不是8888 http端口? –

+0

@ColinAlworth不知道那個..現在我修改了它:「http://127.0.0.1:8888」,「問候」); 但沒有任何更改,仍然:插件無法連接到開發模式服務器在127.0.0.1:9997 請按照基本故障排除說明 – user2298581

+0

對不起,我根本不知道這個庫,只是試圖讓你超過最初詳細如果我能。 –

回答

2

聲明:我是Sync-Proxy Android庫的開發人員。

您收到的錯誤實際上並不是來自gwt-syncproxy庫。它來自於GWT開發系統,它指示瀏覽器無法聯繫開發模式系統(由Eclipse託管)。有幾件事需要驗證:

  1. 開發模式主機是否在eclipse中運行(檢查Eclipse中可用的開發模式視圖)沒有錯誤?
  2. 編譯前端是否有任何錯誤(檢查控制檯視圖)
  3. 請嘗試清除您的瀏覽器緩存(簡要谷歌搜索該錯誤導致一些隨機發生,防止開發模式系統鎖定正確)
  4. 嘗試瀏覽到沒有開發模式支持的瀏覽器(IE瀏覽器不瀏覽瀏覽器到127.0.0.1:8888或日蝕說它託管你的應用程序),並驗證你的頁面加載正確。如果沒有,我建議創建一個乾淨的啓動GWT項目,並驗證是否正在努力確保您的計算機上沒有其他服務被阻止)

作爲一個後續行動,我有點困惑於你的設置。您正在開發GWT前端客戶端還是Java桌面客戶端?開發Sync-proxy是爲了讓常規客戶端(GWT框架之外)可以與GWT設計的支持RPC一起工作。具體而言,基於服務器的RemoteService servlet需要使用GWT RPC系統,而不是僅使用常規的RemoteService servlet。如果您正在開發GWT前端客戶端,則不需要syncproxy,因爲常規GWT框架可以與RPC後端進行通信。現在,如果我理解了你的多服務器通信的目的,那麼你的問題就是你試圖從你的web前端(GWT客戶端)進行這種通信,還是從你的後端的一個Java servlet來完成?

如果這是在前端完成的,恐怕我沒有可用的說明供您使用,因爲您必須通過跨站點腳本問題,並且syncproxy不適用於工作在GWT前端客戶端中(我已經測試過)。如果這是你的意圖,那麼作爲一個開始,你就需要使用異步方法調用的newProxyInstance:

private static GreetingServiceAsync rpcServiceAsync = 
    SyncProxy.newProxyInstance(GreetingServiceAsync.class, 
     "127.0.0.1:8888", "greet"); 

具體來說,你最終會爲了調用此方法兩次,以獲得目標,其中每個URL代表不同的租賃代理服務器。現在,在你的開發機器上託管它,以便它能正常工作,這有點超出了這個答案的範圍,但你也需要考慮到這一點

如果你是在後端執行此操作, syncproxy可能(未經測試)能夠執行您的需求,但您需要管理超時情況,因爲您所做的調用不會異步。最重要的是,您將再次在開發環境中設置不同的託管服務器,以測試可能的場景。如果這是一個很大的需求,請爲gwt-syncproxy項目提出一個問題請求,我可能能夠測試出該場景,並提供指示。

相關問題