この辺りからは、WEBサービス構築の概要というよりは、具体的な開発にかかわる話になってきます。
今回は、必要に迫られてSlim3のアップグレードを行ったので、その辺について残しておきます。
まず、WEBサービスを作るにあたって、JSONが大活躍します。
検証はしていませんが、Ajax的な作りでサーバ側はJSONを吐くだけにして、なるべくクライアント側で作業するようにしたほうがコストが安そうです。
やはり、特に無料枠に抑えたいという期待を持って開発するのであれば、いちいちServletやJSPがページをゴリゴリ生成して吐き出すような作りは、コスト的にマズイような気がします。
そこで、JSONの取り扱いですが、Slim3にはModelをJSONに簡単に変換してくれるメソッドがあります。
そのModelMeta.modelsToJson()で以下のエラーが出ました。
java.lang.NoClassDefFoundError: com/google/appengine/repackaged/org/json/JSONObject
Google先生に色々聞いてみたところ、ModelMeta.modelsToJsonでrepackagedなクラスを使ってるために起きているそうです。
repackagedなクラスというのは、SDKの変更で頻繁に変更されるので、あまり使うべきではないみたいですね。
で、解消方法がSlim3のバージョンを「1.0.15」から「1.0.16」にアップグレードすることでした。
Slim3はEclipseからインストールしているんですが、なんで初めっから最新にしてくれないんですかね?
理由は謎のままですが、最新版は以下からダウンロードします。
https://code.google.com/p/slim3/downloads/list
slim3-blank-1.0.16.zip
開発中プロジェクトでライブラリのアップグレードをするなんて、もろもろ動かなくなったりしそうで怖いのですが、やるしかありません。
公式などを見つつビクビクしながら以下の通り実行しました。
1.新しいバージョンのファイルをフォルダに投入
「slim3-1.0.16.jar」を<Project>/war/WEB-INF/libに投入。
「slim3-1.0.16-sources.jar」を<Project>/libsrcに投入。
2.プロジェクトのプロパティ >Javaのビルド・パス > ライブラリー からCLASSPATHの設定を変更
「slim3-1.0.16.jar」と「slim3-1.0.16-sources.jar」を追加。
「slim3-1.0.15.jar」を削除。
3.古いファイルをそれぞれのフォルダからも削除
4.注釈処理に関連した新しいバージョンのファイルをフォルダに投入
「slim3-gen-1.0.16.jar」を<Project>/libに投入。
5.プロジェクトのプロパティ > Javaコンパイラー > 注釈処理 >ファクトリーパス からファクトリパスの設定を変更
「slim3-gen-1.0.16.jar」を追加。
「slim3-gen-1.0.15.jar」を削除。
6.古いファイルをフォルダから削除。
これで今のところは、ちゃんと動いています。