2014/08/24

関西WildFly 8(旧JBoss AS)勉強会に参加したときのメモ

2014-08-23 に 関西WildFly 8(旧JBoss AS)勉強会 に参加したときのメモ。

* What's new in WildFly 8 - @nekop (slide @arunguputa)
** Arun Guputa -> OracleからRedhatに移った模様
** WildFlyはJBossAS7の後継
   ググラビリティが悪いので(JBoss.orgの他のプロダクトと被るので)改称
** Undertow
   内部的にはTomtcat使ってたけど、Tomcatのバージョンアップはさほど後方互換を重視していなかったので
   メンテが大変だった。
   エンタープライズ用途に厳しいということでUndertowをフォークして作成。
   今はそれを使っている。
** 使用ポートを整理   
   アプリ用のポートは2本まで減らした。
    - app: 8080
    - mng: 9990
   ※デフォルト値
** What's new(Java EE7)
*** WebSocet(JSR356) New
*** Batch(JSR 352) New
    XMLで定義....だと?(仕様はIBMが策定)
    ※でかいバッチを本気で作ったらどんなXMLになっちゃうんだろう?と会場では話題に
*** JSON(JSR 353) New
*** Concurrency(JSR 236) New
    いままではThread扱えない
    Java EE自体が ThreadLocalをごりごり使う。
    ユーザ記述ロジックで立ち上げたThreadにはそういうのがなくて管理できずに爆発する。

    というのをどうにかして、管理可能な状態でThreadを作成する口が作られた。
    Fork/Joinもできる
*** JAX-RS(JSR 339) update
    RESTClientが誕生
    Jerseyベース(not RESTEasy)
*** JMS (JSR 343) update
    呼び出しが簡素化(7行くらい -> 1行)
*** JTA(JSR 907) update
    EJBによる管理だけではなく、CDI側で管理できるようになる
*** CDI (JSR 346) update
    beans.xmlがoptional
    スキャンタイプを選べるようになる(前は全てのクラスをスキャンしていた)
    All scanは遅いことがある(今まではAll Scan)

    - All scanはくっそ遅い、となることがある
    - 自前のクラスとJar内部クラスがバッティングして
      Injection対象がわからないエラーになる、という現象の回避手段にもなる。
*** Undertow(新しい WebServer )
    ハイパフォーマンスらしい。
    TecgEmpowerというサイトがあらゆるWebServerに対してリクエストを投げてパフォーマンスを計測・公開していて、
    そのランキングで上位に位置する。
    embedded版がある
*** Role based ACL
    JBossで操作できることを、ロールごとに管理できるようになる。
    Paasで使用されることを意識して、管理系機能のためのよしなしをWildfly内で完結させようとしている動きの一環。
*** Automated paching update
    今までは、このファイルを上書きして、あのコンフィグを調整して・・・・だったのを、
    zipを持ってきて、バッチ当てコマンドでベタッとやると、完了する。
*** Hibernate search
    アノテーションで対象エンティティを指定すると、
    勝手にDB内の全文検索用のindex貼ってくれる?(内部はLucene)
    激しいLikeのSQLを自前で書くよりはお手軽とか。
*** clustering
    監視リスナーを設定して、
    落ちたサーバを検知し、それを生きてるやつに知らせたり、特定のメソッドコールするよう設定できたりする。
*** Paas提供しているところ
    OpenShift / CloldBees
    Java EEのFullProfile対応しているのは上記2つだけでは、とのこと。
*** クラスタリングするときのフロントエンド側のサーバのチョイス
    [3択]: 内部的には、コアなところで同じライブラリを使っているらしい
    - mod_cluster <- 一番新しい
    - mod_jk
    - mod_proxy
*** jboss-cli
    XPath的なやり方でコンフィグ設定できる。
    生兵法でXMLを触って、壊して怪我する、ということを減らせる。
*** クラスローディングの考え方の変化
    http://www.slideshare.net/nekop/jboss-as-7-eap-6-modules-and-class-loading

    mavenの依存性推移のようなものを登録しておける。
    -> 曰く「ランタイムで利用出来るMavenみたいなやつ」
    Pros. 目的のjarをクラスローダが探しまわらなくていい
    Pros. 不要なものをロード市内で済むので若干早くなる?
    Pros. 依存性の推移先でバージョン違いのJarを使っている状態でも動ける。

*** slf4j のlog出力APIの可変長引数渡しているところで、最後の引数が例外系だったら例外としてログ出力してくれるらしい)
    事故りそうではあるが、やりたいことはできる

    JBossのLogging Managerは、log4jやslf4j側の実装を全て差し替えたものを持っている。
    アプリ側でそのライブラリを取り込んでいない状態で、logback塔を使った実装があると、
    Log4jの処理を、JBossが差し替えた版に対してリダイレクトされる。
    設定ファイルがアプリのクラスパスにあれば自動的にそれをJBossが解析して設定通りに出す。

*** その他
    - SalesforceはResinを使ってる
    - 非圧縮jarにするとサーバの起動が早くなる(展開する手間がへるよ)
    - JVM_OPTIONSに -Xverify:noneすると早い
      クラスが壊れてないか検証する、という処理を切る。
       Appletで謎のクラスを落としてきて使う、とかでなければ不要な処理だよ、という見解。
    - TieredCompilation

* Arquillianではじめるコンテナを使ったテスト (@backpaper0)
** 依存しているJarをアーカイブに含めるときは、ShrinkWrapのMavenResolverを使う方法がある
   org.jboss.shrinkwrap.resolver.api.maven.Maven

   drone
    - webdriverをinjectしたりできる
   graphere
    - droneとは違い、ajaxのテストするためにAPIを充実させたやつ
   warp
    - テストクライアント側の動作に加え、テスト対象のサーバ側の方で検証処理がかける。
      DBのテストなんかにつかえる?

* JSF アプリ作ったった ~EE サーバー載せかえ祭り~ (@shinsukeoda)
* GC (@nekop)
** パラレルGC(UseConcMargSweepGC)
   - いっぱいになったら処理を全止めして、全なめしていらないものを消す
     -> APサーバみたいなランタイム環境で突然停止とかありえない
     -> 並列でやるよ
   - UseConcMargSweepGCのチューニングについて、世のブログにいっぱい嘘、古いのが書いてあるので気をつけようね。
** JAVA_OPTSでのチューニングはデフォルトで大分いい感じなのでそれほど弄る必要はない。
   ただ、GCを始めるしきい値(占有率)が92%なので、Hadoopのような大量のアロケーションを一度に行うようなものは
   調整したほうがよい。
** Java 8はCMSが早くなったので、G1GCを使わないといけないシチュエーションは減った
** G1GCはメモリが潤沢な環境でないと無理。でもあると、停止時間累計は半分ぐらいに減らせるかも。
** GCは1GB - 1secを目安に考えておくとよい
** Zing: Azul社の有償のJavaVMでGCがちょっぱやい。(Pause less gcと呼ばれる) CPUコア数課金で、結構高いらしい。
   Linuxでしか動かない命令セットを使ってる。
** Shenandoah: Redhatがポータビリティの高い pause less gc を開発中
   「Linuxの会社なのに・・・・」「ポータビリティを損なうやつは敵、という思想がある」とか。

* EAPとWildflyの違い (@nekop)
オフィシャルはもちろん、だいたい@nekopさんのブログに書いてある話。
** Wildflyがリリースされて、チェコのテストチーム60人が3ヶ月叩いて安定させたものが EAP
** Wildflyには大きな機能リリースは反映されることがある
** Wildflyにはセキュリティパッチは基本でない
** 「有償サポートに入ると nekopさんに質問できます」