Skip to content

EJBのJNDI lookupでNameNotFoundException

EJBのJNDI lookupでNameNotFoundException published on EJBのJNDI lookupでNameNotFoundException へのコメントはまだありません

■問題点

その名の通りJNDI lookupでEJBが見付からなくってNameNotFoundExceptionが発生。

環境:WebLogic 11g Release 1

■背景等

EJB 3だと以下のようにアノテーションを使ってEJBを呼び出すから、通常はJNDIルックアップとか必要ない。

// ビジネスロジックのインターフェース
@Local
public interface SomeInterface {
public void doSomething();
}
// ビジネスロジックの実装
@Stateless
public class SomeBean implements SomeInterface {
public void doSomething() {
// 処理
}
}
// Session Bean を使うクラス
public class Client {
// DI
@EJB
private SomeInterface foo;
}

今回は扱う業務データのファイルの種類毎にSession Beanがあって、Sessioin Beanの名前を動的に生成して使うようにしているので。

※ビジネスロジックをPOJOにして、呼び出されるSession Beanは1つにし、リフレクションでビジネスロジックのクラスを呼び出すという方法でも良いのかもしれないけど…いやー、この辺はよく分からん。

 

Continue reading EJBのJNDI lookupでNameNotFoundException

EJB 3.0のSession BeanでEntityManagerを使う

EJB 3.0のSession BeanでEntityManagerを使う published on EJB 3.0のSession BeanでEntityManagerを使う へのコメントはまだありません

メモ

■環境

  • WebLogic 11g Release 1 

■やりたい事

EJB 3.0のSession Beanの中で、Entity Managerを使ってEntityオブジェクトを扱う。

Continue reading EJB 3.0のSession BeanでEntityManagerを使う

Java DBの基本的なチューニング

Java DBの基本的なチューニング published on Java DBの基本的なチューニング へのコメントはまだありません

自分用メモ。

今やってるプロジェクトでは一部Java DBを使ってる。初めて使ったので色々分からないこともあったけど、まぁDBMSだし基本的には一緒だね。

英語だけどこのページにチューニングの基礎的な内容が載ってる。

PreparedStatement、ORDER BYの中には?は使えない。

PreparedStatement、ORDER BYの中には?は使えない。 published on PreparedStatement、ORDER BYの中には?は使えない。 へのコメントはまだありません

タイトル通り。
ごく単純なDBの中身を表示するプログラムをメンテしていた。各列の見出しをクリックするとその列の値によってソートされる仕組みになってたから、以下のようなSQLをprepareしようとしたけど出来なかった。
SELECT * FROM TBL WHERE FIELD1=? ... ORDER BY ?

JSTL

JSTL published on JSTL へのコメントはまだありません

JSTL(JSP Standard Tag Library)を使うとJSPファイルが結構すっきりする。
EL式とか、最初はとっつきにくかったけど、慣れてくるとかなり便利。
参考にしたのはきしださんのページIBMのページ(今見たらリンク切れだった…)。
ちなみにJSTLはJava EE 5(JSP 2.0)に統合されたらしい。良いことだ。新しいバージョン(JSTL 1.1)について解説してるページがあった。

MySQL&Javaでタイムゾーンを正しく扱う

MySQL&Javaでタイムゾーンを正しく扱う published on MySQL&Javaでタイムゾーンを正しく扱う へのコメントはまだありません

タイトル通り。
色々試行錯誤したけど、結論としては
更新系のクエリーの場合

  1. JavaでDateクラスのインスタンスに正しいタイムゾーンを設定
  2. それをStatement#setObjectでセットして普通に実行するだけ

基本的にデータベース内部ではエポックからのミリ秒とかで管理してるはず。
で、SELECTクエリーの場合、ResultSet#getDateとかgetTimestampで返ってくるオブジェクトはローカルのタイムゾーンになってるので、必要に応じて適切なタイムゾーンを設定する。
基本的な事として、Dateオブジェクトに違うタイムゾーンを設定しても、内部的な時間が変更になるわけではない、はず。東京の午後1時とシンガポールの正午は内部的には同じ時間。文字列として表示した時に13:00となるか12:00となるかの違い。
慣れてしまえば、それ程難しくはないと思うけど、結構面倒。
MySQLのタイムゾーンの扱いについてはこのページが詳しい(この文書の和訳)。
JDBCドライバのオプションでタイムゾーン関係のがいくつかあるけど、試してない(マニュアルページ)。

BIRTからセッションオブジェクトを取得

BIRTからセッションオブジェクトを取得 published on BIRTからセッションオブジェクトを取得 へのコメントはまだありません

自分用メモ
Javaだとrequest.getSession(true)でセッションを取得して、そこにオブジェクトをセットしたりってのを良くやるけど、それをBIRTから参照できるらしい。例によって参考にしたのは英語のページだけど。
BIRTってかなり何でも出来るね。

JBossからBIRTを使う

JBossからBIRTを使う published on JBossからBIRTを使う への2件のコメント

タイトル通り。まぁ要はclasspathの設定とかの話。
JBossではなくてWebLogicだけど、この一連のスレッドが役に立った。特にコメントの2番。
○環境
JBoss 4.0.3SP1 (別にバージョン依存の話ではないけど)
BIRT Runtime 2.2.2
やった事

  1. birt-runtime-2_2_2/ReportEngine を JBOSS_HOME/server/default にコピー
  2. birt-runtime-2_2_2/ReportEngine/lib/*.jar を JBOSS_HOME/server/default/lib にコピー

当然 setEngineHome には JBOSS_HOME/server/default/ReportEngine を指定。

BIRTでJavaオブジェクトの埋め込み

BIRTでJavaオブジェクトの埋め込み published on BIRTでJavaオブジェクトの埋め込み へのコメントはまだありません

今のプロジェクトではBIRTというオープンソースのレポートエンジンを使っている。
BIRTは色々便利なんだけど、欠かせない機能としてレポート内でJavaScriptを使う事が出来、さらにそのJavaScriptからJavaオブジェクトを呼び出す事が出来る。ビジネスロジック(及びDAO)はJavaで実装して、BIRTはデータの表示だけを行うようにすると良い感じ。(Beanを生成して、getterメソッドでStringとかfloatの値を取り出してレポートに表示する)
Javaオブジェクトの呼び出し方だけど、今まで2通りやった事がある。
スクリプトの使い方についてはこの辺(英語)。

Continue reading BIRTでJavaオブジェクトの埋め込み