Java Day Tokyo 2014 開催のご案内



本日、Java Day Tokyo 2014 のイベントの登録が正式に開始いたしました。

昨年は、Java EE 7 のローンチの直前という事もあり、Java EE のお祭りでしたが、今年の、Java Day Tokyo は日本オラクルによる Java SE 8 のローンチ・イベントとしての位置づけておりまして、Java SE 8 に関する多数のセッションをご用意しています。

また本社からも多数のエンジニアを招いております。中でも注目なのは、Stuart Marks さんですが、彼は Java SE 8 の Lambda の実装に深く携わり、Lambda が導入されるまでの経緯から、実際の内部実装まで深くしる人間です。このビデオで一番右にいる方が Stuart Marks さんです。

また、一番右側に映っているのは JavaOne のチェアマンでもあり、Java エバンジェリストのStepen Chin さんです。彼もまた今年の Java Day Tokyo に参加してくださいます。

JavaOne Rock Star

http://www.oracle.com/javaone/rock-stars/index.html

本場 JavaOne ではすばらしい発表者に JavaOne RockStar という称号が与えられます。彼らは共に RockStar の称号を頂いており、すばらしい発表が期待できます。

JavaVM から Lambda, JavaFX, Nashorn まで Java SE 8 に関連したセッションを多数ご用意いたしました。もちろん Java EE 7 も去年の正式発表を元に、今年はより現実的でHTML 5 との組み合わせや将来的な内容も含まれるセッションをご用意いたしました。

是非、今年最大の Java イベントである Java Day Tokyo 2014 にお越しください。皆様のご参加を心より楽しみに致しております。

PS.
過去の経験上、人気セッションは早々に満席になる可能性もございます。是非、お早いうちに希望のセッションをご選択いただけますよう宜しくお願いします。

2014年4月2日 at 12:02 PM コメントする

【祝】Java SE 8 正式リリース


2014 年 3 月 18 日正午 (日本時間 3 月 19 日:午前 4時) 、予定通り Java の開発者待望のJava SE 8 が正式にリリースされました。当日は、多くのメディアでも取り上げられた他、Twitter 上でも非常に多くのお祝いメッセージや期待するメッセージを見受けました。

Publickey :[速報]Java 8が正式公開。ラムダ式、新しい日時API、JavaFX8など。NetBeans 8.0も登場

日経 IT Pro : 2年8カ月ぶりの Javaの新版「Java SE 8」が公開

インターネットコム:Java 8 が一般公開、ラムダ式を採用

マイナビニュース:Java 8が正式リリース – ラムダ式採用、新型導入など大幅強化

インプレス:Oracle、約3年 ぶりとなる「Java SE」のメジャーバージョン「Java SE 8」を正式公開

また、2014 年 3 月 21 日 (金)日本 Java ユーザ・グループ主催の Java SE 8 正式リリースお祝いイベント「祝☆Java 8 Launch」が開催されました。

ここで、私は Java SE 8 がリリースされるまでの歴史や概要を紹介しました。
(お祝いの意味も込めて、今私が持っている Duke 画像を全て使いました。)
その他、5 月に開催する Java のイベントについても紹介しました。今年も JavaDay Tokyo 2014を開催致します。皆様どうぞ楽しみにしてください。

5 月の Java 祭り
5 月 18 日(日) JJUG CCC Spring 2014 場所:ベルサール西新宿
5 月 22 日(木) Java Day Tokyo 2014 場所:品川プリンスホテル
5 月 23 日(金) Java SE 8 & Raspberry Pi ハンズオン 場所:オラクル青山センター
5 月 24 日(土) Java Bike Ride (サイクリング)

最後に、私が本日使用したプレゼン資料の最後に Java SE 8 の主要な機能(Lambda, Date & Time API, JavaFX) 以外の細かな機能変更を 100 ページ程にまとめました。主要機能以外で Java SE 8 でどのような機能が加わったのかをご確認されたい方はご参照頂ければ幸いです。
※ この資料は本イベントでの発表にあわせて急ピッチで作成したため、Lambda, Date & Time API, JavaFX の説明は手を抜いています(主要機能は他の発表者が詳しく説明してくださるので)。また間違いが無いように気をつけたつもりですが、間違いが含まれているかもしれません。もし間違い等を見つけた方は是非、コメント欄にコメントをお寄せいただければ幸いです。

本参考資料が決して全ての変更点ではございません。実際に Java SE 8 で追加された クラスやメソッドの一覧は、高橋 徹さん が昨年末に執筆してくださった、「Java Advent Calendar 2013 11日目 – Java SE 8の新クラス・メソッド一覧」 をご参考にいただけますし、私が調べた所では、上記以外にもオリジナル・ドキュメント自身の since 1.8 の記載漏れで上記にリストされていないクラス等もあります。
ただ、この資料が Java SE 8 で追加された新機能の把握にお役立ち頂ければ幸いです。

Happy Java SE 8 Life !!
そして、JJUG CCC, JavaDay Tokyo でまた宜しくお願いします。

2014年3月21日 at 2:27 PM 2件のコメント

Java SE 8 で Charset の改良


Java SE 8 の新機能、改善点の一つに Charset の実装の改善があります。
これは charset のサイズを小さくし、エンコード、デコードのパフォーマンスを改善する事を目的としています。

実際、Java SE 7 の charset と Java SE 8 のサイズを比較してみると、下記コマンド実行例のように約 3.7 M ほどあったファイルが、3.1 M までスリム化しています。

追記 (2014 年 3 月 18 日):
山中 淳彦さん から本件に関して追加情報を頂きましたので、その内容を下記に共有いたします。

以降、山中 淳彦さんから頂いた情報:
横からすいません。私も興味があったのでチラッと調べてみました。言及されてる変更はJEP 112: Charset Implementation Improvements[1] で記述されてるもので、具体的な issue としては、JDK-6653797[2]JDK-7183053[3]が挙げられてますね。

前者、
By re-implemen/organize JDK’s charset implementation package
sun.nio.cs to achive the following goals

(1) decrease the size of the charsets.jar by 50% (from current 3.4M to below 1.7M).
(2) ease the maintenance cost (most charset implementation to be generated during
JDK build time from text based mapping tables)
(3) improve the performance (speed up the nio encoding/decoding performance)
(4) replace the current sun.io.* converters with an “adaptor” to re-direct the
sun.io encoding/decoding to nio.charset implementation t finally remove the
burden of maintain sun.io.

によって、十年来の目標だった JDK-4948149[4] での、sun.io.* の機能の sun.nio.cs.* への移管が達成され、やっと sun.io.* が削除されたということだと思われます。

後者は、“Faster new String(bytes, cs/csn) and String.getBytes(cs/csn)”[5]
によると、Java7 で single-byte の new String(bytes, cs/csn) のパフォーマンスが改善されたので、Java8 では、同様の hack が UTF-8 charset 文字にも施され、single byte、multi-byte 文字全てで、new String(bytes, cs/csn)、String.getBytes(cs/csn) のパフォーマンスが改善されたという話のようです。

[1] http://openjdk.java.net/jeps/112
[2] https://bugs.openjdk.java.net/browse/JDK-6653797
[3] https://bugs.openjdk.java.net/browse/JDK-7183053
[4] https://bugs.openjdk.java.net/browse/JDK-4948149
[5] https://blogs.oracle.com/xuemingshen/entry/faster_new_string_bytes_cs

追記2
JDK-7183053に関する変更[1]で、test/sun/nio/cs/StrCodingBenchmarkDB.java[2] が追加されてますが、codereview request for 7183053[3] でその効果が紹介されてました。

 The results of the “non -scientific” benchmark StrCodingBenchmarkDB
 running on client
 and server vm on my linux machine are included in docs_c (client) and
 docs_s(server)
 below.

http://cr.openjdk.java.net/~sherman/7183053/dbcs_c

http://cr.openjdk.java.net/~sherman/7183053/dbcs_s

よくわかってませんが、確かに速くなってるようです。

[1] http://hg.openjdk.java.net/hsx/hotspot-comp/jdk/rev/c76ad79a5a2f
[2] http://cr.openjdk.java.net/~sherman/dbcs_array/webrev/test/sun/nio/cs/StrCodingBenchmarkDB.java.html
[3] http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-July/010806.html

山中 淳彦さんから頂いた情報はここまで……


> ls -l /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
-rw-rw-r– 1 root wheel 3696271 12 19 12:13 /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar

> ls -l /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk//Contents/Home/jre/lib/charsets.jar
-rw-rw-r– 1 root wheel 3131343 2 2 01:24 /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk//Contents/Home/jre/lib/charsets.jar

実際に jar を展開して比較した所、sun.io.* が全て削除されている事が分かりました。また、その他にも日本語に関連した部分も含め改良が加わっている事が分かりました。比較の内容の詳細を下記にアップしましたのでどうぞご参照ください。

2014年3月17日 at 5:07 PM コメントする

jBatch(JSR-352) on Java SE 環境


先日のデブサミの発表後、jBatch (JSR-352) についてご質問を頂き、また別件でも同じ質問を頂きましたので、その内容を共有致します。

jBatch を cron 等で実行したいのだが、jBatch は Java EE 環境でしか実行できないのか?とのご質問を頂きました。
答えは、jBatch の仕様上、Java SE 環境上でも動作するように実装されております。

ただし、Java EE 環境上で実装する方がとても簡単に実装・運用ができますので個人的にはJava EE 環境上での動作をお薦めします。仮に Java SE 環境上で jBatch (jBatch の RI)を実行したい場合は下記をご参照ください。

1. 準備

Java SE 環境上で jBatch を稼働させるためには、JavaDB(Derby) が必要です。
また、jBatch の RI を使って Java SE 環境上で動作させるためには、
jBatch RI の実行に必要なライブラリ一式を下記より入手します。

https://java.net/projects/jbatch/downloads/download/jsr352-SE-RI-1.0.zip

zip を展開すると下記のファイルが含まれています。下記全ファイルを lib 配下にコピーしてください。

  • derby.jar
  • javax.inject.jar
  • jsr352-SE-RI-javadoc.jar
  • javax.batch.api.jar
  • jsr352-RI-spi.jar
  • jsr352-SE-RI-runtime.jar

2. Batch コンテナを実行するための設定

次に Batch コンテナを稼働させるためのプロパティの設定を行います。
META-INF ディレクトリ配下に services ディレクトリを作成して
それぞれ下記のファイルを作成してください。

src/META-INF/services/batch-config.properties

JDBC_DRIVER=org.apache.derby.jdbc.EmbeddedDriver
# JDBC_URL=jdbc:derby://localhost:1527/batchdb;create=true
JDBC_URL=jdbc:derby://localhost:1527/batchdb

src/META-INF/services/batch-services.properties

J2SE_MODE=true

以上で基本的には Java SE 環境上で動作させるために必要な設定は完了です。

3. 動作確認

それでは、バッチであるファイルの内容を別のファイルに書き出すサンプルを作成します。(※ 以降は Java EE 環境での実装と同じです。)
下記に、本 jBatch プロジェクトのディレクトリ構成を下記に示します。

まず、メイン・メソッドから Batch の JOB: “my-batch-job” を起動します。

package com.yoshio3.main;

import java.util.Properties;
import javax.batch.operations.JobOperator;
import javax.batch.runtime.BatchRuntime;

/**
 *
 * @author Yoshio Terada
 */
public class StandAloneBatchMain {

    public static void main(String... args) {
        JobOperator job = BatchRuntime.getJobOperator();
        long id = job.start("my-batch-job", new Properties());
    }    
}

この、”my-batch-job” の処理内容は、META-INF/batch-jobs ディレクトリ配下に、”my-batch-job.xml” として定義します。

“my-batch-job” の内容を下記に示します。プロパティを2つ input_file,output_file 定義し、それぞれ /tmp/input.txt, /tmp/output.txt を示します。また、JOB の step としてチャンク形式の step を1つ定義し、データの読み込み用(reader)、処理用(processor)、書き込み(writer)用の処理を、それぞれ、MyItemReader, MyItemProcessor, MyItemWriter に実装します。

<job id="my-batch-job"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
    <properties>
        <property name="input_file" value="/tmp/input.txt"/>
        <property name="output_file" value="/tmp/output.txt"/>
    </properties>

    <step id="first-step">
        <chunk item-count="5">
            <reader    ref="com.yoshio3.chunks.MyItemReader"/>
            <processor ref="com.yoshio3.chunks.MyItemProcessor"/>
            <writer    ref="com.yoshio3.chunks.MyItemWriter"/>
        </chunk>
    </step>
</job>

読み込み用の処理は、ItemReader を実装したクラスを作成します。ここでは、input_file で指定されたプロパティのファイル(/tmp/input.txt)ファイルを読み込み、1行読み込んでその値を返します。

package com.yoshio3.chunks;

import java.io.BufferedReader;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.batch.api.chunk.ItemReader;
import javax.batch.runtime.context.JobContext;
import javax.inject.Inject;

public class MyItemReader implements ItemReader {

    @Inject
    JobContext jobCtx;

    BufferedReader bufReader;

    @Override
    public void open(Serializable checkpoint) throws Exception {        
        String fileName = jobCtx.getProperties()
                .getProperty("input_file");
        bufReader = Files.newBufferedReader(Paths.get(fileName),Charset.forName("UTF-8"));
    }

    @Override
    public void close() throws Exception {
        bufReader.close();
    }

    @Override
    public Object readItem() throws Exception {
        String data = bufReader.readLine();
        System.out.println("Reader readItem : " + data);
        return data;
    }

    @Override
    public Serializable checkpointInfo() throws Exception {
        return null;
    }
}

次に、読み込んだデータの加工処理部分は、ItemProsessor を実装したクラスに記述します。ここでは、読み込んだデータ(文字列)に対して、文字列を付加して返しています。

package com.yoshio3.chunks;

import javax.batch.api.chunk.ItemProcessor;

/**
 *
 * @author Yoshio Terada
 */
public class MyItemProcessor implements ItemProcessor {

    @Override
    public Object processItem(Object item) throws Exception {
        String line = (String)item ;
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.append("Processor processItem : ");
        sBuilder.append(line);
        String returnValue = sBuilder.toString();
        System.out.println(returnValue);
        return returnValue;
    }    
}

最後に書き出し部分を ItemWriter を実装したクラスに記述します。ここでは、oputput_file のプロパティを取得して書き出すファイル名を取得しています。次にファイルに対して取得したデータを書き出しています。

package com.yoshio3.chunks;

import java.io.BufferedWriter;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import javax.batch.api.chunk.ItemWriter;
import javax.batch.runtime.context.JobContext;
import javax.inject.Inject;

/**
 *
 * @author Yoshio Terada
 */
public class MyItemWriter implements ItemWriter {

    @Inject
    JobContext jobCtx;

    String fileName;

    BufferedWriter bufWriter;

    @Override
    public void open(Serializable checkpoint) throws Exception {
        fileName = jobCtx.getProperties()
                .getProperty("output_file");
        bufWriter = Files.newBufferedWriter(Paths.get(fileName), Charset.forName("UTF-8"));
    }

    @Override
    public void close() throws Exception {
        bufWriter.close();
    }

    @Override
    public void writeItems(List<Object> items) throws Exception {
        for (Object obj : items) {
            String data = (String) obj;
            System.out.println("Writer writeItems : " + data);

            bufWriter.write(data);
            bufWriter.newLine();
        }
    }

    @Override
    public Serializable checkpointInfo() throws Exception {
        return null;
    }
}

上記を実装した後、コンパイルをしてください。


# java -classpath
  lib/jsr352-ri-1.0/javax.inject.jar:
  lib/jsr352-ri-1.0/derby.jar:
  lib/jsr352-ri-1.0/jsr352-RI-spi.jar:
  lib/jsr352-ri-1.0/javax.batch.api.jar:
  lib/jsr352-ri-1.0/jsr352-SE-RI-javadoc.jar:
  lib/jsr352-ri-1.0/jsr352-SE-RI-runtime.jar:
  build/classes com.yoshio3.main.StandAloneBatchMain

実行すると下記のようなログを確認できます。chunk 形式ではデフォルトで 10 件まとめて読み込み&処理を実施し、
まとめて 10 件書き込むという動作を下記からも確認できるかと思います。

2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createSchema
情報: JBATCH schema does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: CHECKPOINTDATA table does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: JOBINSTANCEDATA table does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: EXECUTIONINSTANCEDATA table does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: STEPEXECUTIONINSTANCEDATA table does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: JOBSTATUS table does not exists. Trying to create it.
2 18, 2014 12:10:50 午後 com.ibm.jbatch.container.services.impl.JDBCPersistenceManagerImpl createIfNotExists
情報: STEPSTATUS table does not exists. Trying to create it.
Reader readItem : hogehoge1
Processor processItem : hogehoge1
Reader readItem : hogehoge2
Processor processItem : hogehoge2
Reader readItem : hogehoge3
Processor processItem : hogehoge3
Reader readItem : hogehoge4
Processor processItem : hogehoge4
Reader readItem : hogehoge5
Processor processItem : hogehoge5
Reader readItem : hogehoge6
Processor processItem : hogehoge6
Reader readItem : hogehoge7
Processor processItem : hogehoge7
Reader readItem : hogehoge8
Processor processItem : hogehoge8
Reader readItem : hogehoge9
Processor processItem : hogehoge9
Reader readItem : hogehoge10
Processor processItem : hogehoge10
Writer writeItems : Processor processItem : hogehoge1
Writer writeItems : Processor processItem : hogehoge2
Writer writeItems : Processor processItem : hogehoge3
Writer writeItems : Processor processItem : hogehoge4
Writer writeItems : Processor processItem : hogehoge5
Writer writeItems : Processor processItem : hogehoge6
Writer writeItems : Processor processItem : hogehoge7
Writer writeItems : Processor processItem : hogehoge8
Writer writeItems : Processor processItem : hogehoge9
Writer writeItems : Processor processItem : hogehoge10
Reader readItem : hogehoge11
Processor processItem : hogehoge11
Reader readItem : hogehoge12
Processor processItem : hogehoge12
Reader readItem : hogehoge13
Processor processItem : hogehoge13
Reader readItem : hogehoge14
Processor processItem : hogehoge14
Reader readItem : hogehoge15
Processor processItem : hogehoge15
Reader readItem : hogehoge16
Processor processItem : hogehoge16
Reader readItem : hogehoge17
Processor processItem : hogehoge17
Reader readItem : hogehoge18
Processor processItem : hogehoge18
Reader readItem : hogehoge19
Processor processItem : hogehoge19
Reader readItem : hogehoge20
Processor processItem : hogehoge20
Writer writeItems : Processor processItem : hogehoge11
Writer writeItems : Processor processItem : hogehoge12
Writer writeItems : Processor processItem : hogehoge13
Writer writeItems : Processor processItem : hogehoge14
Writer writeItems : Processor processItem : hogehoge15
Writer writeItems : Processor processItem : hogehoge16
Writer writeItems : Processor processItem : hogehoge17
Writer writeItems : Processor processItem : hogehoge18
Writer writeItems : Processor processItem : hogehoge19
Writer writeItems : Processor processItem : hogehoge20
Reader readItem : null

書き込む間隔を変更したい場合は、Job XML の設定を変更し<chunk item-count=”5″>を設定します。

<job id="my-batch-job"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
    <properties>
        <property name="input_file" value="/tmp/input.txt"/>
        <property name="output_file" value="/tmp/output.txt"/>
    </properties>

    <step id="first-step">
        <chunk item-count="5">
            <reader    ref="com.yoshio3.chunks.MyItemReader"/>
            <processor ref="com.yoshio3.chunks.MyItemProcessor"/>
            <writer    ref="com.yoshio3.chunks.MyItemWriter"/>
        </chunk>
    </step>
</job>

<chunk item-count=”5″>を設定した後、実行すると下記のような結果が得られます。

run:
Reader readItem : hogehoge1
Processor processItem : hogehoge1
Reader readItem : hogehoge2
Processor processItem : hogehoge2
Reader readItem : hogehoge3
Processor processItem : hogehoge3
Reader readItem : hogehoge4
Processor processItem : hogehoge4
Reader readItem : hogehoge5
Processor processItem : hogehoge5
Writer writeItems : Processor processItem : hogehoge1
Writer writeItems : Processor processItem : hogehoge2
Writer writeItems : Processor processItem : hogehoge3
Writer writeItems : Processor processItem : hogehoge4
Writer writeItems : Processor processItem : hogehoge5
Reader readItem : hogehoge6
Processor processItem : hogehoge6
Reader readItem : hogehoge7
Processor processItem : hogehoge7
Reader readItem : hogehoge8
Processor processItem : hogehoge8
Reader readItem : hogehoge9
Processor processItem : hogehoge9
Reader readItem : hogehoge10
Processor processItem : hogehoge10
Writer writeItems : Processor processItem : hogehoge6
Writer writeItems : Processor processItem : hogehoge7
Writer writeItems : Processor processItem : hogehoge8
Writer writeItems : Processor processItem : hogehoge9
Writer writeItems : Processor processItem : hogehoge10
Reader readItem : hogehoge11
Processor processItem : hogehoge11
Reader readItem : hogehoge12
Processor processItem : hogehoge12
Reader readItem : hogehoge13
Processor processItem : hogehoge13
Reader readItem : hogehoge14
Processor processItem : hogehoge14
Reader readItem : hogehoge15
Processor processItem : hogehoge15
Writer writeItems : Processor processItem : hogehoge11
Writer writeItems : Processor processItem : hogehoge12
Writer writeItems : Processor processItem : hogehoge13
Writer writeItems : Processor processItem : hogehoge14
Writer writeItems : Processor processItem : hogehoge15
Reader readItem : hogehoge16
Processor processItem : hogehoge16
Reader readItem : hogehoge17
Processor processItem : hogehoge17
Reader readItem : hogehoge18
Processor processItem : hogehoge18
Reader readItem : hogehoge19
Processor processItem : hogehoge19
Reader readItem : hogehoge20
Processor processItem : hogehoge20
Writer writeItems : Processor processItem : hogehoge16
Writer writeItems : Processor processItem : hogehoge17
Writer writeItems : Processor processItem : hogehoge18
Writer writeItems : Processor processItem : hogehoge19
Writer writeItems : Processor processItem : hogehoge20
Reader readItem : null

以上のように、Java SE の環境でも jBatch (JSR-352) を実行する事ができます。今回は参考のため jBatch の RI を使用しましたが、各 Java EE 7 準拠のアプリケーション・サーバで必要なライブラリはそれぞれ異なるかと想定します。必要なライブラリは各アプリケーション・サーバでお調べください。

2014年2月18日 at 12:51 PM 2件のコメント

Java EE 7 の新機能紹介と Java のイベントのご紹介


2014年2月13日(木)・14日(金)に目黒雅叙園でDevelopers Summit 2014 が開催されました。

今日は関東はあいにくの天気(大雪)で、とても足元が悪い中多くの方にイベントやセッションに参加して頂きまして誠にありがとうございました。また、Developers Summit 2014の事務局の皆様に置かれましても、同様に(Javaの)大規模イベントの企画を行っている者として、数多くの難作業があった事が用意に想像ができるため、イベントの主催者の皆様全員にあつく御礼を申し上げます。

私自身は、本日 14日(金)に【14-D-6】45 new features of Java EE 7 in 45 minutes というセッションを持たせて頂き発表を行いました。私のセッションにも非常に多くの開発者の皆様にご参加いただき良いフィードバックや、難しすぎたといったフィードバックなども頂きそうしたご意見を次回につなげていきたいと思います。本日発表に使用した資料を下記に公開します。実際にプレゼン時にはアニメーション等も使用しているため、下記の静的なコンテンツと内容は若干変わりますがご参考頂ければ誠に幸いです。

今回の個人的な所管として、45 分で 45 個 (総ページ数 P 90) の Java EE 7 の新機能をご紹介する事は初めてのチャレンジだったため、時間内に終わるか発表前から心配しておりましたが、結果、なんとかそして大幅な時間超過なく終える事ができました (最後はかなり足早になってしまい申し訳ありません)。本日、ご紹介した内容を本来であれば1件づつブログなどの記事にまとめられれば良いのですが、私自身次のステップに足を向けなればならないため、直近でブログに書く事は困難かもしれません。(もちろん時間ができれば書きますが。)どうぞご理解頂ければ幸いです。

さて、その次のステップでございますが、今日のセッションの最後に申し上げましたが、5 月に今年最大の Java のお祭りイベントを企画しております。そしてこれからその準備に多くの時間を割くようになります。現時点で詳細を申し上げる事はできませんが、5月18日〜5月24日まで、Java の開発者の皆様は極力日程を空けておいていただけないでしょうか。正式な情報が決まり次第、JJUG / 日本オラクルから正式アナウンスがあるかと想定します。

2/17 追記:JJUG のイベントとオラクルのイベントは、別イベントとして、別日程で開催されます。また、JJUG のイベント JJUG CCC につきましては、Call for Papers の募集も既に開始しておりますので日程等の詳細は JJUG のサイトをご覧ください。

日本オラクルからの正式なアナウンスまでは是非お待ちいただきたいのですが、今から 5 月の出張申請、もしくは上長への申請を上げておいていただければ誠に幸いです。

今年のイベントは、Java SE 8 の正式リリース後という事もあり、昨年以上の盛り上がりをご期待頂けるかと思いますので、どうぞお楽しみにしてください。

「5月末 Java のお祭りをするどぉーーーー!!!」

2014年2月14日 at 11:36 PM コメントする

CDI 1.1 : @Vetoed アノテーション of 1/45


昨日、「Java EE 7 の新機能を 45 分で 45 個ご紹介」のエントリを書きましたが、具体的にどのような内容なのか?ご興味ある方もいらっしゃるかと思いますので、セッション内容の一例をご紹介します。

CDI 1.1 : @Vetoed アノテーション

CDI 1.1 から特定のクラスだけをインジェクション対象からはずし、インジェクションできないようにする事ができるようになりました。インジェクション対象からはずすためには、該当のクラスに対して、@Vetoed アノーテションを付加します。

ご参考:CDI 1.0 までは XML で除外対象の設定を行ってました。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee">
    <scan>
        <exclude name="com.acme.rest.*" />

        <exclude name="com.acme.faces.**">
            <if-class-not-available name="javax.faces.context.FacesContext"/>
        </exclude>
    </scan>
</beans>

@Vetoed アノテーションの利用例として、JPA のエンティティ・クラスに対して付加する事が有効です。このアノテーションを JPA のエンティティに付加する事で、CDI のライフサイクルと JPA のライフサイクルの競合を防ぎより安全に実装することができます。下記の例では JPA のエンティティを CDI では管理できないようにし JPA の EntitiManager によってのみ管理する例を示します。

@Entity
@Vetoed
public class Person {

   @Column
   private String fName;

   @Column
   private String lName;
}

もしくは、package-info.java を作成し、該当パッケージに含まれるクラス全てをインジェクション対象から外す事も可能です。

@Vetoed
package com.yoshio3.noninjectable ;

import javax.enterprise.inject.Vetoed ;

このように、本セッションは Java EE 7 で追加された新機能をいち早くご理解されたい方に有用なセッションです。前提としてコンフィグレーションの内容やソースコードを交えての説明ですので Java のコードが理解できる方の参加が必須で、金魚本や過去のセミナーなどから Java EE 5/6 を触った事のある方ならばより理解がしやすいかと想定します。

2014年1月29日 at 1:32 PM コメントする

Java EE 7 の新機能を 45 分で 45 個ご紹介


皆様、いつも大変お世話になっております。

この度、Developers Summit 2014 (通称:デブサミ) でJava EE 7 の新機能をご紹介するセッションを持たせていただき、登壇する事になりましたのでご案内致します。

2014/2/14(金) 16:20~17:05
「45 new features of Java EE 7 in 45 minutes」

Java EE 7 は2013年6月に正式にリリースされ、2014年以降Java EE 7 に準拠したアプリケーションが続々と登場する事が予想されます。Java EE 7 は、WebSocket,JSON, Batch, Concurrencyの新機能が追 加された他、既存のAPIにも様々な改良が施されています。エンタープライズJavaの今後、とても重要になるJava EE 7の新機能を45分で45 の新機能を紹介します。

※ このセッションは、本場 JavaOne San Francisco 2013 で人気があったセッションを日本で初めて実現する物で、コンテンツは今回、日本の開発者の皆様向けに作り直して提供予定です。また、Java EE 5,6 についてある程度勉強して頂いている方が、Java EE 7 への差分をまとめて理解をする事ができるセッションです。ソースコードを交えながらご紹介いたしますので、是非ご都合のつく方はお越しください。

2014年1月28日 at 5:11 PM 1件のコメント

過去の投稿


ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

JavaOne

カレンダー

2014年4月
« 3月    
 123456
78910111213
14151617181920
21222324252627
282930  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 470,131 hits

Feeds


フォロー

新しい投稿をメールで受信しましょう。

現在3,221人フォロワーがいます。