著录项信息
专利名称 | 对客户端调用远程接口访问EJB进行处理的方法和装置 |
申请号 | CN200610167382.2 | 申请日期 | 2006-12-31 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2007-07-11 | 公开/公告号 | CN1996256 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/46 | IPC分类号 | G;0;6;F;9;/;4;6查看分类表>
|
申请人 | 华为技术有限公司 | 申请人地址 | 河南省濮阳市华龙区胡村乡坟抬头村6组
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 张晓红 | 当前权利人 | 张晓红 |
发明人 | 苏葩娜;墨迪 |
代理机构 | 北京凯特来知识产权代理有限公司 | 代理人 | 郑立明 |
摘要
本发明提供了一种对客户端调用远程接口访问EJB进行处理的方法和装置,该方法主要包括:当客户端调用远程接口对EJB(企业Java组件)进行访问,并且所述EJB服务器端的企业Java组件JVM标识与所述客户端的JVM标识一致时,使用本地调用处理对象来处理所述客户端对所述EJB的访问。该装置主要包括:JVM确定模块、本地调用处理模块。利用本发明所述方法和装置,可以解决EJB客户端对服务端EJB的远程调用的性能比较低下的问题,可以提高客户端调用远程接口访问EJB的耗时等性能。
1、一种对客户端调用远程接口访问企业Java组件EJB进行处理的方法, 其特征在于,包括以下步骤:
A、当客户端调用远程接口对企业Java组件EJB进行访问时,所述客户端 通过代理描述对象获得EJB服务器端的Java虚拟机JVM标识和客户端的JVM 标识,所述JVM标识为JVM的指定通用唯一标识UUID,确定所述EJB服务器 端的JVM标识与所述客户端的JVM标识一致;
B、所述企业Java组件EJB使用本地调用处理对象来处理所述客户端对所 述EJB的访问。
2、根据权利要求1所述的方法,其特征在于,所述步骤A具体包括:
当客户端调用远程接口通过命名服务访问所述EJB时,所述命名服务实体 将代理描述对象实体返回给所述客户端;
所述代理描述对象实体从其内部获得EJB服务器端的JVM标识,并根据所 述EJB服务器端的JVM标识,从JVM标识管理器对象中获得所述客户端的 JVM标识;
所述代理描述对象实体确定所述EJB服务器端的JVM标识和所述客户端的 JVM标识一致。
3、根据权利要求1所述的方法,其特征在于,所述步骤A之前还包括:
EJB容器创建代理描述对象实体,并将该代理描述对象实体绑定到命名服 务实体上;
为所述EJB服务器端使用的Java虚拟机JVM指定通用唯一标识UUID,并 将该UUID设置在所述代理描述对象实体中。
4、根据权利要求1至3任一项所述的方法,其特征在于,所述的步骤B具 体包括:
所述客户端创建包含本地调用处理对象的EJB组件的代理对象,当客户端 调用所述代理对象时,所述代理对象委托其包含的本地调用处理对象来处理 所述客户端对所述EJB的访问,所述EJB为与所述客户端处于同一个JVM中 的EJB。
5、一种对客户端调用远程接口访问企业Java组件EJB进行处理的方法, 其特征在于,包括以下步骤:
C、当客户端调用远程接口对企业Java组件EJB进行访问时,比较EJB服 务器端的JVM标识与客户端的JVM标识是否一致,当EJB服务器端的JVM标 识与客户端的JVM标识一致时,则转至步骤D;否则,则转至步骤E;
D、所述企业Java组件EJB使用本地调用处理对象来处理所述客户端对所 述EJB的访问;
E、所述EJB使用远程调用处理对象来处理所述客户端对所述EJB的访 问。
6、根据权利要求5所述的方法,其特征在于,所述步骤E具体包括:
所述客户端创建包含远程调用处理对象的EJB组件的代理对象,当客户 端调用所述代理对象时,所述代理对象委托其包含的远程调用处理对象来处 理所述客户端对所述EJB的访问,所述EJB为与所述客户端不是处于同一个 JVM中的EJB。
7、一种对客户端调用远程接口访问EJB进行处理的装置,其特征在于, 包括:JVM确定模块和本地调用处理模块;其中,
所述JVM确定模块,用于当客户端调用远程接口对EJB进行访问时,通 过代理描述对象获得EJB服务器端的JVM标识和客户端的JVM标识,所述 JVM标识为JVM的指定UUID;确定所述EJB服务器端的JVM标识与所述客户 端的JVM标识是否一致;
所述本地调用处理模块,用于当所述JVM确定模块确定所述EJB服务器 端的JVM标识与所述客户端的JVM标识一致时,使用本地调用处理对象来处 理所述客户端对所述EJB的访问,所述EJB为与所述客户端处于同一个JVM 中的EJB。
8、根据权利要求7所述的装置,其特征在于,所述装置还包括:
远程调用处理模块,用于当所述JVM确定模块确定所述EJB服务器端的 JVM标识与所述客户端的JVM标识不一致时,使用远程调用处理对象来处理 所述客户端对所述EJB的访问,所述EJB为与所述客户端不是处于同一个 JVM中的EJB。
9、根据权利要求8所述的装置,其特征在于,所述JVM确定模块包括:
命名服务子模块,用于接收客户端调用远程接口访问所述EJB的信号,将 预先创建的代理描述对象返回给所述客户端;
代理描述对象子模块,用于从其内部获得EJB服务器端的JVM标识,从 JVM标识管理器对象中获得所述客户端的JVM标识,并比较所述EJB服务器 端的JVM标识和所述客户端的JVM标识是否一致,当比较结果为是时,通知 所述本地调用处理模块,当比较结果为否时,通知所述远程调用处理模块。
技术领域\n本发明涉及计算机应用领域,尤其涉及一种对客户端调用远程接口访问 EJB进行处理的方法和装置。\n背景技术\nEJB(企业Java组件)客户端可以调用远程接口或者本地接口来访问 EJB,EJB容器负责创建和管理EJB。EJB客户端在调用远程接口和本地接口 时EJB容器的处理方式不一样。\nEJB客户端对本地接口的调用只有在EJB客户端和EJB容器运行在同一个 JVM(Java虚拟机)时才使用。在这种情况下,EJB容器处理本地调用就像 处理普通的Java方法调用一样。这种处理方式能够有效地提升EJB容器的性 能。\nEJB客户端对远程接口的调用被视为远程调用,在这种情况下,不管 EJB客户端是否与EJB在同一个JVM中,一系列的远程调用处理将被执行, 这些处理通常包括通过底层的ORB(对象请求代理)将本次调用路由到特定 的EJB容器、对输入参数和返回参数的编解码和查找合适的服务器来处理本 次请求等等。如果EJB客户端与EJB在同一个JVM中,对输入参数和输出参 数的编解码等处理不是必须的。\n上述现有技术中的EJB客户端在调用远程接口和本地接口时EJB容器的 处理方法的缺点为:\nWeb客户端是EJB应用的常用客户端,并且web客户端与EJB应用通常处 在同一个JVM中。此时,web客户端对EJB的调用仍然会被视为远程调用, EJB容器仍然要执行一些不必要的协议相关的操作,从而导致web客户端对 EJB的远程调用的性能十分低。\nJDK(JaVa开发工具包)提供的CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)方案支持对同一个JVM中的 EJB客户端调用进行优化。该JDK CORBA实现使用CORBA接口来区分EJB 客户端调用是否与服务器端EJB调用处于同一JVM,当EJB客户端调用与服 务器端EJB调用处于同一JVM时,对该同一JVM中的EJB客户端调用进行优 化。\n在实现本发明的过程中,发明人发现上述JDK提供的CORBA方案至少存 在如下技术问题:当在一个JVM中运行了多个ORB,EJB客户端使用了不同 的ORB,并且这些不同的ORB与服务器端EJB调用处于同一个JVM之中时, 该方法的优化效果将失效。在这种情形下,尽管EJB客户端与服务端EJB调 用处于同一个JVM之中,EJB客户端对服务端EJB应用的调用仍然会被视为 远程调用,EJB容器仍然要执行一些不必要的协议相关的操作,从而导致 EJB客户端对服务端EJB的远程调用的性能比较低下。\n发明内容\n本发明的实施例的目的是提供一种对客户端调用远程接口访问EJB进行 处理的方法和装置,以便可以解决EJB客户端对服务端EJB的远程调用的性 能比较低下的问题。\n本发明实施例的目的是通过以下技术方案实现的:\n一种对客户端调用远程接口访问企业Java组件EJB进行处理的方法,包括 以下步骤:\nA、当客户端调用远程接口对企业Java组件EJB进行访问时,所述客户端 通过代理描述对象获得EJB服务器端的Java虚拟机JVM标识和客户端的JVM 标识,所述JVM标识为JVM的指定通用唯一标识UUID,确定所述EJB服务器 端的JVM标识与所述客户端的JVM标识一致;\nB、所述企业Java组件EJB使用本地调用处理对象来处理所述客户端对所 述EJB的访问。\n所述步骤A具体包括:\n当客户端调用远程接口通过命名服务访问所述EJB时,所述命名服务实体 将代理描述对象实体返回给所述客户端;\n所述代理描述对象实体从其内部获得EJB服务器端的JVM标识,并根据所 述EJB服务器端的JVM标识,从JVM标识管理器对象中获得所述客户端的 JVM标识;\n所述代理描述对象实体确定所述EJB服务器端的JVM标识和所述客户端的 JVM标识一致。\n所述步骤A之前还包括:\nEJB容器创建代理描述对象实体,并将该代理描述对象实体绑定到命名服 务实体上;\n为所述EJB服务器端使用的Java虚拟机JVM指定通用唯一标识UUID,并 将该UUID设置在所述代理描述对象实体中。\n所述的步骤B具体包括:\n所述客户端创建包含本地调用处理对象的EJB组件的代理对象,当客户端 调用所述代理对象时,所述代理对象委托其包含的本地调用处理对象来处理 所述客户端对所述EJB的访问,所述EJB为与所述客户端处于同一个JVM中 的EJB。\n一种对客户端调用远程接口访问企业Java组件EJB进行处理的方法,包括 以下步骤:\nC、当客户端调用远程接口对企业Java组件EJB进行访问时,比较EJB服 务器端的JVM标识与客户端的JVM标识是否一致,当EJB服务器端的JVM标 识与客户端的JVM标识一致时,则转至步骤D;否则,则转至步骤E;\nD、所述企业Java组件EJB使用本地调用处理对象来处理所述客户端对所 述EJB的访问;\nE、所述EJB使用远程调用处理对象来处理所述客户端对所述EJB的访 问。\n所述步骤E具体包括:\n所述客户端创建包含远程调用处理对象的EJB组件的代理对象,当客户 端调用所述代理对象时,所述代理对象委托其包含的远程调用处理对象来处 理所述客户端对所述EJB的访问,所述EJB为与所述客户端不是处于同一个 JVM中的EJB。\n一种对客户端调用远程接口访问EJB进行处理的装置,包括:JVM确定 模块和本地调用处理模块;其中,\n所述JVM确定模块,用于当客户端调用远程接口对EJB进行访问时,通 过代理描述对象获得EJB服务器端的JVM标识和客户端的JVM标识,所述 JVM标识为JVM的指定UUID;确定所述EJB服务器端的JVM标识与所述客户 端的JVM标识是否一致;\n所述本地调用处理模块,用于当所述JVM确定模块确定所述EJB服务器 端的JVM标识与所述客户端的JVM标识一致时,使用本地调用处理对象来处 理所述客户端对所述EJB的访问,所述EJB为与所述客户端处于同一个JVM 中的EJB。\n所述装置还包括:\n远程调用处理模块,用于当所述JVM确定模块确定所述EJB服务器端的 JVM标识与所述客户端的JVM标识不一致时,使用远程调用处理对象来处理 所述客户端对所述EJB的访问,所述EJB为与所述客户端不是处于同一个 JVM中的EJB。\n所述JVM确定模块包括:\n命名服务子模块,用于接收客户端调用远程接口访问所述EJB的信号,将 预先创建的代理描述对象返回给所述客户端;\n代理描述对象子模块,用于从其内部获得EJB服务器端的JVM标识,从 JVM标识管理器对象中获得所述客户端的JVM标识,并比较所述EJB服务器 端的JVM标识和所述客户端的JVM标识是否一致,当比较结果为是时,通知 所述本地调用处理模块,当比较结果为否时,通知所述远程调用处理模块。\n由上述本发明实施例提供的技术方案可以看出,本发明实施例通过使用本 地调用处理对象来处理处于同一JVM中的客户端使用远程接口访问EJB的过 程,从而可以大大提高客户端调用远程接口访问EJB的耗时等性能,并且不 会产生协议相关的操作。使用本发明实施例能够为用户节约硬件成本。\n附图说明\n图1为本发明实施例所述方法的处理流程图;\n图2为以直接Java方法调用的方式将EJB客户端对本地接口的调用传递给 EJB容器的示意图;\n图3为本发明实施例所述方法的一个具体应用实例的处理流程示意图;\n图4为本发明实施例所述的装置的结构示意图。\n具体实施方式\n本发明实施例提供了一种对客户端调用远程接口访问EJB进行处理的方 法和装置,使用本地调用处理对象来处理处于同一JVM中的客户端使用远程 接口访问EJB的过程。\n下面结合附图来详细描述本发明实施例,本发明实施例所述方法的处理 流程如图1所示,包括如下步骤:\n步骤1-1、EJB容器创建代理描述对象,并把代理描述对象绑定到命名服 务上。\n当一个EJB部署完成后,EJB容器会创建相应的代理描述对象,并把该 代理描述对象绑定到命名服务上。代理描述对象是代理对象的包装对象,包 含EJB对象能够提供的服务的相关信息,能够用来帮助生成代理对象。代理 对象持有用于处理所有方法调用的调用处理对象的引用。\n如果一个EJB同时具有远程接口和本地接口,则EJB容器将分别创建两 个代理描述对象并分别绑定到相应的命名服务上。上述两个代理描述对象中 的一个代理描述对象包含了处理远程调用的远程调用处理对象,另外一个代 理描述对象包含了处理本地调用的本地调用处理对象。\n上述远程调用处理对象和本地调用处理对象中包含普通对象,EJB客户 端通过该普通对象能访问EJB容器创建的已部署的EJB对象。如图2所示,所 有的EJB客户端对本地接口的调用以直接Java方法调用的方式传递给EJB容 器。\n步骤1-2、当EJB客户端调用远程接口时,判断代理对象中包含的JVM标 识和客户端的本地JVM标识是否一致;如果是,则执行步骤1-3;否则,执行 步骤1-4。\n当一个EJB部署完成后,系统要为EJB服务器端使用的JVM指定一个唯 一的UUID(通用唯一标识)。该UUID是个16位的字符串,根据系统的网卡 地址和时间戳采用通用唯一标识算法生成,该算法可以为多个系统的JVM实 例或同一个系统的多个JVM实例生成唯一的UUID,该UUID设置在代理对象 中的调用处理对象中。\n代理对象中包含一个调用处理对象,客户端通过代理对象来使用调用处 理对象。如果让客户端直接使用调用处理对象,客户端就要分辨到底是远程 调用处理对象还是本地调用处理对象。代理对象能够屏蔽客户端对远程调用 处理对象或本地调用处理对象的感知。而且代理对象含有所有EJB组件的业 务方法,能够让客户端觉得使用EJB对象(不论是远程调用,还是本地调 用)就跟使用本地对象一样。\n当客户端调用远程接口,通过命名服务来查找EJB时,绑定在命名服务 中的代理描述对象被转换为代理对象,该代理对象将获取调用处理对象中设 置的上述JVM标识对应的UUID。然后,判断该UUID和客户端的本地JVM标 识是否一致,如果是,则执行步骤1-3;否则,执行步骤1-4。上述客户端的 本地JVM标识用于标识客户端,即客户端的UUID,该标识是用UUID算法生 成,由JVM标识管理器产生和维护。\n步骤1-3、通过本地调用处理对象处理本次客户端对远程接口的调用。\n当上述UUID和本地JVM标识是一致时,则说明本次客户端对远程接口的 调用发生在同一个JVM中,本发明将这种情况下的远程调用称为远程-本地调 用,于是,上述代理对象委托其包含的上述本地调用处理对象来处理本次远 程-本地调用。\n步骤1-4、通过远程调用处理对象处理本次客户端对远程接口的调用。\n当上述UUID和本地JVM标识不一致时,则说明本次客户端对远程接口的 调用不是发生在同一个JVM中,于是,上述代理对象委托其包含的上述远程 调用处理对象来处理本次客户端对远程接口的调用。\n上述客户端包括:web客户端,或者使用了EJB组件提供的服务的java应 用程序。\n本发明实施例所述方法的一个具体应用实例的处理流程如图3所示,包括 如下步骤:\n31、客户应用程序根据指定的JNDI(Java命名和目录接口)名称向客户 端侧的CORBA客户端查找EJB对象。\n32、CORBA客户端向命名服务查找EJB对象。\n33、命名服务将代理描述对象返回给CORBA客户端。代理描述对象是 EJB对象的描述对象,CORBA客户端通过该代理描述对象得到服务端的JVM 标识,即服务端的UUID。\n34、CORBA客户端从代理描述值工厂读取Proxy对象,代理描述值工厂 用于代理描述对象从服务端读取相应的代理描述值。\n35、代理描述值工厂从代理描述对象中读取EJB对象的类名。\n36、代理描述对象从JVM标识管理器对象中取得客户端的本地JVM标 识,即客户端的UUID,该本地JVM标识由JVM标识管理器产生和维护。\n37、代理描述对象检查上述服务端的JVM标识跟本地JVM标识是否一 致。\n38、如果上述服务端的JVM标识跟本地JVM标识一致,代表客户端和服 务端处于同一个JVM之中,于是,EJB容器创建本地调用处理对象。\n39、如果上述服务端的JVM标识跟本地JVM标识不一致,代表客户端和 服务端处于不同的JVM之中,于是,EJB容器创建远程调用处理对象。\n310、代理描述值工厂从代理描述中取得相应的调用处理对象。\n311、代理描述值工厂创建代理对象,该代理对象是EJB对象的代理对 象,它包含了调用处理对象。\n312、代理描述值工厂将创建的代理对象返回给CORBA客户端。\n313、CORBA客户端将接收到的代理对象返回给客户应用程序。\n314、客户应用程序调用EJB对象提供的服务。代理对象会接管这次调 用。\n315、当上述EJB容器创建的是远程本地调用时,代理对象会委托本地调 用处理对象接管这次调用。\n316、上述本地调用处理对象调用EJB容器来取得结果。\n317、EJB容器将调用结果返回给本地调用处理对象。\n318、本地调用处理对象将调用结果返回给代理对象。\n319、代理对象将调用结果返回给客户端应用程序。\n根据上述本发明实施例所述方法的处理流程,本发明使用从服务端发送 过来的UUID来区分客户端调用是否跟服务端处在同一JVM之中,因为JVM标 识是唯一的,不管客户端是否使用相同的ORB或者不同的ORB,都会被视为 远程-本地调用。\n在远程-本地调用的情形下,JDK CORBA实现依赖ORB,但是本发明不 依赖ORB,不使用CORBA接口;JDK CORBA实现需要将存根置于环境变量 之中,但是本发明不需要将stubs置于环境变量之中。\nJDK CORBA实现使用CORBA服务器来操作EJB,伺服器将调用路由到 创建了EJB对象的容器上。本发明直接调用容器来执行操作。因此,相比 JDK CORBA,本发明的性能更好。\n本发明实施例所述对客户端调用远程接口访问EJB进行处理的装置的结 构示意图如图4所示,包括如下模块:\nJVM确定模块,用于确定所述EJB服务器端的JVM标识与所述客户端的 JVM标识一致,表示所述客户端和所述EJB运行于同一个JVM中,包括:命 名服务子模块和代理描述对象子模块;\n本地调用处理模块,用于使用本地调用处理对象来处理所述客户端对所 述EJB的访问,所述EJB为经所述JVM确认模块确认的和所述客户端处于同 一个JVM中的EJB。\n远程调用处理模块,用于使用远程调用处理对象来处理所述客户端对所 述EJB的访问,所述EJB为和所述客户端不是处于同一个JVM中的EJB。\n上述JVM确定模块中的命名服务子模块,用于接收客户端调用远程接口访 问所述EJB的信号,将预先创建的代理描述对象返回给所述客户端;\n上述JVM确定模块中的代理描述对象子模块,用于从其内部获得EJB服 务器端的JVM标识,从JVM标识管理器对象中获得所述客户端的JVM标识, 并比较所述EJB服务器端的JVM标识和所述客户端的JVM标识是否一致,当 比较结果为是时,通知所述本地调用处理模块,当比较结果为否时,通知所 述远程调用处理模块。\n应用本发明实施例所述方法和装置后,可以对EJB的远程调用进行优 化,有效地提高EJB的远程调用的性能。应用本发明实施例所述方法之前和 之后,EJB的远程调用的一个具体应用实例的性能对比示意表如下述表1所 示:\n表1:\n\n\n\n\n在上述具体应用实例中,如上述表1所示,本发明所述远程-本地调用的性 能比现有的远程调用的性能提高了10倍。\n以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻 易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的 保护范围应该以权利要求的保护范围为准。
法律信息
- 2018-12-21
未缴年费专利权终止
IPC(主分类): G06F 9/46
专利号: ZL 200610167382.2
申请日: 2006.12.31
授权公告日: 2008.10.22
- 2017-10-17
专利权的转移
登记生效日: 2017.09.22
专利权人由华为技术有限公司变更为张晓红
地址由518129 广东省深圳市龙岗区坂田华为总部办公楼变更为457000 河南省濮阳市华龙区胡村乡坟抬头村6组
- 2008-10-22
- 2007-09-05
- 2007-07-11
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-06-21
|
2005-12-14
| | |
2
| |
2005-01-05
|
2004-02-23
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |