EJB3.0迷惑

学了EJB3.0现在有两个问题请教下大家:
1。本地的stub存在哪里?怎么没看到stub文件
2.如果我的ejb是部署在远程的服务器,那像下面的语句:Helloworld hello = (Helloworld)ctx.lookup("helloworldBean/remote");(其中Helloworld是远程接口)
在这里肯定要涉及到import 进Helloworld来,而Helloworld是在远程的怎么能import的呢?那如果在本地有了Helloworld,那就不需要部署到远程服务器了呀?

本地只需要提供接口,而实现这个接口的BEAN以及实现这个BEAN所需要的资源在远程的服务器

本地需要一个ejb client,里面包含了Helloworld等interface,但不包含任何implementation。

如果是采用标准的Java EE 5 packaging,打成一个EAR包的,那么ejb bean和调用这些bean的app是在同一个jvm中部署的,也就不需要ejb client了(PS:这样性能还有一定程度的提升。因为没有序列化的开销了)。

谢谢楼上两位的回答!
那就是说是不是如果是本地要调用远程的EJB本地就是一定要有bean的interface?
还是个问题就是:为什么我本地都没有stub也是能调用远程EJB的?以前EJB2的时候都是要自己手动在本地生成stub才行的,但是在EJB3.0的时候就不用也行!那没有stub的话怎么远程调用呢?远程调用不是就是stub来处理网络上的细节的吗?

>>本地只需要提供接口,而实现这个接口的BEAN以及实现这个BEAN所需要的资源在远程的服务器
那就是说本地是要有个由interface打成的jar?

同问...

今天看到robbin在javaeye中的一个帖子:EJB调用的原理分析,看后觉得解决了stub的问题,在此转下希望对其他人也有帮助!
原文见:http://www.javaeye.com/topic/1036
[该贴被pliaozrlp于2009-01-21 16:18修改过]

pliaozrlp,那文章我看得很晕.
能再具体说说如何调用的问题么?

>>那就是说本地是要有个由interface打成的jar?

你的这个疑问对于我而言依然是疑问

但是客户端lookup获得EJB实例的过程,所有代码确实只是使用到了接口而已,没有触及到实现类...

感觉也不一定需要打个jar包了,只要能够导到接口就可以啊.
抱歉,刚学,只有这种理解层次

>>但是客户端lookup获得EJB实例的过程,所有代码确实只是使用到了接口而已,没有触及到实现类...

我的理解是:那个接口就是stub类来的,只不过是以接口的形式返回,java本来就是要面向接口的编程。
lookup操作就是应该等于:InterfaceA it = new XXXstub();(其中XXXstub实现了InterfaceA)
不知道这样理解对不对?

>>感觉也不一定需要打个jar包了,只要能够导到接口就可以啊

这个应该就像你说的能导进来就行了。

我的疑问是:如果一个公司是专门从事EJB的组件开发的,如果他把自己开发的包给客户用的话,而客户又是采用分布部署的话,那就是要提供一个纯接口的包给客户部署到本地,不然的话就无法导入了!

对于stub我的理解是:不同的application server的实现是不同,有的是可能动态生成,通过JNDI查找用网络来传递,如robbin说的Weblogic,而有的是要自己手动生成的,如websphere(我曾经用它写过EJB2.0的简单的程序),对于EJB3.0来说是不是所有的服务器都实现了第一种方式,我就不知道了,也期待高手解答下!
[该贴被pliaozrlp于2009-01-21 18:35修改过]

>>本地只需要提供接口,而实现这个接口的BEAN以及实现这个BEAN所需要的资源在远程的服务器
那对开entityBean呢?它不实现任何接口了!