我猜是通过rmi调用,服务器端并没有传给客户端。

解决方案 »

  1.   

    就是通过rmi调用,客户端也有stub呀
      

  2.   

    服务器端并没有把stub文件传给客户端,而是通过Remote Interface(其间用rmi和JDNI)来实现的
      

  3.   

    1.服务器对ejb的调用,本质是rmi,在2.0以后,引入了Local接口,支持本地容器调用,拥有更好的性能,至于服务器中的调用实现,目前能力有限,不能做很深的分析,服务器之间的bean调用,则必须通过远程接口来完成.2.重点讨论标准java程序对服务器bean的调用,以jboss为例子,假设有一个session bean部署在服务器中,又一个客户程序叫SessionClient的要调用这个session bean,以下是伪命令行:
    java -classpath %classpath%,%jboss-supplied-client-jar-file% SessionClient
    这样看问题就很清晰了,本质上说,rmi的stub与skeleton作用是实现了本地远程件的通讯,屏蔽了rmi客户端与服务器端复杂的通信细节,其形式和叫法如何我们可以不论,在这里,%jboss-supplied-client-jar%提供了服务器特有jndi引擎,与其他通信相关类,负责与服务器端进行对话,因此,我认为没有stub再进行下载,下载的是一个ProtableRemoteObject类型,在客户程序中完成相关任务.
      

  4.   

    使用jbuilder做一个ejb,然后使用向导生成一个client测试程序,看看就会明白,实际上这个stub是生成了的,不过ejb实际上是通过rmi来实现远程调用
      

  5.   

    肯定要有Stub的,没有客户端支持的jar包,你是不能编写客户端程序的。在本机的开发方式中,客户端和ejb在同一包内所以不需要明确的jar包支持。
      

  6.   

    试试EJB和服务器在不同机器上的时候,不要用什么开发工具,直接在JDK下
    运行例子,你就知道怎么回事了。
    估计你没有在JDK下面编过EJB,才会有这种问题。
      

  7.   

    我想应该是通过rmi这种复杂的协议来访问的
      

  8.   

    我问过IBM的人,说是服务器端会有一个共享目录来存放远程接口类,客户端set classpath到共享目录就可以了!
      

  9.   

    我用deploytool时,他会问你是否回送xxxclient.jar,这里面就是stub
    若你不是用runclient工具,要运行独立的客户程序的话,则必须在classpath中加入这个.jar文件。
      

  10.   

    我认为所谓客户端并不是指你的浏览器
    二是在相对你而言的服务器端在细化分配的
    这是为了实现J2EE的位置无关,以及远程调用而产生的
    对于你的浏览器来说,你获得的是Jsp运行后返回的结果
    而相对于EJB来说,Jsp是它的客户端
    因此事实上,stub传给Jsp,而skeleton在提供EJB的服务器那里请参看《精通EJB(第二版)》
      

  11.   

    中间层是通过rmi来和web服务器通信,在web服务器上要有stub 还要用classpath指到
      

  12.   

    多谢个位的回答,
    现在不考虑那么多,就以weblogic为例,我只编写了ejb组件,并且部署到weblogic上,有编写了一个jsp客户端,放到web服务器,注意这里的客户端并不是什么client.jar文件,而是一个单独的jsp文件和remote和home接口,,但客户端,并没有stub文件,现在我可以通过客户端和ejb通信
    说明此时,stub已经在客户端,所以ejb容器已经动态的将stub下载到客户端,我想知道的是,
    我们在调用哪段程序的时候,ejb容器将stub传到客户端的,谢谢了!
      

  13.   

    XXXHome home=ctx.lookup("xxx");//这里home指到的实际上是home接口的stub实例
    XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例
    websphere的更复杂。
      

  14.   

    我自己也做过试验,没有stub,一样可以正常访问-- Initializing bean access.jdbc javax.naming.Context
    MyEJB testejb.MyEJBHome_DynamicStub   <--这个stub怎么来的??
    ejb javax.naming.Context
    system.undeliverable com.apusic.jms.message.lIIIllllIlllIlll
    testTopic com.apusic.jms.message.llIIIlIlIlIIIlll
    service javax.naming.Context
    testQueue com.apusic.jms.message.lIIIllllIlllIlll
    jmx javax.naming.Context
    jms javax.naming.Context
    this is my first jb EJB!!!-- Succeeded initializing bean access.-- Execution time: 1913 ms.
      

  15.   

    XXXHome home=ctx.lookup("xxx");//这里home指到的实际上是home接口的stub实例
    XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例
    websphere的更复杂。JVM上的通信,相当于你的网络平台进行的TCP/IP通信,
    远程的要指明URL 才行,很多的通信的明文使用了XML(我们的使用被封装了),但是要和要使用相应的类,还是得下载到本地,然后可以建立一个远程实例!