nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

JBoss EAP 6.2のリモートEJB呼び出しの中身を覗く

JBoss / WildFly (全部俺) Advent Calendar 2013の10日目です。昨日のJava EE Advent Calendar 2013emaggameさんがUndertowについて書いてくれましたUndertowの詳細に関しては以下のビデオなども役立つと思います。

さて、昨日の続きでEJBを並列で2つリモート呼び出しして、クライアントとサーバ共にjstack、およびnetstatを取得してみましょう。EJBは指定したmsだけsleepするだけのメソッドです。

実行してnetstatを取得するとソケットは一つだけです。muxですね。

$ netstat -tn | grep 4447
tcp        0      0 127.0.0.1:33068         127.0.0.1:4447          ESTABLISHED
tcp        0      0 127.0.0.1:4447          127.0.0.1:33068         ESTABLISHED

サーバ側はRemotingのread, write, taskという3種のスレッド群で通信が処理されているようです。通信以外の実際のEJB呼び出しはEJBのスレッドプールに渡されて処理されています。

クライアントは呼び出しの2スレッドの他に、EJBクライアントのスレッドプールのスレッドがいくつかと、Remotingの3種のスレッド群がいくつか、というスレッド構成はサーバ側と大差ないようです。

クライアントは以下のように書き換えました。

require 'java'

JBOSS_HOME="/home/nekop/eap6"

require "#{JBOSS_HOME}/bin/client/jboss-client.jar"
require "./example-as7-ejb.jar"

java_import "java.util.Properties"
java_import "javax.naming.Context"
java_import "javax.naming.InitialContext"

def initial_context
  p = Properties.new()
  p.put("remote.connections", "default")
  p.put("remote.connection.default.port", "4447")
  p.put("remote.connection.default.host", "localhost")
  p.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false")
  p.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming")
  p.put("org.jboss.ejb.client.scoped.context", true)
  InitialContext.new(p)
end

def hello_slsb(ejb_context)
  ear_name = ""
  ejbjar_name = "example-as7-ejb"
  ejb_name = "HelloSLSB"
  interface_name = "jp.programmers.examples.ejb3.slsb.Hello"
  ejb_context.lookup("#{ear_name}/#{ejbjar_name}/#{ejb_name}!#{interface_name}")
end

ejb_context = initial_context.lookup("ejb:")
begin
  t1 = Thread.new do
    hello_slsb(ejb_context).sleep(20000)
  end
  t2 = Thread.new do
    hello_slsb(ejb_context).sleep(20000)
  end
  t1.join
  t2.join
ensure
  begin
    ejb_context.close
  rescue
    # no-op
  end
end

そうそう、UndertowのLive from the living roomというバージョンもあってこっちも結構好きです。

明日は会社おやすみして子供と遊びに行きます。