EJB知多少???经典问题,不看会后悔,勇敢的回答吧~~!今天晚上结帐 我猜是通过rmi调用,服务器端并没有传给客户端。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是通过rmi调用,客户端也有stub呀 服务器端并没有把stub文件传给客户端,而是通过Remote Interface(其间用rmi和JDNI)来实现的 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类型,在客户程序中完成相关任务. 使用jbuilder做一个ejb,然后使用向导生成一个client测试程序,看看就会明白,实际上这个stub是生成了的,不过ejb实际上是通过rmi来实现远程调用 肯定要有Stub的,没有客户端支持的jar包,你是不能编写客户端程序的。在本机的开发方式中,客户端和ejb在同一包内所以不需要明确的jar包支持。 试试EJB和服务器在不同机器上的时候,不要用什么开发工具,直接在JDK下运行例子,你就知道怎么回事了。估计你没有在JDK下面编过EJB,才会有这种问题。 我想应该是通过rmi这种复杂的协议来访问的 我问过IBM的人,说是服务器端会有一个共享目录来存放远程接口类,客户端set classpath到共享目录就可以了! 我用deploytool时,他会问你是否回送xxxclient.jar,这里面就是stub若你不是用runclient工具,要运行独立的客户程序的话,则必须在classpath中加入这个.jar文件。 我认为所谓客户端并不是指你的浏览器二是在相对你而言的服务器端在细化分配的这是为了实现J2EE的位置无关,以及远程调用而产生的对于你的浏览器来说,你获得的是Jsp运行后返回的结果而相对于EJB来说,Jsp是它的客户端因此事实上,stub传给Jsp,而skeleton在提供EJB的服务器那里请参看《精通EJB(第二版)》 中间层是通过rmi来和web服务器通信,在web服务器上要有stub 还要用classpath指到 多谢个位的回答,现在不考虑那么多,就以weblogic为例,我只编写了ejb组件,并且部署到weblogic上,有编写了一个jsp客户端,放到web服务器,注意这里的客户端并不是什么client.jar文件,而是一个单独的jsp文件和remote和home接口,,但客户端,并没有stub文件,现在我可以通过客户端和ejb通信说明此时,stub已经在客户端,所以ejb容器已经动态的将stub下载到客户端,我想知道的是,我们在调用哪段程序的时候,ejb容器将stub传到客户端的,谢谢了! XXXHome home=ctx.lookup("xxx");//这里home指到的实际上是home接口的stub实例XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例websphere的更复杂。 我自己也做过试验,没有stub,一样可以正常访问-- Initializing bean access.jdbc javax.naming.ContextMyEJB testejb.MyEJBHome_DynamicStub <--这个stub怎么来的??ejb javax.naming.Contextsystem.undeliverable com.apusic.jms.message.lIIIllllIlllIllltestTopic com.apusic.jms.message.llIIIlIlIlIIIlllservice javax.naming.ContexttestQueue com.apusic.jms.message.lIIIllllIlllIllljmx javax.naming.Contextjms javax.naming.Contextthis is my first jb EJB!!!-- Succeeded initializing bean access.-- Execution time: 1913 ms. XXXHome home=ctx.lookup("xxx");//这里home指到的实际上是home接口的stub实例XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例websphere的更复杂。JVM上的通信,相当于你的网络平台进行的TCP/IP通信,远程的要指明URL 才行,很多的通信的明文使用了XML(我们的使用被封装了),但是要和要使用相应的类,还是得下载到本地,然后可以建立一个远程实例! 项目拷到另一台电脑,结果就报错了,求牛人帮下忙 新手请教struts2 ajax的属性和方法 ejb郁闷了很久的问题 散分 高手请进,难题啊! 有人帮我吗? 关于JNI 关于Socket Connection reset 问题 怎么选择spring和hibernate的版本 关于setLastDate(java.sql.Timestamp lastDate)的问题(在线等待) 虚心问一下,这是什么问题?可以给个正常的写法吗?
java -classpath %classpath%,%jboss-supplied-client-jar-file% SessionClient
这样看问题就很清晰了,本质上说,rmi的stub与skeleton作用是实现了本地远程件的通讯,屏蔽了rmi客户端与服务器端复杂的通信细节,其形式和叫法如何我们可以不论,在这里,%jboss-supplied-client-jar%提供了服务器特有jndi引擎,与其他通信相关类,负责与服务器端进行对话,因此,我认为没有stub再进行下载,下载的是一个ProtableRemoteObject类型,在客户程序中完成相关任务.
运行例子,你就知道怎么回事了。
估计你没有在JDK下面编过EJB,才会有这种问题。
若你不是用runclient工具,要运行独立的客户程序的话,则必须在classpath中加入这个.jar文件。
二是在相对你而言的服务器端在细化分配的
这是为了实现J2EE的位置无关,以及远程调用而产生的
对于你的浏览器来说,你获得的是Jsp运行后返回的结果
而相对于EJB来说,Jsp是它的客户端
因此事实上,stub传给Jsp,而skeleton在提供EJB的服务器那里请参看《精通EJB(第二版)》
现在不考虑那么多,就以weblogic为例,我只编写了ejb组件,并且部署到weblogic上,有编写了一个jsp客户端,放到web服务器,注意这里的客户端并不是什么client.jar文件,而是一个单独的jsp文件和remote和home接口,,但客户端,并没有stub文件,现在我可以通过客户端和ejb通信
说明此时,stub已经在客户端,所以ejb容器已经动态的将stub下载到客户端,我想知道的是,
我们在调用哪段程序的时候,ejb容器将stub传到客户端的,谢谢了!
XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例
websphere的更复杂。
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.
XXX ejb=home.create();//这里ejb指到的实际上是remote接口的stub实例
websphere的更复杂。JVM上的通信,相当于你的网络平台进行的TCP/IP通信,
远程的要指明URL 才行,很多的通信的明文使用了XML(我们的使用被封装了),但是要和要使用相应的类,还是得下载到本地,然后可以建立一个远程实例!