特集
2004/01/30 18:55:00 更新


特集:第1回 EJBの仕組みを知ろう (5/6)


メソッド横取りをするためのEJBオブジェクト

 EJBコンテナは、作ったBeanオブジェクトを直接返さないようになっている。その代わりに、「EJBオブジェクト」と呼ばれるオブジェクトを返す。

 EJBオブジェクトは、Enterprise Beanを利用するクライアントからのメソッドの呼び出しを横取りし、何らかの処理をした上で、管理しているBeanオブジェクトの同名のメソッドを呼び出して、その結果を返すという中継処理を行う。


EJBコンテナが、メソッドの呼び出しを横取りする理由は、EJBが備える特殊な機能を実現するためだ。

本連載では説明しないが、EJBにはセキュリティに関する機能が備わっている。たとえばセキュリティの設定によって権限がないユーザーからEnterprise Beanが利用されようとしたときには、EJBコンテナによって拒否される。また詳細は割愛するが、EJBは、データベースのトランザクション処理もサポートしており、EJBコンテナは、それぞれのEnterprise Beanが処理に成功したか失敗したかを管理し、データベースをコミットしたりロールバックしたりするために、メソッドの呼び出しの横取り処理が必要となる。このような理由から、EJBコンテナは、直接Enterprise Beanを返さない仕組みになっている。

 EJBオブジェクトは、EJBコンテナによって自動的に生成される。このとき生成されるEJBオブジェクトの雛形となるのが、「リモートインタフェース」だ。

 リモートインタフェースは、EJBObjectインタフェースから継承(extends)したもので、Beanクラスに実装したメソッドと同名のメソッドを備えるように実装する。すると、クライアントは、EJBオブジェクトを経由してBeanオブジェクトのメソッドを呼び出せるようになる。

 Fig.6から明らかなように、EJBを利用する場合、クライアントが呼び出すのは、EJBオブジェクトであり、Beanオブジェクトそのものではない。しかしEJBオブジェクトには、Beanオブジェクトが備えるのと同名のメソッドが備わっているので、クライアントからは、自分がBeanオブジェクトのメソッドを呼び出しているように見えるというのがポイントだ。


Beanオブジェクトは、EJBコンテナによって、外部とは完全に隔離されている。そのため、Beanオブジェクトは、メソッドの戻り値として、EJBによって管理されているBeanオブジェクト(自分自身であるthisなど)を直接返してはならない。もしEJBに管理されているBeanオブジェクトを返すと、クライアントは、EJBオブジェクトを経由せずに直接Beanオブジェクトのメソッドの呼び出しができてしまうことになり、EJBコンテナの管理状況とつじつまが合わなくなる可能性がある。

前のページ | 1 2 3 4 5 6 | 次のページ

[大澤文孝,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.