以下の内容はhttps://nekop.hatenablog.com/entry/20131220/1387524669より取得しました。


WildFlyのリモーティング

JBoss / WildFly (全部俺) Advent Calendar 2013の20日目です。

WildFlyではEJBなどのリモートコールは全てWebSocketを利用するようになっています。それがどのように実装されているかを調べます。WildFlyのmasterをビルドしたもので確認しています。

wildfly/remoting/pom.xmlを見るとundertow-coreが依存として定義されています。undertowをimportしているものを探すとorg.jboss.as.remoting.RemotingHttpUpgradeServiceがundertowとjboss-remotingの橋渡しをしているクラスのようです。

以下のふたつがimportされています。

  • io.undertow.server.ListenerRegistry;
  • io.undertow.server.handlers.ChannelUpgradeHandler;

ListenerRegistryから取得できるListenerはメタデータの登録などに利用されているようです。実際のブリッジはChannelUpgradeHandlerにXNIOのChannelListenerを登録して、そのChannelListener内でjboss-remotingのEndpointにConnectedStreamChannelを渡すことによって連携しています。

EJBクライアントはポートを旧来のjboss-remotingの4447から8080に変更するだけで動作します。EJBクライアントのソースを見るとjboss-remotingに用意されているHttpUpgradeConnectionProviderFactoryを利用するようになっており、WebSocketで動作するようになっているようです。

コネクションオープン後に以下のUpgradeが行われて、あとは普通のjboss-remotingのペイロードにスイッチしています。

GET / HTTP/1.1
Sec-JbossRemoting-Key: oEKRMTn5e+qGoACK0Um0Yw==
Upgrade: jboss-remoting
Host: localhost
Connection: upgrade

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: jboss-remoting
Content-Length: 0
Sec-JbossRemoting-Accept: FXGBl+OiN8bkZqTyzJ0DZKK9imA=



以上の内容はhttps://nekop.hatenablog.com/entry/20131220/1387524669より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14