Challenge Java EE !

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

NetBeansでやってみた「はじめてのSpring Boot」

JJUG CCCの懇親会で@makingさんと話したら、Spring Bootの書籍を頂きました(^^)
ありがとうございます!!

f:id:kikutaro777:20141120003221j:plain

火事であらゆる技術書が燃えたり水浸しになってしまい(金魚本すら…ウッ)、Javaの書籍としては「Javaエンジニア養成読本」の次が「はじめてのSpring Boot」となりました。

著者がうまいこと言ってました(私が「堀北真希さん」の大ファンだから(^^;;)

ということで、本を読みながら、普段使ってるNetBeansでSpring Bootやってみました。
NetBeans 8.0.1&JDK 1.8です。

「ファイル」->「新規プロジェクト」

f:id:kikutaro777:20141120004333j:plain

カテゴリ「Maven」でプロジェクト「Javaアプリケーション」を選択

f:id:kikutaro777:20141120004408j:plain

プロジェクト名など適当に入力

f:id:kikutaro777:20141120004552j:plain

pom.xmlを編集

NetBeansで生成されたpom.xmlは次の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>MyFirstSpringBoot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

で、以下のように定義を追加します。各定義の意味は「はじめてのSpring Boot」書籍に詳しく解説があります(^^)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>MyFirstSpringBoot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <!-- ここから追加 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.8.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>        
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <!-- ここまで追加 -->
</project>

次にメインクラスを定義していきます。

パッケージを右クリック「新規」->「その他」

f:id:kikutaro777:20141120005042j:plain

カテゴリ「Java」ファイル・タイプ「Javaメイン・クラス」選択

f:id:kikutaro777:20141120005223j:plain

クラス名「App」などへ

f:id:kikutaro777:20141120005242j:plain

コード書く

デフォルトで生成されたApp.javaは次の通りです。

package com.mycompany.myfirstspringboot;

/**
 *
 * @author kikuta
 */
public class App {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
    
}

これを以下のようにします。各種アノテーションやコードの説明は「はじめてのSpring Boot」書籍に詳しく解説があります(^^)

package com.mycompany.myfirstspringboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 *
 * @author kikuta
 */
@RestController
@EnableAutoConfiguration
public class App {

    @RequestMapping("/")
    public String home(){
        return "Hello, World !";
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
    
}

実行

こんな感じに実行すると
f:id:kikutaro777:20141120005745j:plain

Springの文字がみえて、待ち受け状態に
f:id:kikutaro777:20141120005756j:plain

ブラウザを立ち上げてlocalhostの8080にアクセスすると…あっさり成功!
f:id:kikutaro777:20141120005835j:plain

うーむ手軽だ。

(当たり前かもですが)NetBeansでも普通に進められそうなので読み進めていきます!

ということで、解説が気になる方は「はじめてのSpring Boot」買いましょう!
ページ数も170ページくらいで、とても読みやすいし、実践的な内容となってます↓



JJUG CCC 2014 Fallで感じたJavaの熱気

今日はベルサール西新宿で行われたJJUG CCC 2014 Fallに行ってきました。
(JJUG = Japan Java User Group , CCC = Cross Community Conference)

Javaを始めてちょうど2年くらい、JJUG CCCは過去ブログを追って数えてみたら今回で5回目の参加でした(^^;

それにしても…午前の段階から、今までに比べても参加人数が多い。

それもそのはず、登録者数をみたら650人超えw

実際の参加もかなりの人数に達したようです。

とりあえず参加セッションの感想など。

既にまとめられている方々も!皆さんはやい!


基調講演1 : これからのJavaエンジニアの生きる道

橋本 吉治さん(日本Javaユーザーグループ 副会長)

これから重要となる大事な3つの技術として、クラウド・人工知能・Javaを挙げられていました。私は学生時代に人工知能を専攻していたので、とても興味深く聞かせて頂きました。

IBMのWatsonがやってる処理の話とか、東ロボ君とか、この辺は知らないことが多かったです。日本では第五世代コンピュータプロジェクトで人工知能研究を牽引していた時代もあったし、是非実用レベルでの更なる盛り上がりを期待したいです。

講演後半はコミュニティに対する想い・熱い気持ちが聴衆に伝わってくる、とても良い基調講演でした。泣けました。

基調講演2 : Java 2014 将来に向かって

Simon Ritterさん

次の基調講演はUSのOracleでエバンジェリストをされているSimon Ritterさんでした。

内容的には、今年のJavaOne 2014で発表されていた内容ベースかなと。英語、とてもわかりやすく喋っておられてて、正直、頑張って聞き取りたかった(>_<)けど、通訳さんがすごいので、ついそちらに耳が集中してました(苦笑

ランチ

JJUG CCCでは毎回お昼は一人(いわゆるボッチ飯…?)だったのですが…今回は、大都会岡山からいらした@zephiransasさんからお誘いを頂きました(>_<)!!

@zephiransasさんにはずっとご挨拶したいなーと思っていたのですが、Java Day Tokyoとかではすれ違ってしまい、、、ついに念願叶いました!

そしてお昼ご飯、Oracleエースこと@yamadamnさんが私の分のお会計をサラッとされて、おごってもらってしまいました(>_<;;ひー、先日の火災の件でお気遣い頂いてしまった(汗)

「ここは私が」的に紳士な感じのお支払で、エースはホント色々エースなんだなーと(^^;惚れてまうやろー

Javaが見るニュータイプの夢 ~これからJavaはどう変わるか~

きしだ なおきさん

最近ガンダムをずっと観ていらっしゃるとのことで、タイトルがあれですが(^^;

ってか表紙の手書きクオリティ高いw

ニュータイプ=新しい型

ということで、ちゃんと関連していた(>_<)

主にProject ValhallaとProject Panamaの話をメインにされていました。

Value Typesは便利そう!だけど、予約語ホントどうなるんだろ(^^;
変数名valueは結構ある気がするw

スライドと合わせて次のエントリも必見ですね。



セッション後、きしださんによる「Javaエンジニア養成読本」サイン会が始まって、その場にいたので一緒にサインさせて頂くことに(>_<;;恐るべしきしださん効果

Spring Boot + Doma + AngularJSで作るERP(統合基幹業務システム)

松崎 学さん

裏枠のStream APIも聞きたかったのですが、自分の仕事にも近いので松崎さんのセッションへ参加しました。すごいコミコミで立ち見!

私の仕事でもERPはよく耳にして、自分達が構築する販売管理システムの後ろにいて、連携なども多々(^^;

ERPをマルチテナントなSaaSで提供という冒頭だけで「すごい!」という感じですが、なんといってもフレームワークの変遷が興味深いです。

Seasar2(Teeda + S2Dao)からJava EE 6(JSF + JPA)、そして今はSpring Boot + Doma + AngularJSとのこと。

Java EE 6からJava EE 7ではなく、Spring Bootを採用した経緯や理由が興味深々でした。

WebやるからにはJS避けられない時代を感じつつ、自分の場合はJSFに逃げてるなぁと(´・ω・`)その他、JPAとか含めて、色々と耳が痛い+共感するものが多かったです(^^;

息が長いシステムを前提としつつ、フロントエンド技術の移り変わりも想定・覚悟して、基幹系でこうした構成をとられていることに「すごい!」と(^^;

とりあえず@makingさんの「はじめてのSpring Boot」を読もう!(笑)

Java EE の新たな旅立ち : Java EE 8 へ向かって

寺田 佳央さん

ここも裏枠のトラブルシュート話と悩みつつ、やはりJava EE聞いておかねばと寺田さんのセッションへ。

Java EE 8の概要的なお話かな、と思っていたら、コード例など含めて詳しく話される形でした(お話にもありましたが、Java EE 8の仕様策定は現在始まった段階ですので、コード例などは今後大きく変わることもありえます)

スライド7枚目でJava EEのSpec Leadがズラっと並んでいる写真で「皆さん何人くらいご存知ですかー?」的に質問しつつ、意外と実際の名前を言えなかった寺田さんがお茶目な感じで面白かったです。

ちなみに私は左から2番目のLinda DeMichielさんと一番右のEd Burnsさん、あとEL式の方(調べたらChungさん?)しかわからなかったです…。おそらく@khasunumaさんがいらっしゃったらスラスラ名前をあげられるんだろうなぁ…と(^^;

もう少しこの辺も覚えていかねば(>_<)

Java EE 8はセキュリティとか認証まわりが楽しみ、というか、はよ欲しい…。

Java EE 6 Adoption in One of the World’s Largest Online Financial Systems (日本語)

岩崎 浩文さん

今年のJavaOne 2014でスピーカーもされた楽天の岩崎さんによるセッションで、JavaOne再演の日本語バージョンとのことでした。

GlassFishで開発を進めて途中からWebLogicへ移行する、などの話はかなり興味深かったです。

それを金融系のシステムで行う勇気がすごいなと(^^;

WebLogicやExadataなどOracle系が多かったですが、最後に「決してOracleのまわしものではないですよ」とのことで「Java EE 7対応の商用サーバがでるの遅い!」とビシッとおっしゃられていたのが印象的でした(^^;

Javaだからこそできる、ビズリーチの攻めのDB変更

久保 雅彦さん

株式会社ビズリーチ(BizReach)さんのスポンサー枠とのことでしたが、会社紹介はさらっとw
私はDBFluteの話を聞きにきたので良かったんですがw

「皆さんDB変更は好きですか?」から始まって、掴みはOKみたいな感じでした(^^;

話が上手くて面白いのですが、その根本にあるのは「現場話」だなーと。聞いてると「あるある」みたいな。

そういう意味では紹介されていた機能の多くが「うわー、それ便利」と思うものばかりで、タイプセーフやドキュメント自動生成、Alterのチェッカーや性能チェックなどなど、現場で役立つ機能が揃っている感じでした。

Modern Web Development with ninjaframework

吉田 貴文さん

Pure Javaで作られているWebフレームワーク「Ninja - full stack web framework for Java -」の紹介でした。

ゼロ知識からでも始められるチュートリアル的に1つ1つ丁寧に解説されていました。ちょっとしたWebを作る際には、やはりこういう軽量な感じのが便利だよなぁと改めて思ったり。

テンプレートエンジンにFreemarker、DBマイグレーションにFlywayなど、固定的に決まっているものがあるようですが、その辺りはフレームワークだしね、くらいで割り切って使うと学習コストも高くなさそうでいいなぁと。

プレゼン自体ははやめに終わってしまったのですが、続々と質問が出て、最後は時間通りでした。

あと全然関係ないのですが、スライドのフォントが好きでした(^^)たぬき油性マジックというものらしい!

フリーフォント『たぬき油性マジック』を公開しました。 | たぬきフォント

Java女子部設立から10ヶ月…私たち、こんなことしてきました!!

Java女子部メンバ

最後はJava女子部の活動報告を聞きにいきました(^^)

今年から色々活動されている話はJJUGを通じて知っていて、自分も会社の後輩や他部門の女性エンジニアに「Java女子部ができたらしいよ~面白そうだよ~」と情報流して、実際に参加とかもしてくれていました。

発表は女子部に所属されている方々から、それぞれの感想などを中心に話されていました。皆さん、それぞれ色々な想いを持って参加して、やはり女性ならではの観点なども(こうして聞いてみると、弊社は意外と女性エンジニアが多いんだなぁと)

やはり初めて社外の勉強会へ参加するにあたっての敷居とか(実際に敷居はないのですが、やっぱり初めて参加するときって色々不安、、)間口を広げるためにも女子部があるのは絶対良いなーと。

ということで、セッション聞いて、また社内の女性Javaエンジニアを探してコツコツ広めていこうと思いました。

そういえばDukeがリボンしてる女の子版みたいな絵がよく使われているなぁ、と思ったら、Duchess(ダッチェス)という公式キャラだったのにびっくりしました!


懇親会

朝10時から20時までセッションが続いて、懇親会へ。

今までTwitter上でしか面識なかった方々とも話せて楽しかったです(^^)

また、寺田さんから、私のブログを読んで参加されたという@yangping0211さんを紹介頂いてお話させて頂きました。びっくり!!

懇親会に初参加したときのドキドキは自分も未だ忘れられないし、人見知りなので中々周囲と話せなかったのもほろ苦い良い思い出(^^;@yangping0211さんは勇気出して超有名人な寺田さんにまず話かけられたそうで、すごい勇気いるけど、話をしたい方がわからないことも多々あるので、良い方法だなーと思いました。

懇親会では恒例のLT大会やJavaグッズのジャンケンなどもあり、大盛り上がりでした

懇親会の参加人数自体、今までの倍増って感じで100名近くの参加だったようです。すごい!

最後の締めは、さくらばさんに続いて日本人2人目のJavaチャンピオンに一番近いといわれる@bitter_foxさんによる一本締めでした。

まとめ

先日MSさんから立て続けにびっくりニュース(.NET Frameworkのサーバサイドクロスプラットフォーム対応とかコア部のOSS化とか…etc)があって、これはJava的には結構…とかも思ったりしながら今回のJJUG CCCに参加したのですが、JavaはJavaですごい盛り上がっているなぁと思いました。

技術的な盛り上がりもあると思いますが、コミュニティの熱気というか、そういう盛り上がりを強く感じました。

自分自身がそうだったのですが、仕事でJava利用を求められて、でも周囲に詳しい人がいない(じゃあなんでそんな選定してるんだよ、というのは置いておいて…政治的なこととかありますよね…大人って汚いゴニョゴニョ)、という立場にあると、こうしたコミュニティの存在は本当にありがたいです。

また、色々な方から先日のブログ(Javaエンジニア養成読本が出ます! - Challenge Java EE !)でも触れた火災巻き込まれのご心配、お気遣い頂き、ありがとうございました。「wishlistはよ」とたくさん温かいお言葉頂きました(´;ω;`)ブワッ 今はまだウィークリーマンションなのと色々バタバタしているので、新居が決まったら作らせて頂こうかなと思います(^^;

ちなみに@yy_yankさんから乃木坂46のクリアファイルをお見舞い品として頂きましたw
f:id:kikutaro777:20141116084742j:plain

人生初のサインも経験して、あらためて1000人規模でサインしていた堀北真希さんの大変さを僅かながら共感させて頂くこともできて感無量です!

PrimeFaces Extensions 3.0.0の新しいコンポーネント

JSFのリッチコンポーネントライブラリ「PrimeFaces」の拡張ライブラリである「PrimeFaces Extension」がバージョンアップしてました。
3.0.0となって、次のコンポーネントが新たに追加されています。

  • Analog Clock
  • Timer
  • Knob
  • Document Viewer
  • GChart
  • Gravatar

それぞれ簡単に紹介します。

Analog Clock

名前の通り、アナログ時計ですね(^^;

Faceletsにて次のように定義するだけで表示されます。

<pe:analogClock />

が、で・でかい。デフォルトだとブラウザの最大幅で出るようです。

f:id:kikutaro777:20141107155008j:plain

width属性でピクセルが指定できました。

<pe:analogClock width="300" />

f:id:kikutaro777:20141107155023j:plain

Timer

カウントダウンするタイマーです。5秒を設定してみると

5…

f:id:kikutaro777:20141107163953j:plain

4…

f:id:kikutaro777:20141107163958j:plain

3…2…1…0

listener属性で、カウントがゼロとなったときにイベントを呼び出せるので、メッセージを出してみました。

f:id:kikutaro777:20141107164009j:plain

Faceletsはこんな感じ。

<h:form>
    <p:growl />
    <pe:timer timeout="5" listener="#{extNewCompBean.timerZero()}" update="@form"/>
</h:form>

CDI管理Beanにてメッセージ生成処理のメソッドを定義してます。

@Named(value = "extNewCompBean")
@RequestScoped
public class ExtNewCompBean {

    public void timerZero(){
        FacesContext.getCurrentInstance().addMessage("timer", new FacesMessage("タイマーゼロ―"));
    }
}

Knob

(ドア)ノブみたいなコンポーネントです。占有率みたいなグラフで使う感じ…でしょうか。

f:id:kikutaro777:20141108211048j:plain

マウスクリックやドラッグでグルッと塗られます。

f:id:kikutaro777:20141108211124j:plain

ちょうど堀北さんの年齢を示してますね。

Document Viewer

Mozilla Foundationが開発しているpdf.jsを利用したPDFビューアコンポーネントのようです。まるでAcrobat Reader(^^;;

f:id:kikutaro777:20141108211647j:plain

PrimeFacesにもMediaコンポーネントというのがあって、PDFビューアの機能もありますが、Mediaコンポでは操作メニューのようなものはないので、こちらのほうが多機能です。

GChart

Google Chart」をJSF向けにラップしたコンポーネントとのことです。

基本的にはサーバサイドでGChartModelを生成して、GChartのvalue属性とバインドして使う感じみたいです。

まだ実際には触ってません。

f:id:kikutaro777:20141108212006j:plain

f:id:kikutaro777:20141108212216j:plain

Gravatar

プロフィール画像など登録しておく「Gravatar」サービスのコンポーネント(^^;;

PrimeFacesなんでもありになってきたな…。

これも実際にはまだ試してないです。

f:id:kikutaro777:20141108212508j:plain

ハマったとこ

理由はわからないのですが、テーマ設定しないと、一部コンポーネントで次のエラーが動きませんでした(^^;

Expression cannot be null

f:id:kikutaro777:20141107154230j:plain

デフォルトテーマで動いてくれそうなのになぁ…。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析