万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Javaの勉強会

□GlassFishx v3.x
・GlassFishxとは
 ・OSS コミュニティ名
 ・アプリケーションサーバ

・CDDL/GPLv2デュアルライセンス

2種類ある
オープンソース製品
Oracle Fusion Middleware製品

2005年 プロジェクト開始
2006年 Ver1
2007年 Ver2
2009年 Ver3

月間ダウンロード数の推移
世界で最も成長率の成長率の高いアプリケーションサーバ

□JavaEE6
・拡張性
Java EEフレームワークも容易に利用可能
String,Struts,Wicket

web.xmlに追加しないといけなかったが、解消されている。
複数のフレームが混在して書かれていた。
どこをどう直せばいいかわからない。
フレームワークごとにフレームワークを分けたり。
web fragment設定ファイルに集約

・プロファイル
 FullSetの中にサブセットを提供

デフォルトで使わないと強いられていた。
使わないものはロードしなくてもいい。

Web Profile XProfile Y Profile
Full Java EE 6

・Webプロファイル
含まれる技術
Servlet
JPA
Servlet
JPA
JSP/EL
JTA
JSTL
DI/CDI
JSF
Managed Beans
etc...

・使用の削減(Pruning)

使用を付け足していったが、

古くなって使わなかったAPIの整理

JAX-RPC(->JAX-WS)
EJB Entity Beans(->JPA)
・JAXR

→速く新しいものへ。

NetBeansがすごい。
Javaでつくるだけで、勝手にテーブルが作られる

デプロイするときに、セッション情報を保持する

EJB3.1組み込みコンテナ

・JSR-314JavaServer Faces 2.0
JSPで書いたものよりも速い
4倍か5倍くらい
XHTMLで記載するようになっている
テンプレート機能の提供
再利用性の向上
ボタンとかテキストフィールド

Ajax対応・・既存のページが簡単にAjax対応もできる。
JavaScriptの詳細な知識がなくてもAjax対応できる。
Restfulチックなことも出来る。

・faces-config.xmlのオプション化

Servletコンテのバージョンに非依存
 ・Servlet3.0コンテナの他2.5上でも対応

EJB-3.1
特徴
earファイル パッケージ化の面倒なことが解消。
ローカルビジネスインタフェースのオプション化
標準化されたGlobal JNDI名 個々のアプリケーションサーバごとに違っていたが、統一された。移植性など。
JAX-RS 1.1
GET,POST,PUT
DI 1.0 / CDI 1.0

オープンソース版と製品版の違い
中身が違う。
サポートが必要な場合は製品版を入れないといけない。
・超高速起動(Web Profile 阪利用時)

Web管理コンソール
Web ベースの管理コンソール

Restful 管理チャネル
GlassFish v3.0から追加された新しい管理機能

・再配備時におけるセッションの持続


OSGi モジュールサブシステムの概要
 ・モジュール層
 ・ライフサイクル層
 ・サービス層

もうひとつのモジュール
Hundred-Kilobite Kernel
OSGiのモジュールを提供して組み込める。
OSGiは動的なモジュールの追加・削除が可能

アプリケーションサーバを起動したまま
任意のOSGiバンドルを利用可能

・Spring DM(OSGi)とJavaEEの連携も可能

Apache Felix コンソール

・Grizzly
ネットワークのソケットをハンドリングする実装の名前
GlassFishのHTTPをハンドリングする部分のサーバプログラムとして実装されたが、他の任意のプロトコルに対応出来るのではないのか、とマルチプロトコルに対応したサーバ
JavaのNIOもNon Blocking IOで大量のIOを少数のスレットでさばくことができる。
リクエストキューが空になり、分属できる。
少量はBlockingの方が速いが、大量のリクエストはNonBlockingの方が速い。


デスクトップ上でのEJBの機能を流用できる。
EJB3.1での新機能。
WebSocket対応
WebLogicとの互換性を提供


アプリケーションバージョニング
同一アプリケーションの複数配備が可能
Applications

自己増殖クラスタ機能
ドメイン管理サーバが稼働するOSと同一環境

Tomcatにしても一台ずつやってたと思うが、SSHさえあれば
自己増殖クラスタ

「質問」
GlassFishWeblogicとの住み分けは?
GlassFishJavaEEのRIとして継続してやっていく。
GlassFishからWeblogicへ入ることもある。
フュージョンミドルウェアWeblogicしかサポートしない。
ミッションクリティカル系はWeblogic

JRubyGlassFishではどうなるか?
バージョン3からJRubyサポートはなくなった。
2のときはRubyのコンテナが入っていた。
元同僚がSunが卒業したのが関係している。
Dynamicインボーク バイトコードを叩けるようになる。
JRubyは動くようになる。しかも速くなる(チャールズも携わっている。)

JRuby
What;s JRuby
Ruby最新版1.9.2と同等の動作速度
Javaで書くよりも簡単
高いスケーラビリティ
言語としての魅力
Java連携の魅力
JVM言語実装の魅力
動的(静的に型付けされていない)
人にやさしい
メタプログラミング機能(スクリプト言語で一番充実している)
高い生産性
上原潤二さんのGroovyの資料
→そのままJavaも動くが短くできる

Java Integration
RubyからJavaの機能を利用する(JDBC, XML,PDF、ehcache,Graph DB, Lucene, ...)

Ruby言語処理系をJavaに埋め込む

開発
プロトタイピング
運用管理
テスト
ビルドシステム

ワーグラー? warを作る物。
GoogleAppEngine

インタプリタモードもある。バイトコードに変換した後ではないのでAndroidでも動く。
Scalaも動くかも?

Tools, Libraries and Application

Redcar:JRubyで描いたエディタ(最初は遅いが動くと普通に動く)
Trinidad:Tomcat for RubyTomcatかどうかは見えない
TorqueBox:Ruby app platform on JBoss AS

LikedIn Web/REST API front-end
Sun/Oracle
Oracle Mix
CTC ブラウザ用の管理用コントローラ 企業向け
ソーシャル系
北米、欧州、インド

JRuby 1.6

Ruby 1.9.2(1.6)
最新版のRubyが動作(ただしまだ初版)
※様子見で

Windows
Ruby実装としての安定度はJVMのおかげ

    • -

$ gem install rails
rails new coolapp -m http:..jruby.org
Using rake (0.8.7 )
〜〜

    • -

Warblerを入れると、warbleコマンドがつかえる

Rails 3 Demo

クラウド
EY AppCloud
AppEngine
AWS EB

・Built-in Profilers
Jrubyでのプロファイラ
Ruby Flat Profiler (1.6)

呼び出しのグラフをサポートする

Javaベースで動いているので、CPUのモニタリングすればいい。

C-extension
 Native C Extension (1.6)

CRuby向け拡張ライブラリをJNI経由で利用

Java/Ruby Integration

Ruby評価エンジンをJavaから使う
Rubyで実装したJavaクラスを呼び出す。

flying操作

JtestR
Javaのコードをテストできる。
JCEのセキュリティ周り

・How JRuby works
Ruby Object == Java Object
Java's GC

Scanner
JRuby JIT Compilerでバイトコード生成
Java Bytecode→JavaVMでJIT

AOT(Ahead Of Time)
jrubycコマンドでJruby AOT Compiler

最初からバイトコードを生成するとメモリを食うので遅いのでAOTで。

・Optimize

CallSiteのショートカット
primitive演算の最適化→ボックス、アンボックスを自動的に
自己再帰のショートカット→自分で読んでしまうのは呼んでしまおう

IRのデモ

Scalability
JRubyはGITなしでNative thれあd動作
1 JavaVMプロセス中に複数JRuby評価器
1 JavaVMプロセスでより多くのコアを有効活用

JVM言語
AOPによるメタプロ民具
60000のMavenパッケージ
JDK7,JDK8での進化に期待

・Groovy
AST変換によるメタプログラミング 木構造でくっつけたり離したり

Scala
関数型
Traitsによるメタプログラミング

JRuby
20000の

Clojure
マクロによるメタプログラミング
STM,並行処理関数機能
JRubyからでも使える


PReZIのプレゼン

mfSTixMn