Skip to content

JAX-RSでHTTPリクエストを高度に扱う

前回の記事でJAX-RSのAPIがCoC (Convention over Configuration)的な思想で作られているのが分かったのではないかと思います。

このCoC的なAPIは必要最低限のコードだけを書けば良い半面、「実はこんなアノテーションをつけるとこんな事ができるんだよー」という隠しコマンドのようなものがたくさん出てきてしまいます

続きを読む »

SpringとMyBatisを使ったアプリケーション開発のメモ -その4 RESTEasy編-

過去3回にわたり、Spring、MyBatis、RESTEasyという3つのフレームワークを使ってJAX-RS仕様に準拠したRESTfulサービスを構築する方法を解説してきました。まだ読んでない方は以下のリンクからどうぞ。

今回は「その3」で解説しきれなかったデータバインディングについての解説をします。
続きを読む »

データバインディング?マーシャリング?シリアライズ?

コンピュータのメモリ上に表現されたオブジェクトをネットワーク越しにアクセスする際、オブジェクトは何らかのデータ列に変換されてネットワーク上を流れています。そのデータ変換の事をデータバインディングと言ったり、マーシャリングと言ったり、シリアライズと言ったりしますが、それぞれ微妙に異なるニュアンスで使われます。

僕も厳密な定義を言えと言われると自信が無いのですが、概ね次のように使い分けられているようです(あくまで個人的な解釈です)。

  • データバインディング
    • あるデータ型(クラス)をどのように表現するかについての取り決め。例えば。
      • 「JavaのStringは、XML Schemaの xsd:stringに対応させます」という取り決め
      • 「Cardクラスは、XMLで<Card>要素で表現します」という取り決め
    • これとは別に、UIのコンポーネントとデータソースを紐づける事もデータバインディングと呼ばれるようです
  • マーシャリング
    • あるデータ型(クラス)のインスタンスを他のデータ表現型式に変換する事(変換操作を表す名詞)
    • シリアライズとも似ているが、特にXML表現に変換する場合はマーシャリングと呼ぶ傾向がある
    • 逆の操作(XMLなどのデータ表現型式からオブジェクトを再生する事)はアンマーシャリングと呼ぶ
    • 動詞だと「マーシャル」だが、日本語では「マーシャルする」とは言わず「マーシャリングする」と言ってしまう事が多い。語感の問題ですかね?
  • シリアライズ
    • あるデータ型(クラス)のインスタンスをネットワークにながせるデータ形式、つまり一直線のデータ列に変換する事(変換操作を表す動詞)
    • 例えばツリー構造のデータというのは参照が絡み合って「立体的な」構造をしていると言えますが、それを1列のバイト列に変換する操作をシリアライズと言います
    • シリアライズの結果がXMLだった場合、それはマーシャリングと言っても良いのですが、シリアライズとマーシャリングは次のように使い分けられているように思います
      • シリアライズ:言語固有の変換、つまり他言語や他計算機環境との互換性をあまり意識していない操作
      • マーシャリング:異なる言語や計算機環境に渡す為のデータを生成する操作
      • ただし広義にはシリアライズはマーシャリングを含む

こんな感じでしょうか?もうちょっと厳密な定義があったら教えてくださいませ。

Action Scriptで連想配列のキーにString以外のオブジェクトを使う場合は注意!

Javaや C++などのオブジェクト指向ライブラリには Mapというクラスが提供されています。

Mapというのは、「Key-Valueストア」「連想配列」などと言われるものです。配列のようにたくさんのデータを入れられる箱ようなものですが、配列とは違って、個々のデータに「名前」をつける事ができます。

「Key-Valueストア」とは「Key(箱の名前)を指定するとValue(箱の中身)が取り出せる記憶装置」という意味です。

Action Scriptではオブジェクトに [] という演算子を組み合わせるとこのKey-Valueストアの機能が使えます。次の例を見てみてください。
続きを読む »

Appleの新サービス iCloudと PhotoStream

今朝、AppleのWWDCというエンジニア向けのイベントで、iCloudという新しいサービスが発表になりました。

iPhoneや iPodを使っている人はご存知だと思いますが、今までiTunesを使って音楽を転送したり写真を転送したりしていたのをインターネット経由で(ただし3G回線ではなくWiFi経由で)できるようになるという便利なサービスです。

個人的には写真を結構撮るので、PhotoStreamという機能に非常に興味があります。
続きを読む »

FlexのNumberクラスの仕様と、JSON通信での注意点

Flex、というかAction Script 3が始めから持っているデータ型(プリミティブデータ型)はAdobeのサイトによると以下のものがあります。

  • Boolean
  • int
  • Null
  • Number
  • String
  • uint
  • void

このうち数値の格納に使うのは int, uint, Numberになります。

ドキュメントによると intは「32ビット符号有り整数」を格納する者で、Javaのintと同じ範囲の値を格納できます。uintは「32ビット符号無し整数」で、Javaには同等の型はありませんが、C言語やC++などの unsigned int と同じ(ただしintが32ビットの場合)と同じものです。Javaでは符号無し整数が扱えないのですが、あると結構便利なんですよね〜。
続きを読む »

Flexアプリはリリースビルドすると挙動が変わる事がある

Flash Builder で順調に Airアプリを開発していたのに、さていざリリースビルドしてみたらなぜか挙動が変わってしまった、、、。なんて事はありませんか?

僕は先日そんな現象に遭遇し、原因がわかるまで丸一日かかってしまいました。以下そのメモです。

続きを読む »

MyBatis – JDBC – Amazon RDS (MySQL)で日付を扱う場合の注意点

今まではPostgreSQL派だったのですが、Amazon RDSがMySQLだと言う事もあり、最近はバックエンドのRDBMSとしてMySQLを使う機会が多くなってきました。

この間、何気なくDATETIME型のカラムを作って、Java側で new Date()して MyBatisでさくさくと INSERTしてみたのですが、なんかタイムゾーンがずれて格納されているような、、、という問題に遭遇しました。

以下、その際の格闘メモです。

続きを読む »

Flex Action Scriptで可変長引数をそのまま可変長引数として渡す

Javaで可変長引数を扱う場合、可変長引数を可変長引数として別のメソッドにそのまま渡す事ができます

割と当たり前のような気がしますが、Flex (Action Script 3)ではうまくいきません!

続きを読む »

Flash Builder 4でビルドエラーが出ない時の対処法

Flash Builder で新しいクラスを作りコードを書いていると、「明らかに間違ったコードを書いているのにFlush Builderがエラーを吐かない」という状況に遭遇する事があります。

画像のように、「hogehoge」という明らかに間違ったコードが書かれているにも関わらず、赤いバッテン×が表示されません。

続きを読む »