2011-07-24 24 views
2

我已經使用ServerServlet機制將我們的Restlet服務部署到Jetty Java應用程序服務器。有些服務是從GWT前端調用的,但我也需要直接從我們的服務器邏輯調用它們。Restlet部署在Java App服務器中的RIAP協議

Restlet RIAP系統似乎是完美的,但我不知道如何在這裏使用它。似乎我需要以某種方式暫緩Restlet組件的上下文。

我發現一篇文章指出RiapServerHelper對此很有用。但是我沒有找到關於如何使用它的文檔。 任何示例都會有所幫助。

回答

6

RiapServerHelper類是服務器連接器的實現。你不必明確地使用它。

要使用RIAP,您需要照常執行應用程序的所有實體(服務器資源,應用程序...)。將應用程序附加到組件虛擬主機時有所不同。需要通過RIAP被訪問的資源也必須連接到內部路由器,具體如下:

Component component = new Component(); 
component.getServers().add(Protocol.HTTP, 8182); 

MyApplication app = new MyApplication(); 
component.getDefaultHost().attachDefault(app); 
component.getInternalRouter().attachDefault(app); 

注意,您不必指定RIAP協議的組成部分。它默認支持。

訪問通過RIAP應用程序的資源是那麼簡單,因爲你可以使用的Restlet客戶端支持,與其他協議:

Request request = new Request(Method.GET, "riap://component/ping"); 
Response response = getContext().getClientDispatcher().handle(request); 
Representation repr = response.getEntity(); 

ClientResource cr = new ClientResource("riap://component/ping"); 
Representation repr = cr.get(); 

有關詳細信息,你可以有一個看看頁面http://wiki.restlet.org/docs_1.1/13-restlet/27-restlet/48-restlet/86-restlet/45-restlet.html

希望能回答你的問題。 Thierry

+0

我錯過的一件事是'上下文'需要在客戶端和服務器(組件)之間共享。 在我的解決方案中,Restlet組件在應用程序服務器中作爲Servlet加載。客戶端正在從另一個servlet調用。 有沒有一種優雅的方式來分享上下文? – JanRavn

+0

要使ClientResource示例在Restlet 2.1/2.2(SNAPSHOT)中與RIAP一起使用,必須將服務器添加到組件:Component#getServers()。add(new Server(Protocol.RIAP)) –

+0

@thierry templier如何一個過濾器/攔截RIAP請求?試過沒有太大的成功:https://stackoverflow.com/questions/46224042/how-to-filter-or-intercept-restlet-riap-requests – danirod