読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

Challenge JavaOne 2013 レポート - JSR 341 : Expression Language 3.0-

JavaOne Java EE 7 EL式 Lambda

さて、やっとこJavaOne2013のJava EE関連です(^^;

EL式はJava EE6の開発で使っているし、EL3.0だけでひとつのセッションが成り立つのか!?と興味本位に参加しました。

発表者はJSR341のExpert GroupでOracle所属のKin-man ChungさんとJSF等で有名なEd Burnsさんでした。
http://jcp.org/en/jsr/detail?id=341

内容的には、淡々とJSRの内容を読み上げるだけ…な感じもあってか、途中で人が抜けていく感じも(^^?

JSR 341 : Expression Language 3.0

Overview

そもそもEL式って…的な話が冒頭にありました。

  • 2004年にJSTLにおいて出てきた
  • 2006年にJSP2.0へ
  • 2006年にJSF1.2とJSP2.1の両方で
  • 2013年に初めてJSR341として独立した仕様へ
  • JSF,JSPそしてCDIで使える
  • JavaServerとnon-JavaServer stacksを差別化するキー要因

JSTLって…なんですかレベル…(^^;
JavaServer Pages Standard Tag Library、って金魚本にもありました。

最後のポチはよくわかってないです;

New Feature Summary

Expression Language 3.0になって追加となった新機能について。

が挙げられていました。一番アピールしてる感じだったのは、やはりラムダでした(^^;

Java SE8でラムダ使えるようになるけど、もう使えるよ!そうEL式ならね!

みたいに強調されていました。

EL3.0に関しては日本でも@den2snさんがJava EE7のセミナーの中で細かく発表されていたので、大体把握できていた気がします。

Java EE 7でさらに使いやすく、便利になったJSF 2.2、CDI 1.1、EL 3.0の主な強化ポイント
※セミナー発表内ではもう少し細かい粒度で説明がありましたが、上記サイトでは概要だけになってる(>_<)残念

セミナー参加後、自分でも軽く書いてた(^^;

Expression Language 3.0で遊んでみる

実際に試してみた

説明はEL式のサンプルをスライドに出しながら淡々と説明…って感じでした。
そこで挙がってたものを(せっかくなので)実際に一部試してみました。

環境
OS:Windows 8 Pro
IDE:NetBeans7.4RC1
JDK:8 Early Access
AP:GlassFish4.0

セッションにあったサンプルの一部をJSFで以下xhtmlに書いてみます。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>JavaOne2013 EL3.0で遊ぶ</title>
    </h:head>
    <h:body>
        ラムダ式<br/>
        <h:outputText value="#{(x -> x + 1)(10)}" /><br/>
        <h:outputText value="#{((x,y) -> x + y)(3, 4)}" /><br/>
        <h:outputText value="#{(()->64)()}" /><br/>
        <h:outputText value="#{incr = x -> x + 1; incr(10)}" /><br/>
        <h:outputText value="#{fact = n -> n == 0 ? 1 : n * fact(n-1); fact(5)}" /><br/>
        Stream API<br/>
        <h:outputText value="#{[1,3,5,2].stream().sorted().toList()}" /><br/>
        <h:outputText value="#{[1,2,3,4].stream().sum()}" /><br/>
        プログラム側でELProcessor使って生成<br/>
        <h:outputText value="#{indexBean.hello}" /><br/>
    </h:body>
</html>

実行します。

f:id:kikutaro777:20131005124036j:plain

普通に動きますね(^^)

ちなみにBean側でELProcessorを使いましたが以下の簡単なものです。

package jp.co.hoge.bean;

import javax.annotation.PostConstruct;
import javax.el.ELProcessor;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class IndexBean {
    
    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }

    @PostConstruct
    public void init(){
        ELProcessor elp = new ELProcessor();
        
        //concatenation operator +=
        hello = (String) elp.eval("'Hello' += 'World!'");
    }
}

JDK8のEarly Accessでラムダやstreamは既に試せるので、EL3.0で試すメリットも今となってはなんとも…ですが(^^;
JSFのビューでどんなことまでできるのか??あたりを掴んでおくのはアリかなと。

Support for stand-alone environment

ELでラムダとかなると、ビューでロジックがりがり書けちゃうじゃん…とか思いますが、どうもELは独立した1つの言語的な位置づけを目指しているようで、実際今回のセッションでも「Java EEとかと関係なく簡単に使える」とアピールしてました。

そういった意味では、Expression Languageという言語があって、Java EEJSFのビューから使うこともできるよ、的な感じなのかなと。

ここは幾つか具体的なコードもあったので、後で書き加えられればと思います。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村