2015-04-20 73 views
5

我有它運行在一個灰熊實例新澤西JAX-RS應用:結合澤西與泰魯斯

public class Application { 
    public static final String BASE_URI = "http://127.0.0.1:8080/rest"; 

    public static void main(String[] args) throws IOException { 
     ResourceConfig rc = new ResourceConfig().packages("my.package.rest"); 
     HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); 
     System.out.println("Server started, press any key to stop."); 
     System.in.read(); 
     server.shutdownNow(); 
    } 
} 

my.package.rest有JAX-RS註釋的資源。我想在同一個服務器實例(比如「http://127.0.0.1:8080/websocket」)中添加使用Tyrus註釋的websocket(@ServerEndpoint@ServerEndpoint@OnOpen@OnMessage等)資源,但是我能夠找到的所有文檔都顯示瞭如何啓動獨立的websocket服務器使用Tyrus +一個灰熊容器,不與澤西島結合。我在尋找類似:

server.getServerConfiguration().addHttpHandler(new SomeTyrusHttpHandler("/websocket")); 

,但我不能找到類似SomeTyrusHttpHandler什麼。我怎樣才能將Jersey和Tyrus結合到一個Grizzly服務器中?

回答

1

很好的問題,但目前沒有好的答案。你仍然可以這樣做,但它需要深入潛入灰熊內部; Tyrus由一個插件註冊(見WebSocketAddOn),它可以與Jersey註冊到該容器的方式結合使用。

請記住,將這兩個框架集成在一起並不是一件容易的挑戰 - 在單個容器中運行它們是第一步,但還有其他一些事情需要照顧,如「實例提供者」,生命週期調整等。我認爲這個主題超出了一個SO答案的範圍 - 你可以期待我或其他Tyrus /澤西團隊成員關於這個問題的blogpost。 (一旦完成,我會在這裏發佈)。

無論如何,我會建議採取更保守的方法,並使用一些支持Servlet 3.1的輕量級容器;這應該需要少得多的工作,並且您將擁有標準的Servlet運行時/生命週期。

+0

只需使用Atmosphere,它就是您想要的,並允許在Grizzly,GlassFish等頂部運行Jersey。https://github.com/Atmosphere/atmosphere。例如http://goo.gl/s7OwGc是澤西島2超級簡單的例子,透明地運行在websockets之上。 – jfarcand

+0

請參閱https://github.com/pavelbucek/placeholder - PoC,它結合了Jersey和Tyrus(位於Grizzly + HK2之上)。 –

+0

你好,有沒有這樣一個整合的消息?我想爲我的Jersey項目添加一個WebSocket資源。 –