せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

たぶんオープンソースカンファレンスに行ってきた

多分っていうのは、なんか萌えキャラとゆるキャラが多すぎてそっちの印象しか残ってないから。
別にいいんですけど、そういうの受け入れない層もあるわけで、もうちょっと抑えてもいいかなぁと思ったり。

Hadoopの話

Hadoop1系と2系の違いのお話。
会場にいた人の半分以上がHadoopを知らないという予想外の展開。
消化できるのか!?

Hadoop1系と2系の違いは

  • Java7に対応した!8はまだ・・・?
  • MapReduce以外も出来るようになる
  • HDFSのSnapshotがとれたりとか色々改良
  • みんな大好き象さんは続投
  • 何を使うにせよ、データを蓄えることが大切!

1系は今後どうなるかよくわからないとのこと。
HDFSの代わりにインメモリを利用するApacheSparkを使うのはそのうち試してみたい。

TOPPERSの話

組み込み系のOSです。
全く縁のない組み込み系ですが、なんとなく聞いてみました。

  • 産官学一体のプロジェクトなのはいいけど、足かせがありそうな感じ。
    せっかく工夫して作ったものも「公式認定」が必要とかもったいない
  • 子供向け教育セットみたいなものを出すみたいだけど2万円は微妙な気がする。。。
    RegoとかRaspberry Piが競合製品になりそうだけど勝てるのか?
  • OSを作る人達の集まりなので、使う人達のことをあまり考えていない。

多分、日本でも優秀な技術者を投入していると思うんです。
成果物も色々ありそうなんですけど、敷居高くてユーザが増えにくい気がします。

雨と開催地が遠くても熱気に溢れたイベントでした。
まりんかさん可愛かったし。

JJUG ナイトセミナ「3大IDE頂上決戦」に行ってきた

「それ○○でも出来るよ」というツイートが裏で飛び交う、熱く激しいバトルでした。

イベント告知ページ

【東京】JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 - 日本Javaユーザーグループ | Doorkeeper

Togetterまとめ

JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 #jjug #idewars - Togetterまとめ

それぞれ印象に残った点を簡単にまとめ

NetBeans

IntelliJ IDEA

Eclipse

  • ユーザ数はナンバーワン!
  • CTRL+1で何とかしてくれる
  • みんな意外と使いこなせてない?

感想

  • まずはどれでもいいのでIDEを使いこなせるようになろう
    重いテキストエディタ化している人はもったいない どれか一つマスターしてから次のIDEに行っても遅くはない
  • どれも素晴らしいけど最初に触るのはNetBeansがいいと思う 特にSI屋の新人教育担当の人! Eclipseのセットアップで時間を潰すくらいなら、オールインワンNetBeansで実装を学ぶ時間を増やすほうがいいと思いますよ

印象に残った言葉

  • 思考を止めずに実装しよう
    これすごく重要だと思う。
    そのためにIDEだし。
  • メソッド名なんて後で変えたくなるから最初は適当に
    まずはxxxxxxxxとかにして、メソッド名を考えることで実装のリズムを止めない。
    思い返してみると名前で悩んでしまうことはおおいので、これから実践してみようと思う。
  • 出来るエンジニアはブランチを切る(キリッ

SpringSNSのチュートリアルを試してみた

なんか変な感じに忙しい日々が続いてちょっと間隔あいちゃったけど、今日はこれを試してみた。

Getting Started · Accessing Twitter Data

試す前にTwitter側のセットアップを済ませておく必要がある。
OAuth認証も利用するので、コールバックURLの設定もしておく。

アプリケーションの動きとしては、こんな感じ。 起動してhttp://localhost:8080/にアクセスすると、Twitterへのコネクションがあるかを判定する。
最初にアクセスした時はコネクションがないので、/connect/twitterにリダイレクトする。

if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
    return "redirect:/connect/twitter";
}

この時のViewはtemplateフォルダにある"connect/{provider ID}Connect"が呼び出される。
twitterなら"connect/twitterConnect"、facebookなら"connect/facebookConnect"になる。

twitterConnect.htmlには/connect/twitterをPOSTで呼び出す処理を書く。
/connect/twitterを呼び出すと、SpringSNSはOAuth認証のページに遷移してくれる。
OAuth認証が終わると、これまた自動的に"connect/{provider ID}Connected"のページが呼び出される。
あとはhttp://localhost:8080/に再び遷移することで、TwitterAPIを利用できるようになる。

気になる点としてはtwitter4Jとの使い分け。
APIの使い勝手とかconsumer keyなどの指定は個人的な好みの部分もあるので、好きな方を使えばいいとは思う。
使ってみた感想としては、OAuth認証がSpringSNSの方が楽なのと、様々なSNSを利用する場合にAPIごとに使い方を覚える必要がないのがいいと思う。

Springのチュートリアル〜第1回 SpringMVCその1

今日はServing Web Content with Spring MVCを動かしてみます。

ダウンロードは↓から。

Getting Started · Serving Web Content with Spring MVC

作るコードもリンク先にあるので、ここには書いたりしません。

ソースの作成

このチュートリアルは3つのクラスを作ります。
コピペすれば一瞬ですが、量も大したことないので全部打ち込んで試してみることをおすすめします。

  • 実行するmainメソッドを持つクラス
  • Controllerクラス
  • ビューであるテンプレートファイル(html)

まずはControllerクラスです。
@Controllerアノテーションを付ける。
URLとの紐付けは@RequestMapping("/greeting")で行う。
Spring3.2とあまり違いはなさそう。

ビューとなる部分は、JSPじゃなくてThymeleafというテンプレートエンジンを使います。
ネームスペースに

<html xmlns:th="http://www.thymeleaf.org">

と書いて、置換する部分は

<p th:text="'Hello, ' + ${name} + '!'" />

と書くだけでOKです。

実行

実行する方法は2つあります。

  • WARを作って配備する
  • mainメソッドを呼び出す

今回の推奨は当然後者です。 mainメソッドを呼び出すとこんなロゴが出てSpringBootが起動します。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::             (v0.5.0.M6)

起動が完了するとhttp://localhost:8080/greeting/にアクセスして作成したアプリケーションが呼び出されます。
動いているのはSpringBootに内蔵されたTomcatです。
http://localhost:8080/にアクセスすれば、Tomcatの404画面が出てきます。

Executable Jarの作成

build.gradleを修正することで、実行可能なJarファイルを作れます。
java -jarで実行すると、mainメソッドを実行した時と同じようにTomcatが起動します。
Jarファイルの大きさは10MB程度。
TomcatやSpringのlibraryがぎっしり入っています。

Manifestファイルはこんなかんじです。

Manifest-Version: 1.0
Start-Class: hello.Application
Spring-Boot-Version: 1.0.0.RC1
Main-Class: org.springframework.boot.loader.JarLauncher

JarLauncherクラスについては別の機会に見ていこうと思います。

制約?

mainメソッドを持つApplicationクラスは@ComponentScanアノテーションが付加されています。
このアノテーションが付いている場合、Springは同一パッケージを検索してコンポーネントを探し出します
今回作成したControllerクラスとApplicationクラスのパッケージを変えてみると、Tomcatは起動しますがコンポーネントはパッケージが違うのでロードされません。
なので、http://localhost:8080/greeting/にアクセスしても404になります。

Applicationクラスで違うパッケージのControllerを指定できるといいのになぁ。

出来ました。
@ComponentScanにパッケージを指定できます。

@ComponentScan(basePackages="hello.component")

クラスのフィルターなどもできるので、起動が遅い場合は指定してみるとかできますね。

まとめ

SpringBootを使うことで、面倒な環境設定をせずにWebアプリケーションを作成することができます。
NetBeansGlassfishに比べれば学習にかかるコストは小さいと思います。

ただ「本番はWebLogicを使う開発」みたいなものにはあまり利点を生かせないかも。
アプリケーションサーバを使用する開発はJava EE、Herokuなどクラウド環境で動かす場合はSpringというように、住み分けができると面白いかも。

Springのチュートリアルをやっていくよ!〜第0回事前準備

JJUGナイトセミナーで「チュートリアルが豊富なので試してみてね」ということなので一つ一つ試していこうと思います。
とりあえず今日は環境設定。

インストールするもの

基本的な流れ

「サンプルダウンロード→eclipseに取り込み→コード追加→実行」の繰り返しです。

サンプルは空のJavaファイルが入っています。
空のファイルに対して解説のページのコードを埋め込んでいけば、動くものが完成するわけです。
編集するのはeclipseでやりたいのですが、そのままだとインポートできません。
そこで、gradleでeclipseプロジェクトに変換してインポートします。

具体的には

  1. ダウンロードしたzipファイルを解凍する
  2. 解凍してできたinitialディレクトリに移動

    cd /Users/sety/Downloads/gs-serving-web-content-master/initial

  3. gradle eclipseコマンドを実行

うまくいけば.classpathやら.projectといったeclipseがプロジェクトとして認識するためのファイルが出来上がります。
あとはeclipse上からプロジェクトをインポートすればチュートリアルを実行する準備は完了です。

JJUG ナイトセミナ 「Spring Framework 特集」のまとめ

色々とサイトが出てきたのでリンク集。

Springプロジェクト

Spring

スライド

再入門!RESTとSpringMVC

Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug

デモ

http://spring-boot-demo.herokuapp.com/

Twelve-Factor App

The Twelve-Factor App(日本語訳)

SaaSを提供するときの方法論。

Java 7 Update 51でJavaDBが起動しなくなった場合の対応

Java SEをアップデートすると以下の例外が出てJavaDBが起動しなくなる。

java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")

これを何とかするためには、java.policyを修正をする必要がある。

Macの場合、以下の場所にある。
編集前に必ずバックアップしておく。

/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/java.policy

Windowsの場合はC:¥Program Files¥Javaにインストールされてるはず。

java.policyに対して、以下の定義を追加します。

grant codeBase "file:/Applications/NetBeans/glassfish-4.0/javadb/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

自分の場合はNetBeansからGlassFishを起動する場合でしか使用しないため、NetBeansの下にあるlibを指定しています。
Java SE付属のJavaDBを使用する場合は、file://の後を変更すること。

元ネタはstackoverflow先生です。

http://stackoverflow.com/questions/21154400/unable-to-start-derby-database-from-netbeans-7-4