こんにちは!
問題は山のようにあるんですが、とりあえず、

EJBを作る際にSessionBeanを作ったんですが、そのBean以外に
DBにアクセスするクラスを自分で勝手に作ったら”abstract”だと
怒られるのですが、

・普通のクラスを使用するのは根本的に間違ってるのでしょうか?

また、
・他にEntityなりSessionなり(よく違いを理解していなくてすいません・・・)
でやる場合は、やはり新しくHomeやRemoteが必要なのでしょうか?


以上なんですが、わかる方がいらっしゃたらお願いします。



※番外編なんですが、もしAPWORKS(富士通さんの)お使いの方いらっしゃいま
したら、EJBを作る時の新規DAクラス作成方法を教えてください。

ながながとすんません。。。でした

A 回答 (2件)

すいません、コンピュータに接続できなかったものですっかり遅くなってしまいました。

質問をよく理解していなかったようですね。ごめんなさい。

一応確認ですが、同じサーバーのVM内で EJB の bean と別のクラスのオブジェクトとがアクセスするという事でいいですよね。

こういうことでしょうか?(以下、MyBean を EJB の bean のクラス、MyDbEngine を普通のクラスとします。)
1. MyBean のメソッドの中で myDbEng = MyDbEngine.getInstance(); とか myDbEng = new MyDbEngine(SomeParameters) のようにやって myDbEng.truncateAllTable(); のようにできるか。

2.MyBean のメソッドの中で MyDbEngine.startEngine(this); のようにするとMyDbEngine のほうで myBean = bean のように MyBean のインスタンスのレファレンスを保持してさらに別のスレッドを起動してその中から MyBean のメソッドにアクセスする。ことはできるか。

3.MyDbEngine のメソッドから myBean = new MyBean(); のようにしてこれを利用する。

という事でいいでしょうか。
1.はもちろんOKです。ただ複数の Bean が同時にアクセスすることもあるでしょうから static なデータを持たせる場合には注意が必要です。

2.3.は問題があると思います。EJB の Bean 自体はコンテナ(APWORKS?)が管理するので他からダイレクトにアクセスするのはまずいでしょう。(3.で stateless sessoin bean なら平気なような気もしますが。)この場クライアント側のコードと同じように(JNDIをlookupして)Home を取得してそこから利用しなければならないと思います。ただし、この場合もアクセスする側(MyDbEngine) は EJB である必要は無く、あくまで普通のクラスでかまいません。JSPからEJBを利用する時と同じようなものです。

あと、abstract のほうはちょっとわかりません。何をしたら(javac/ejbc/runtime) 言われるのでしょうか、また、何が(class/method) というのも分からないでしょうか。

また何か違う事を答えているかもしれませんが、そうしたらまた言ってください。
    • good
    • 0
この回答へのお礼

たびたびありがとうございます。
違いがあまりよく分からなかったのですが(ごめんなさい。。。)、
Beanから普通のJAVAクラスを呼び出して(newして)
そのクラスで処理させるというようなことを考えていたんですが、
うーん、やはり同じコンテナ内において
使うとかは無理なのでしょうね。

今は、時間の都合でEJB間通信をしてしまって
abstractが出たときの状態もわからなくなってしましました。。。
(とてもがさつなもんですいません。。。)

でも、なんとなくですが理解しました。
何度もご親切にありがとうございました。

お礼日時:2001/03/05 21:32

APWORKS は使った事は無いのでちがっていたらすいません。


まず、「普通のクラスを使う事」とは「DBにアクセスする場合には」という事で聞いてらっしゃると思いますが、どんな目的にしろ問題ありません。デザイン的にはという事であれば、それは場合によりけりだと思いますが、EJB はビジネスロジックだけいれてDBアクセスはそれ以外のクラスで、と言うこともよく考えられる事ではないでしょうか。

"abstruct"だと怒られるのは .java のコンパイル時だと思いますが、jbActivate() など SessionBean の interface に含まれるメソッドをインプリメントしていないのではないでしょうか。中身は何も無くても作っておかなければなりません。

public void ejbActivate() throws RemoteException { }
等。

つぎに、Home や Remote がいるかとの事ですが、これが無いものは EJB とは呼ばれない言うのが答えだと思います。
    • good
    • 0
この回答へのお礼

どうもすいません!
先日返事を出したはずだったんですが、
今日見たら何も表示されていなかったので、また改めました。

>EJB はビジネスロジックだけいれてDBアクセスはそれ以外のクラスで、と
言うこともよく考えられる事

それ以外のクラスとはやはりEJBになるんでしょうか?

>ejbActivate() など SessionBean の interface に含まれるメソッドをインプ
リメント・・・

の部分は、一応APWORKSの方で自動生成してくれるのでいました。

>Home や Remote がいるかとの事ですが、これが無いものは EJB とは呼ばれ
ないと言うのが答えだと思います

の部分なんですが、私の言い方が悪かったのかもしれないんですが、
Home,Remote,BeanとあるEJBのBeanにだけアクセスするようなbeanのクラスも
EJBの形にしなければならない、つまりEJB間でしかやれないんでしょうか?
ということだったんです。

とにもかくにもいろいろとありがとうございました。
あつかましくもまたいろいろと書いてしまいましたが、
時間があるときにでもお返事をいただけたらと思います。

お礼日時:2001/02/16 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報

カテゴリ