-PR-
解決済み

EJB(Enterprise Java Beans)のSessionBeanと普通のJavaクラスのアクセス

  • 困ってます
  • 質問No.32592
  • 閲覧数256
  • ありがとう数6
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (13/13)

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

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

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

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


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



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

ながながとすんません。。。でした
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル8

ベストアンサー率 51% (16/31)

すいません、コンピュータに接続できなかったものですっかり遅くなってしまいました。質問をよく理解していなかったようですね。ごめんなさい。

一応確認ですが、同じサーバーの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) というのも分からないでしょうか。

また何か違う事を答えているかもしれませんが、そうしたらまた言ってください。
お礼コメント
appipi

お礼率 100% (13/13)

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

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

でも、なんとなくですが理解しました。
何度もご親切にありがとうございました。
投稿日時 - 2001-03-05 21:32:04
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル8

ベストアンサー率 51% (16/31)

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

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

public void ejbActivate() throws RemoteException { }
等。

つぎに、Home や Remote がいるかとの事ですが、これが無いものは EJB とは呼ばれない言うのが答えだと思います。
お礼コメント
appipi

お礼率 100% (13/13)

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

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

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

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

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

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

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

とにもかくにもいろいろとありがとうございました。
あつかましくもまたいろいろと書いてしまいましたが、
時間があるときにでもお返事をいただけたらと思います。
投稿日時 - 2001-02-16 19:17:29


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ