我写了一个简单的ejb,但怎样用

我用sun的deploytool成功部署了一个Helloclient.jar,但我怎样在servlet或jsp中引用他们,我指的不是代码使用方法,而是路径,以及在xml文件中如何配置,对了,我的是sessionbean 的stateless。

还有就是什麽时候一定要用EJB,是不是要调用的对象不在本地机器上时就要用RMI引用server上的对象,就要用到EJB的规范?

ejb 关键看你的业务逻辑是否需要分布式或并行运算以及需要安全控制等。否则不必。

我是指分布式。我的意思是什麽情况下用jsp+servlet解决不了,一定要用EJB?

我认为在学EJB之前很有必要先把这个问题弄懂。

当你不想做下列事情时,就可以使用EJB。
1.自己做缓存或对象池提高并发访问性能
2.自己安排使用事务跟踪。诸如xx.commit()之类语句
3.自己通过RMI实现跨服务器间对象调用,特别是一台机器无法满足需要,需要多台机器时,需要在这些机器之间实现负载动态平衡,javagroups这样广播发布机制可以实现这些底层通知。
我想就这三件事够你做几年的,如果你不想浪费几年时间,就用EJB吧。

除非你是特殊的实时系统,如游戏、或聊天等。聊天也可以使用JMS实现了。

多谢,但事务的并发不是很理解。
我主要想不通的是:
比如我用sun的deploytool部署了一个Hello.jar文件。里面有Home,Remote,Enterprise javabean,三个文件(还有部署描述符文件),把它部署到weblogic服务器上,假设这个weblogic在服务器A上。那麽我在服务器B上想调用部署在A上weblogic中Hello.jar的一个方法(假设在控制台打印出一个hello,world),那麽我在B上就要用到RMI:
Context ctx=new InitialContext();
Object obj=ctx.lookup("java:comp/env/Hello");
........ ......... ........... ..........

但是他们在不同的机器上,是怎样进行对象调用的?是不是技术的关键在:"HelloHome home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(
objRef,HelloHome.class);"

我看了Ed-Roman的Mastering EJB,上面说用的是stub存根,和skeleton实现的,但没有看懂,
*************************************************************
****主要我还是认为我上面关于服务器A和服务器B的理解有问题*****
*************************************************************
如果有错误,请版主或哪位高手解释一下,多谢!

补充上面说的,服务器B上用的是Tomcat,应为他要调用A上面的EJB组件Hello.jar,而不是运行EJB,所以没有集成JBoss,

现在知道了这个stub是一个本地代理,但每次我都没有运行rmic,它是怎样生成的呢?(我没有用jbuilder)

不是很明白你的问题

HelloHome home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(
objRef,HelloHome.class);"
就可以调用了

我的意思是我在B服务器上用代码:"HelloHome home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(
objRef,HelloHome.class);"

能调用A(有Weblogic的)机器上的那个EJB吗?

是否必须服务器A的工程文件部署到服务器B

EJB是部署到A的weblogic上的,服务器B上只有Tomcat。用TOmcat来调用A上的EJB.

可以,但是必须将服务器A的EJB类文件包拷贝到服务器B的相关目录下,否则服务器B如何编译?

多谢!但服务器A的EJB试运行在A的weblogic中的,如果再在B中部署一下,那麽A就没有意义了,干脆直接在B上部署EJB,然后在B上调用不就行了?可以这就不是分布式应用了。

至于服务器如何编译,我想不是因为一定要拷贝EJB到客户机B上,而是用了一个叫stub的客户端代理类实现的,但具体我不懂,我就是要问这个?

我找到IBM的资料上面是这样说的:

远程和本地接口是两种 Java RMI 远程接口。分布式对象使用 java.rmi.Remote 接口来表示不同地址空间(进程或机器)中的 bean。Enterprise Bean 是一种分布式对象。那表示 bean 类被实例化且在容器中存活,但存活在其它地址空间中的应用程序也访问它。

要使一个地址空间中的对象实例在另一个地址空间中可用,需要一些涉及网络套接字的技巧。要使该技巧生效,应将实例封装在一个称作“框架”的特殊对象中,该对象拥有到另一个叫作“存根”的特殊对象的网络连接。存根实现远程接口,因此它类似于一个商业对象。但存根不包含商业逻辑;它拥有到框架的网络套接字连接。每次在存根的远程接口上调用商业方法时,存根将网络消息发送到框架,告诉它调用了哪个方法。框架从存根接收到网络消息时,它标识所调用的方法以及自变量,然后调用真正的实例上的相应方法。实例执行商业方法,并将结果返回给框架,然后框架将结果发送给存根。
///////////////////////////////////////////////////////////////
说明在客户机B上不用编译这个EJB,用stub代理就可以了,不知我的理解对不对?