WebObjectsのHello WorldをScalaで。

 WebObjects with Scala - WebObjects - Confluence
 Scala IDE for Eclipse | The Scala Programming Language

 「ScalaだったらWebObjectsでも使えるよね」とか某人と言っていたら、EclipseのScalaプラグインを導入するとお手軽だという公式の記事があったのでちょっとだけやってみました。サンプルコードもあったしねー。
 WebObjectsとEclipse、WOLipsはインストール済みだと思うので、とあえて書いてみて、Scala IDE for Eclipseをインストールしてゴーです。その他のEclipseプラグインと同様の方法でインストールできます。

 適当な名前でWebObjects Applicationを新規作成します。作成したらそのプロジェクトを選択して右クリック -> Scala -> Add Scala Natureを実行しておきます。これでScalaプログラムを書いても平気。
 ではさっそくScalaなファイルを放り込むべく、Main.javaをMain.scalaへ置き換えます。Sourceseフォルダのyour.app.componentsパッケージ内にMain.javaがあるのでそれを削除し、同じところへMain.scalaという名前でファイルを新規作成、そして元のMain.javaにあったソースをScalaで書き直します。

package your.app.components

import com.webobjects.appserver.{WOComponent, WOContext}

class Main(context:WOContext) extends WOComponent(context:WOContext) {
}

 元が単純なのでこれだけ。
 次に、your.appパッケージ内にあるDirectAction.javaを同じようにScalaで書き直します。

package your.app

import com.webobjects.appserver.{WOActionResults, WORequest, WODirectAction}

class DirectAction(request:WORequest) extends WODirectAction(request:WORequest) {
override def defaultAction: WOActionResults = {
pageWithName("Main")
}
}

 こちらも元が単純なのでこれだけ。単にsuper()を呼ぶだけのコンストラクタはextendsに引数を渡してしまえるのがScala流。

 一度クリーニングを実行して、your.app.Application.javaを右クリック -> Run As -> WOApplicationで実行すると、ブラウザが立ち上がってHello Worldと表示されます! 素晴らしい、お手軽だ、嘘みたい!

 これだけではなんなので、文字列の変数を拵えてそれを表示してみる。Main.scalaを編集して、

...

class Main(context:WOContext) extends WOComponent(context:WOContext) {
var aString: String = "こんにちは、世界"
}

 と指定しておいて、Components -> Main WOを以下のように編集。この辺の手順は、2009-11-09 - トーフサロンを参照してください。

 で、またクリーニングして同じようにRun Asするとー。

 とか表示されるといいですね、表示されますけど。

 Scalaは最終的に普通にJavaのバイトコードになりますから、この辺の連携はお手の物ですね。Eclipse + プラグインの環境ならほぼ手間入らずで勝手にやってくれますし。ただ、頻繁にクリーニングをしなければならなかったり、上手くコンパイルしてくれないのかクラスとして認識してくれなかったりして、何が悪いのかよくわからない。そのうち使っていけばわかるようになるかな、ぶっちゃけScala本も持っているけど読んでいないのでScala自体もよくわかってないけど。
 WebObjectsをScalaで書く事の意味は、そのままJavaをScalaで書く事の意味くらいだと思うけれど、Scalaのお勉強もかねて取り組んでみるのもいいかも知れないね。