<< 12月 2008 | Home | 2月 2009 >>
PR: 転職    ドメイン    電子機器    インプラント    転職サイト    ダイエット 食事    転職    コンタクトレンズ    流行キーワード    英会話   

EJB3 単純な値をインジェクトしてみる。

JBoss 4.2.3で検証。

@Stateful
@Name("playListManager")
@Scope(ScopeType.SESSION)
public class PlayListManagerAction implements PlayListManager {
    @Resource(name = "home.dir")
    private String homePath;

@Nameは、Seamのアノテーションなので、無視の方向で。@Statefulにname属性を指定すると、なんかSeamが動かなくなるのでやめた。ejb-jar.xmlは以下のように指定。

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
         version="3.0">
         
  <enterprise-beans>
    <session>
      <ejb-name>PlayListManagerAction</ejb-name>
      <env-entry>
        <env-entry-name>home.dir</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>Hello</env-entry-value>
      </env-entry>
    </session>
  </enterprise-beans>
...
</ejb-jar>

まぁ、昔に比べればマシにはなっているけど、やっぱりXMLで、この手の設定を書くのは苦痛だ。Groovyあたりで書けるようにならんものか。

猫ページ

猫ページ更新完了

JavaプログラマのためのRuby入門

献本いただきました。上海から帰ったら、届いていた。

Javaのプログラマが、簡単にRubyを勉強するのに役立つ本。後半には、JavaVM上で稼動するRuby処理系であるJRubyの解説もあり。Javaのプログラマと言っても、レベルが色々あるけど、中身的には丁寧に解説されているので、一通り文法を知っているレベルであれば、十分読みこなせると思う。

トンマと言われて。

ポカーンとしてしまったけど、「トン」が痛いで、「マ」が付くと疑問形だから、「痛い?」という意味なのか。

トークセッションを行います。

『Javaの掟・Rubyの掟 ~寝ても起きてもプログラミング~』

内容の紹介は、artonさんのところが詳しい。

個人的には、コーディングの泥臭い話を書いた本が、売れているというのが、とても不思議で、どんな人が買ってくれているのか知りたかったり。

フランク バイオリンソナタ

今日、池袋のジュンク堂に行った折に、フランクのバイオリンソナタの楽譜を買ってみた。とりあえずピアノパート、第一楽章は、左手の音が若干飛ぶものの、弾けないことは無さそう。

バイオリンパートは、どうなのかなぁ。自分では弾けないから、さっぱり分からない。テンポは遅いけど、バイオリンは、音程をとるのが難しいそうだから、テンポが遅ければ簡単ってわけでもないんだろうな。

RESTEasyを使って、JavaでもカンタンRestful

RESTEasyが、最新のSeamに含まれているということなので、試してみた。用意したのは、

  • jboss-seam-2.1.1.GA
  • jboss-4.2.3.GA

  • JBossとSeamのインストールは、ガイドが山のようにあるので、サクっと省略。といったって展開して、Seamのルートにあるbuild.propertiesに、jboss.homeの場所を指定するだけだけど。

    で、環境構築が、面倒なのでSeamのexampleディレクトリにある、registrationのサンプルを、restにコピーしてやって、その名を書き替えて試すことにする。

    その前に、scannotationライブラリが、なぜかSeamには同梱されていないので、別途入手しておく。zipを展開すると、scannotation-1.0.2.jarが入っているので、これを、Seamのlibディレクトリにコピー。

    次に、Seamのexamplesの下にある、build.xmlに、RESTEasyへの対応を入れる(build.xmlは、ルートにもあるので注意)。太線にしたところを変更する。

    ...
    <fileset id="seam.ui.jar" dir="${lib.dir}">
    <include name="jboss-seam-ui.jar" if="seam.ui.lib" />
    <include name="commons-beanutils.jar" if="seam.ui.lib" unless="richfaces.lib" />
    </fileset>

    <!-- REST -->
    <fileset id="seam.rest.jar" dir="${lib.dir}">
    <include name="jboss-seam-resteasy.jar" if="seam.rest.lib" />
    <include name="resteasy-jaxrs.jar" if="seam.rest.lib" />
    <include name="jaxrs-api.jar" if="seam.rest.lib" />
    <include name="scannotation-1.0.2.jar" if="seam.rest.lib" />
    </fileset>

    ...
    <copy todir="${ear.dir}/lib">
    <fileset refid="richfaces-api.jar" />
    <fileset refid="ear.lib.extras" />
    <fileset refid="seam.rest.jar" /> <!-- REST -->
    <fileset refid="jboss-el.jar" />
    <fileset refid="cglib.jar" />

    次にコピーしたrestのディレクトリに行き、build.xmlを変更。

    <?xml version="1.0"?>

    <project name="Rest" default="deploy" basedir=".">

    <!-- Example name -->
    <property name="Name" value="Seam Restfull Example"/>
    <property name="example.name" value="jboss-seam-restful"/>

    <!-- Libraries -->
    <property name="seam.ui.lib" value="yes"/>
    <property name="facelets.lib" value="yes"/>
    <property name="seam.rest.lib" value="yes"/> <!-- REST -->

    <import file="../build.xml"/>

    </project>

    resourcesの下にある設定ファイル類を修正する。まず、META-INF/application.xml

    <module>
    <web>
    <web-uri>jboss-seam-restful.war</web-uri>
    <context-root>/seam-restful</context-root>
    </web>
    </module>
    <module>
    <ejb>jboss-seam-restful.jar</ejb>
    </module>
    <module>
    <ejb>jboss-seam.jar</ejb>
    </module>
    次にWEB-INF/web.xml。ここは全面書き直し。

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <context-param>
          <param-name>resteasy.jndi.resources</param-name>
          <param-value>jboss-seam-restful/RegisterAction/local</param-value>
        </context-param>

        <context-param>
          <param-name>resteasy.scan</param-name>
          <param-value>true</param-value>
        </context-param>

        <listener>
          <listener-class>org.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
        </listener>

        <servlet>
          <servlet-name>Resteasy</servlet-name>
          <servlet-class>org.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        </servlet>

        <servlet-mapping>
          <servlet-name>Resteasy</servlet-name>
          <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>

    設定は以上。いよいよロジックを書く。ソースの下のRegister.javaに、メソッドを追加。

    package org.jboss.seam.example.registration;

    import javax.ejb.Local;

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.ProduceMime;
    import javax.ws.rs.PathParam;

    @Local
    @Path("/customer")
    public interface Register
    {
       public String register();

        @GET
        @Path("/{id}")
        @ProduceMime("text/plain")
        public String getCustomer(@PathParam("id") int id);

    }

    @Pathは、クラスとメソッドに指定できる。ProduceMimeは、返す結果のMIMEタイプ。@PathParamを使うと、パスに指定したパラメータを受け取ることができる。実装する。RegisterAction.java。

    @Stateless
    public class RegisterAction implements Register
    {
    ...
        public String getCustomer(int id) {
            System.err.println("*** getCustomer() called.");
            return "Hello " + id;
        }


    今回はテストなので、メッセージを返すだけにする。あとは、ant実行して、JBossにデプロイしてやる。

    http://localhost:8080/seam-restful/customer/123

    をリクエストすると、ブラウザに、
    Hello 123

    と表示されるはず。

    web.xmlに若干の設定が必要だけど、ここの設定は、最初に1回しておけば良い。それ以外の配備先のパスなどの情報は、全てアノテーションなんで、開発中は設定ファイルをいじらずに済みそう。JSFが苦手なサービス系も、これを使うと簡単できそう。

    猫ページ

    猫ページ更新完了。

    30inch x 2

    Dellの30 inchが、また安くなっていたので衝動買い。前回買ったのは、3007WFPで、今度は3008WFP。ビデオカードは、これまで低発熱でファンレスの、GeForce 7600GSのカードにしていたのだけど、これはデュアルリンクDVIポートが1系統しかない。しばらく調査をして、GeForce 9500GTのカード、それもLeadtekのWinFast PX9500 GT 512MBがファンレスで、消費電力もあまり大きそうもなく、良さそう。価格コムで見たところ、Faithが安そうなので、秋葉に行ってきた。

    秋葉に着いてから、はてFaithはどこだったかと迷う。10年くらい前の場所は知っているんだけど、確かその後、移転したはず。と思ったら、左手にFaith PC館というのを発見。でも中は、どうもショップブランド品ばかり。店員に聞いたら、10年前の場所に戻ったのだそうだ。気をとり直して、行きがけにT-Zoneに行ったら、入口付近で、丁度探していたビデオカードが、山積みで、9382円になっていたので、これをチョイス。箱を確認するとちゃんと「Dual Dual Link DVI」と書いてあるので、デュアルリンク2系統ありそうだ。大丈夫だろう。なんという偶然。

    家に戻り、早速入れ替え。もちろんUbuntu 64bit(AMD64)で使うのが目的。ビデオカードを入れ替えて、立ち上げたら、なんか、そのまま古い方のディスプレイは写る。新しい方のディスプレイは、NVIDIAのツールで、PositionのところをRight ofにしてやるだけ、そのまま使えるようになった。ドライバの入れ替えとかを覚悟していたので、ちょっと拍子抜け。

    相変わらず、Ubuntuのハードウェア認識能力は、とても高い。正直Windowsより簡単だ。これで晴れて、5120 x 1600ドットだ。

    A Happy New Year

    今年も、よろしくお願いいたします。

    このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
    日本アイ・ビー・エム 花井 志生 Since 1997.6.8