zephiransasのチラシの裏

とあるJava/Rubyプログラマのメモ代わりブログ

GlassFishのアップグレード方法

会社で使ってるJenkinsさんはGlassFish上で動いているんですが、これのアップグレードを行ったので、そのメモ。

具体的にはGlassFish 3.1.1からGlassFish 3.1.2へアップグレードしました。

updatetoolのインストール

まずはアップグレードに使用するupdatetoolをインストールします。

方法はasadminと同じディレクトリにある、updatetoolを実行するだけ。

初めてupdatetoolコマンドを実行した際に、updatetoolをインストールするか聞いてきますので、yを押してインストールするだけです。

ちょっと時間がかかるので、アニメでも見ながらゆっくり待ちましょう。

updatetoolからGlassFishのアップグレード

上記の手順でupdatetoolのインストールが終了したら、もう一度updatetoolコマンドを実行します。するとGUIが立ち上がって来ますので、以下のようにするだけ。

updatetool

あとは

1
$ ./asadmin version

などで、アップグレードできていることを確認しましょう。

写真で振り返るゆとり

これは「ゆとりアドベントカレンダー」の5/20分のエントリです

前日は @btnrouge さんの「WebLogicのDIは果たして出来損ないなのか?」でした。

そもそも、このゆとりアドベントカレンダーが何なのかよく分からず、しかも誰に言われるまでもなく、(空気を呼んで)勝手にエントリした身ですので、何もネタがありません(ぉぃ

なので、自分とゆとりさんとの出会いを、写真で振り返ってみたいと思います( ・`ω・´)

First Contact

多分直接お会いしたのはTDDBC岡山 1.0の時ではないでしょうか。TDDBC前日にデミカツ丼で有名な「やまと」という店で会ったような気がします。当然、それはまではTL上でしか絡みがなかったので、お会いしてそのガタイのデカさに驚いた記憶があります。また、その時にJava7の日本語ドキュメントがさー的な話をしたような気がします。

TDDBCでは、JavaのTAの一人として活躍して頂きました。

その後

TDDBCの後は、多分去年のJavaOne Tokyoでお会いしたのかな・・・?

つい最近は、先日のJava Day Tokyoで。長身にぐるぐるTシャツで、離れたところからでもすぐ確認できました。さすが、環境にやさしいゆとりさんですね!

なんか最近はJJUGの幹事にもなられたらしいので、これからも日本のJava界の為、頑張ってくれると思われます。ゆとりさん、頑張ってー

Java Day Tokyo 2013に参加してきた(セッション)

前回の基調講演につづいて、今回は自分が参加したセッションのレポートです。

Ask the Experts

基調講演にも登壇したJavaSE,JavaFX,JavaEEの各キーパーソンに、直接質問できるセッションです。ちょうど昼の時間だったので、本来は昼食をとりつつ受けるセッションなんですが、うっかり自分は昼食を仕入れるのを忘れてました・・・

JavaSEの担当は、Simon Ritter氏

JavaFXの担当は、Jim Weaver氏

JavaFXの担当は、Arun Gupta氏

通訳の方が居たので、もちろん日本語で質問できたのですが、意外と質問が少ないような感じでした。

印象に残ったのは、最後のJavaEEの質問で

  • Q「JavaEEはいろんな仕様で構成されているが、最低限どれを使ってればJavaEEを使ってることになるのか?」

という質問がありました。(ちょっと意地悪な質問な気もしますがw)それに対してArunは

  • A「難しい質問だけど、強いて言えばServletかな?あ、でも、Strutsはダメだね!」

と返して、会場は大爆笑でしたw

Javaプラットフォームにおける Batch アプリケーション (JSR 352)

JavaEE7で導入されるJBatchのセッション。担当はArun氏です。

このJBatchは、エンタープライズアプリケーションでよくある、バッチ処理を効率よく書くためのフレームワークです。セッションを受けつつTLを眺めてて知ったのですが、どうもSpring Batchと非常によく似た仕組みのようです。設定をXMLで記述していくのが少々面倒な気もしますが、この辺りが改善されていけば、バッチ処理のスタンダードになるかなーという感じ。JavaEE準拠のサーバはもちろん、スタンドアロンの環境でも実行可能との事。

エンタープライズ環境における並列処理の実装方法について

我らの王子こと、寺田さんによるConcurrency Utilityのセッション。

以前からJavaではThreadを使って、並列処理を書くことが可能でしたが、実際にはなかなか難しいものでした。これを簡単に行えるのがConcurrency Utilityです。実際に以下のデモを会場で見せていました。

詳細は寺田氏のブログに詳しいですが、Concurrncy Utilityを使うことで、CPUリソースを無駄なく使うコードを、簡単に実装することができるようになります。

Java the Night

最後はお楽しみ(?)のJava the Night。日本のJava界を代表するエンジニアがLT&デモを行うという趣向です。 一人8分の持ち時間でした。どのLTもさすがはJava界のスーパーエンジニア!と唸らせる、最高に面白い内容でした。 前回のJavaOne Tokyoの時もそうでしたが、この最後のLT枠に参加せずして、Javaのイベントに参加したとは言えないくらい、充実した内容です。 なかでも印象に残ったのは、北海道の大学生2人。

プレゼンソフトなんですが、JavaFXで様々なエフェクトをつけることができるというものでした。彼らの初々しい(!)発表を聞きながら、その将来に期待をするとともに、まだまだ自分も頑張らなければ、と想いを新たにしました。

JavaSE7 日本語ドキュメント提供開始

そしてJava the Night終了後、寺田さんから重大な発表がありました。それはJavaSE7の日本語ドキュメントの提供を開始した、とのアナウンスでした。実はJavaSE7リリース後、しばらくしても日本語ドキュメントは提供されていませんでした。様々な方面から要望は上がっていましたが、残念ながら日本語ドキュメントは当分は提供されないという決定が、以前なされました。

その後、有志を中心にボランティアで日本語化しようかといった動きもありましたが、本格化するには至りませんでした。

そして、Java Day Tokyoにてサプライズとでもいいましょうか、JavaSE7の日本語ドキュメント提供開始のアナウンスがされました。

JavaSE7がリリースされて随分経ちますが、これでようやくスタートライン。Java7を普通に使ってもらう環境が、日本でも整ったといった感じです。いろいろ想いはありますが、日本オラクル&寺田さんの努力に敬意を表したいと思います。

Conclusion

以上、2回に分けてJava Day Tokyo 2013の模様をまとめました。

1年ぶりにJavaのカンファレンスに参加して「自分はやっぱり、このJavaのコミュニティが好きなんだなぁ」という思いを強くしました。もちろん他のコミュニティでも似たような経験はできるとは思いますが、古参から新参まで多くのカラーが集まり、多種多様な人がいるコミュニティも珍しいように思います。そのような環境でエンジニアをやれるのは、とても嬉しいことです。

さて、岡山Javaユーザ会でも、Java Day Tokyo 2013報告会@岡山と題して、報告会をやります。

お申込みはこちらからです。

お近くの方は、是非ご参加ください。

Java Day Tokyo 2013に参加してきた(基調講演)

前日、5月14日に秋葉原UDXにて開催されたJava Day Tokyo2013に参加してきました。 JavaOne Tokyo2012が開催されてからほぼ1年。去年イベントが終わった時には「もう、こういったイベントは当分ないだろうなぁ」とか思っていたので、JavaOneではないにしてもちゃんとイベントを開催してくれた日本オラクル&寺田さんには感謝ですね。

Keynoteの報告

基本的には去年のサンフランシスコでのJavaOneとかで発表された内容とかぶる感じ。ただ、普段はこういった最新情報をチェックしていない人たちでも、イベントであれば直に最新情報を聞けるので、そういった人たちにリーチできるだけでも、意味はあるかと。 残念だったのは最初、写真撮影がNGにされていたこと。

正直コレには参りました。参加者には自分のように地方のコミュニティに属していて、後日報告会をやろうと企画してる人も多いはず。またOracleとしても「Javaを前進させるためにはコミュニティの力が必要です!」と言ってるにもかかわらず、これではなぁ・・・

一応、Keynoteの半分を過ぎたあたりで、寺田さんが取り計らってくれたのか

とはなりました。なので前半の写真がありません(´・ω・`)

まずは日本オラクルの伊藤敬氏が壇上に。 前回のJavaOne Tokyoは六本木のアカデミーヒルズで開催されましたが「クール・ジャパンの代表格であるアキハバラでJavaのイベントをやったら、どうなるのか?その化学反応も楽しんで欲しい」とのこと。

最初に登壇したのはJava Technology AmbassadorのSimon Ritter氏。JavaSEの最新情報について公演しました。 2012年7月にリリースされたJava7は、Oracleの元でリリースされた最初のメジャーアップデート。世界中で利用されていることを紹介していました。 また、Windows,Mac OSX,Linuxをはじめ、ARMアーキテクチャ上でも動作することを紹介し、Javaがいまや様々なデバイスで動作していることも強調。 そして、(遅れはしたものの)2014年2月には正式リリース予定のJava8についても言及し、その中核はLambdaであるとのこと。Lambdaを使用することのメリットの一つとして、並列処理を容易に書けることを紹介していました。 現在、Java8はプレビュー版が提供されているので、これを通じて多くのフィードバックをして欲しい、とも言っていました。 今後Javaは2年サイクルでメジャーアップデートを行う予定で、そうなるとJava9は2016年リリースになるだろうとも。

次に壇上に上がったのはOracleのNandini Ramani氏。JavaFXや組み込みJavaなどについて公演しました。 Java8からはJavaFXはJavaFX8として、標準でJDKにバンドルされるようになります。そういった意味でもJavaFXはこれから注目の技術になりそうな予感です。

途中、Nandini氏は壇上にJim Weaver氏を招き、Jimが手元でJavaFXのデモを行なっていました。なぜかデモしてた機材がSurface Proでしたw 球体や円柱を3Dで表示し、それにことなる光源を当てて表示するといったデモや、それにテクスチャを貼り付けてみたり。また港湾での貨物運送にでもつかうんでしょうか、コンテナの位置などをJavaFXでレンダリングするようなものを紹介していました。どれも比較的短いコードで実装可能であるとのこと。 また、Jim氏は「When should you download JDK8?」と書かれたスライドを前に、「イツヤルカ?イマデショ!」と日本語でネタを披露していました。これには会場も爆笑w Keynoteで一番盛り上がったかもしれません。Jim氏もご満悦な様子でした。 (しかし、このネタをJim氏に教えたのは、いったい誰なのか気になります!)

(追記) @skrb さんに教えて頂きましたが、どうもこのネタはタクシーの運ちゃんから仕入れたようです。外人にネタを授けるとは、タクシーの運ちゃん、侮りがたし!!

次に壇上に上がったのはOracleのCameron Purdy氏。JavaEEの最新動向について公演を行いました。 JavaEEは次のメジャーバージョンであるJavaEE7のリリースを6月13日に控えています。そのJavaEE7についての話が主でした。

JavaEE7の主な新機能としては

  • JBatch
  • JSON対応
  • WebSocket対応

などを紹介。JavaEE準拠のAPサーバも18のメーカーから出荷されているとのこと。 その後OracleのArun Gupta氏を壇上に招き、WebSocketのデモを行なっていました。デモはよくあるWebSocketのチャットに始まり、その後はWhite Boardのアプリケーションをデモ。 やり取りをしている途中で回線が切断された場合でも、回線がもとにもどれば、最新の状態に簡単に復旧できるようなアプリケーションなんですが、これもWebSocketで簡単に実装できるとのこと。

そして最後に壇上に上がったのはOracleのSharat Chander氏。 アメリカ本国でのJavaOneを取り仕切っている人ですね。

Sharat氏はJavaとそれを取り巻くコミュニティについて公演を行いました。Javaにとって大事な構成要素は「Oracle、技術、コミュニティ」の3つであるとして、コミュニティの重要性を強調。 また「ここにいる皆さんにも是非Javaのコミュニティに参加してコントリビュートして欲しい」と訴えていました。

そしてSharatに促され壇上に上がったのは日本のJUG(Java User Group)であるJJUG会長の鈴木雄介氏。

鈴木氏はコミュニティに参加する意義を「エンジニアが成長するための場所である」と説明。またJJUGとしても今後、様々な活動を通じて日本のJavaコミュニティのエンジニアをサポートして行きたい、との話がありました。 地方への講師の派遣なども行なっていただけるらしいので、今後岡山Javaユーザ会でも、そういった方をお招きして勉強会を開催していきたいなぁと思います。

そして最後にはなぜか恒例(?)とも言えるTシャツ投げが行われました。

このTシャツ投げは、もはや伝統芸ですが、時間の関係か1つだけだったのが寂しかったり(´・ω・`)

基調講演の報告はここまで。参加したセッションの内容は後日まとめます。

リンク集

最後にJava Day Tokyoについて、各メディアのレポートや、個人ブログのリンクをまとめておきます。こちらも参考にしてください。

メディア系

個人ブログなど

その他

Slickを使う(基礎編)

最近playframework2.1をちゃんと使いたいなぁと思ったので、Scala含めて色々調べてます。 で、ドキュメントを眺めてて気になったのがO/Rマッパ。play1.2系のころはEBean等のO/Rマッパを利用できたんですが、play2.1系ではなくなってる!一応Anormという仕組みでSQLを発行出来ますが、SQL直書きするのは小学生までよねー?!的な感じ。

で、更に調べてみると、typesafeでSlickというO/Rマッパがあるので、これが良さそうじゃね?ってことで、試してみました。 本来はplayから利用するのがベストですが、実験なのでスタンドアロンで。

build.sbtとplugin.sbtの準備

まずはsbtで環境を作るところから。以下のようにbuild.sbtを作成

build.sbt
1
2
3
4
5
6
7
8
9
10
11
12
name := "slicksample"

version := "1.0"

scalaVersion := "2.10.0"

libraryDependencies ++= List(
  "com.typesafe.slick" %% "slick" % "1.0.0",
  "org.slf4j" % "slf4j-nop" % "1.6.4",
  "com.h2database" % "h2" % "1.3.166",
  "com.github.tototoshi" %% "slick-joda-mapper" % "0.1.0"
)

11行目ではslick-joda-mapperを指定しています。

Slickでは日付はjava.sql.Dateで扱うらしいのですが、今更java.sql.Dateなんて触りたくないなーと思っていたところ、JodaTimeへマッピングしてくれるプラグインがあったのでこれを使います。

また、今回はIDEにIntelliJを使うので、sbt-ideaプラグインを使うように、plugin.sbtを設定します。

project/plugin.sbt
1
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.4.0")

あとはsbtからgen-ideaするだけ

1
$ sbt gen-idea

ついでにscalaのソースファイル置き場であるsrc/main/scalaディレクトリも作っておきましょう。そして、これをIntelliJに読み込ませます。読み込ませるとこんな感じ。

image1

モデルの作成

次にモデルを作成します。今回はUSERSテーブルにアクセスするUser objectを作成してみます。カラムは

  • id - Integer(主キー)
  • name - String
  • birthday - Option[LocalDate] ぐらいで。

src/main/scalaにUser.scalaを作成し、以下のように記述します。

User.scala
1
2
3
4
5
6
7
8
9
10
import org.joda.time.LocalDate
import scala.slick.driver.H2Driver.simple._
import com.github.tototoshi.slick.JodaSupport._

object User extends Table[(Int, String, Option[LocalDate])]("USERS") {
  def id = column[Int]("id", O.PrimaryKey)
  def name = column[String]("name")
  def birthday = column[Option[LocalDate]]("birthday")
  def * = id ~ name ~ birthday
}

まず2行目でSlickのクラスをインポートしておきます。注意すべきは使用するDBに合わせて、インポートするクラスを変えるってところ。今回はDBにH2を使うので

1
import scala.slick.driver.H2Driver.simple._

としてます。例えばPostgreSQLを使う場合は

1
import scala.slick.driver.PostgresDriver.simple._

とします。

3行目は先述したslick-joda-mapperを使うのに必要です。IntteliJだと、Unusedで警告がでるのがアレですが・・・

データのINSERTとSELECT

次に、このUserモデルを使ってテーブルを作成しデータをINSERT、その後SELECTして内容を表示するコードを書いてきましょう。 src/main/scalaにMain.scalaを作成し、以下のように記述します。

src/main/Main.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.joda.time.LocalDate
import scala.slick.driver.H2Driver.simple._

import Database.threadLocalSession

object Main {
  def main(args:Array[String]):Unit = {
    Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver") withSession {
      User.ddl.create

      User.insert(1, "hoge", Some(new LocalDate(2013, 4, 10)))
      User.insert(2, "fuga", Some(new LocalDate(2013, 4, 11)))

      //select all
      Query(User) foreach { case (id, name, birthday) =>
        println(id + ":" + name + ":" + birthday)
      }

      //name = "hoge"のみ抽出
      val q1 = for{ u <- User if u.name === "hoge" } yield u.name
      q1 foreach println
    }
  }
}

まず8行目でDBへの接続を行なっています。

次の9行目ではUSERSテーブルのCREATE文を実行して、テーブルの作成を行なっています。

11,12行目でデータのINSERT。15行目以降で、SELECTを行ない、標準出力で出力しています。

まとめ

こうして見ると、まだ自分がScalaのListの扱いに慣れてないせいもあって、SELECT周りの書き方にはちょっと違和感を感じますが、O/Rマッパとしての基本的な機能は十分に押さえていそうな感じです。

参考サイト

ブログを引越しました

以前使っていた、はてなダイアリーからGithub Pagesへ移行しようとおもって、はや4ヶ月・・・ ようやく引越しました。

本当は今年始めの転職と同時に移行したかったんですが、あれよあれよという間に時間だけが経過して・・・

今後はこちらをメインのブログとして使用していきたいと思います。はてダもそのまま残しておきます。

というわけで、コンゴトモヨロシク….