一个关于SessionBean调用的问题。

我在一些Session Bean 中封装了一些业务逻辑。比如 Bean1,Bean2,Bean3。
在这些Session Bean之前,我用另外一个Session Bean作为业务逻辑分派器,根据客户端传上来的功能号来调用不同的Bean。我现在有一个问题,我可以根据客户端传上来的功能号知道需要调用的Bean的名字,我如何去得到这个Bean的home的类型。从而可以去调用到我需要的业务逻辑。谢谢大侠。

你可以将你的功能号和Bean的JNDI名称做个映射,放在配置文件里或者是数据库中,服务器启动后缓存。根据功能号查找EJB的JNDI名称后去lookup ejb的home stub

我看错了,呵呵
你说的是本地调用还是远程调用的区别吗?

你可以把远程调用的EJb和本地调用的EJB分开缓存就可以知道那个功能号对应的home类型事什么了,不知道有没有理解你的意思

可能,我没有讲的很清楚。
我在一些Bean里面封装了一些业务逻辑,这些都是用功能号定义的。
比如1001是登陆,我放在了Biz10里面。我在客户端传递一个功能号1001 到中间件,我的业务逻辑分配器就可以根据1001这个功能号找到Biz10 这个bean的名字。现在问题就是,我知道了这个名字Biz10(字符串),我怎么根据这个名字去调用Bean Biz10.

定义一个映射关系不就可以了

倒是这句话很有意思:
我知道了这个名字Biz10(字符串),我怎么根据这个名字去调用Bean Biz10.

那你一开始怎么调的?难道不是通过JNDI?;ppp

我当然是通过jndi去调用bean了,,当然通过context.lookup()方法去拿到一个对象,不过,问题就在这里,context.lookup()拿到的是一个object,现在,我要将这个object转换成为我调用的那个bean的home的类型才能调用到bean里定义的方法。而在这里,我只知道home类型的名字,就是一个字符串。我要怎么做才可以。这里,我所说的都是在运行期哦。
可能,我的表达能力不是太好了。请原谅哦。

> 我当然是通过jndi去调用bean了,,当然通过context.lookup
> )方法去拿到一个对象,不过,问题就在这里,context.looku
> ()拿到的是一个object,现在,我要将这个object转换成为我
> 饔玫哪歉bean的home的类型才能调用到bean里定义的方法。?> 在这里,我只知道home类型的名字,就是一个字符串。我要怎
> 醋霾趴梢浴U饫铮宜档亩际窃谠诵衅谂丁?> 可能,我的表达能力不是太好了。请原谅哦。

哦,那我知道了,你应该把所有的bean的home和remote接口都一致,这样就没有这个问题了

用classloader

Class.ForName("classname");

我有个主意。你的调度bean其实可以不关注通过JNDI查得的是一个什么类型的session。你的seesion可以有一个共同的基类,基类中定义一些虚函数(如work)。然后调度bean就这样工作:
BaseClass obj = (BaseClass)((ctx.lookup("jdniname")).create();
obj.work();//动态联编
...
这样应该可以实现你想要的效果吧。

to 汪汪
对的,我就是要的这个效果。
不过,现在第二个问题出现了,就是Session Bean的继承。我搞了2天,编译总是没有通过。你有没有什么例子让我参考一下,谢谢。

为什么还要继承呢?
对于EJB的访问者来说,只是关心home和remote

你只要把所有处理业务逻辑的EJB都使用一样的home和remote
那么对于访问者来说,就是一样的东西,只是JNDI名的区别而已了~

个人觉得,既然用了EJB,还去考虑继承甚至是类似reflect的方法
都是没有真正理解EJB,呵呵,可能言重了~

唉,这次写得那么清楚,如果楼主还是不明白,那就没办法了...

或者,再去看看factory,就可以更明白~

另,你应该研究你的业务事实是不是真的需要sessionbean,如果你确认一定需要,那只能研究在sessionbean之后再分发的问题
想从一个sessionbean跳到另一个sessionbean,还要session完全同步,真没什么idea(每次业务逻辑都访问一次每个sessionbean的某个方法做同步?)
或者是我说太多了,楼主本来就只是用stateless的sessionbean,呵呵

我以前一直做COM Plus的,现在就是想学习一下EJB,我现在想把我在COM Plus下做过的一个结构移植到EJB下面来。我的想法是这样的,客户端看中间件只有一个接口,就是一个业务逻辑的分发器,分发器根据前端传上来的业务逻辑代码,去调用不同的业务逻辑组件。看来,我还是需要好好的在研究一下了,Crogers,多谢你的教导。可能以后还要请你多多指教阿。

另:Crogers兄,小弟能不能给你发邮件,请教一些问题。