Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

java

マネージドBeanのスレッドセーフについて

サーブレットは、web.xmlのservlet要素毎にひとつつくられるため、複数スレッドから同時にアクセスされる可能性があります。そのため、スレッドセーフでなければなりません。

JSFのマネージドBeanもサーブレットです。ただし、条件がスコープの範囲によって変わってきます。アプリケーションスコープ、セッションスコープはアプリケーション毎にひとつ、セッション毎にひとつオブジェクトが生成されます。そのため複数スレッドからの同時アクセスの可能性がありえます。しかしリクエストスコープはリクエスト毎にひとつオブジェクトが生成されるので、複数スレッドは考慮する必要はありません。

JBossのHypersonicSQL(hsql)管理ツール起動方法

JBossには気軽に使用できるHSQLが組み込まれています。ちょっとしたDBを使いたい場合に便利です。

JBossのトップページからアクセスできるJMXコンソールのservice=Hypersonicをクリック後、startDatabaseManager()のInvokeをクリックすることで管理コンソールにアクセスできます。

JSPのJSTLとJSFの混在 - Unified EL(Expression Language)

JSFだけでJSPを書いていると、JSPのタグも使いたくなることがあります。今回maznがやりたいと思ったことは、JSFで複数のテーブルを繰り返し出力させる方法です。

単一のテーブルならばJSFのタグ( <h:dataTable>)を使って簡単に作成できますが、さらにこのテーブルを以下のように複数作りたい時に、JSFだけのタグだとうまくいきません。

名前 hogehoge
年齢 21
性別
名前 gehogeho
年齢 45
性別

そこで少し調べて見たところ、JavaEE5からのJSP2.1とJSF1.2からサポートされているUnified-EL (Unified Expression Language)で簡単に実現できました。

JSPはEL式を"${ ... } "と、JSFでは "#{ ... }"と書きます。JavaEE5からはこの二つを混ぜることができます。つまり複数テーブルを出したい場合はJSTLの<c:forEach>タグを使ってループさせ、中でJSFのタグを使って以下のような感じで複数テーブルを作成することができます。

<c:forEach item="#{personManagedBean.datas}" value="data">
    <table>
    <tr><td>名前</td><td><h:outputText value="#{data.name}"/></td></tr>
    <tr><td>年齢</td><td><h:outputText value="#{data.old}"/></td></tr>
    <tr><td>性別</td><td><h:outputText value="#{data.sex}"/></td></tr>
    </table>
</c:forEach>
 ※なにも見ずに書いたので間違ってるかも

personManagedBeanというマネージドビーンのdatasはList型で、1テーブルに必要なデータが複数入っています。この中の1データをdataという変数で取り出し、JSFの<h:outputText>で内容を出力しています。今回は<table>を使っていますが、<h:dataTable>でも動くと思います。

ちなみにJBoss4.2のJSP, JSFは対応しています。

Date型@EntityBean

EntityBeanからDate型にマッピングしたデータを取り出した場合、java.util.Dateではなく、java.sql.Date型でマッピングされます。そのため、toString()を呼び出した場合、日時の表示形式が異なります。

Date型ってmonthは0~11で指定するんだね。Javadoc見ればすぐわかるんだろうけど、はまってしまった。

Java スクリプト API

Javascriptではありません。Java スクリプト APIです。

JRubyやGroovyのように、JVM上で動く新しいスクリプト言語かと思っていたけど違います!

JRubyやGroovyはJVM上で動き、Javaのクラスを呼び出すことができます。しかし逆にJavaのプログラムからスクリプト言語を実行するには、 Apache の Jakarta BSFのようなフレームワークが必要でした。しかしこのAPIを使用することで、Javaからスクリプトを実行することができるようです。

IBMのサイトに紹介がありますので、詳しくはこちらへ。

EntityBean @ JBoss 4.2

JBoss 4.2でEntityBeanを作ってみた。

@Idアノテーションは書籍やネットを調べると フィールドでもgetterでもよいと書いてあるが、どうもフィールドにつけるとうまく動いてくれない。

バグなのかプログラムが悪いのかわからないが、getterだと動いてくれました。

EJB3 JPAのmapping-type @ JBoss 4.2

JBoss 4.2 でEJB3のJPA (JAVA Persistence API) のバックグラウンドのDBを設定する際、deployディレクトリにData Sourceのxmlファイルを置きますが、そのファイル内で指定する<mapping-type> はどこで定義されてるんだろ?と思い調べてみると、 server/default/conf/standardjbosscmp-jdbc.xml で定義されてた。

定義を見ると、今はPostgreSQL 8系を使用してるので "PostgreSQL 8.0"を指定すればよいことがわかる。

EJB3 JPAでEntityBeanを作成する際、@Idアノテーションで主キーを指定するのだが、さらに @GeneratedValueで採番の方法を指定できる。PostgreSQLのserialを使用したいがAUTOやSEQUENCEを指定してもserialを使用できない。

standardjbosscmp-jdbc.xml をいじればできそうだがどういじればよいかわからないので、今日は諦めです。

このブログについて
プライバシーポリシー・お問い合わせ等
購読する(RSS)
記事検索
アーカイブ
カテゴリー
  • ライブドアブログ