Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 远程EJB3调用_Java_Ejb 3.0 - Fatal编程技术网

Java 远程EJB3调用

Java 远程EJB3调用,java,ejb-3.0,Java,Ejb 3.0,从同一应用服务器进行的远程EJB调用是否始终优化为本地内存调用,并且在这种情况下是否跳过数据序列化 换句话说,即使两个+EJB模块部署在同一个容器中,也可以始终使用远程EJB,从而实现应用程序组件之间的解耦,这是否有效?我用的是玻璃鱼 另外,如果我必须在运行时查找远程EJB(直到运行时我才知道EJB的JNDI名称),那么在应用服务器提供的现有EJB基础设施上使用尽可能少的开销来缓存调用的最佳方法是什么(因此,没有像Guice这样的附加库,Glassfish已经提供了这种库).远程服务的参数语义与

从同一应用服务器进行的远程EJB调用是否始终优化为本地内存调用,并且在这种情况下是否跳过数据序列化

换句话说,即使两个+EJB模块部署在同一个容器中,也可以始终使用远程EJB,从而实现应用程序组件之间的解耦,这是否有效?我用的是玻璃鱼


另外,如果我必须在运行时查找远程EJB(直到运行时我才知道EJB的JNDI名称),那么在应用服务器提供的现有EJB基础设施上使用尽可能少的开销来缓存调用的最佳方法是什么(因此,没有像Guice这样的附加库,Glassfish已经提供了这种库).

远程服务的参数语义与本地服务的参数语义不同。远程服务由于其序列化行为,实际上具有按值传递语义(即复制参数),而本地服务是标准的java按引用传递。这不仅仅是性能方面的考虑,它改变了参数的含义


正因为如此,我认为容器不能像优化本地EJB接口一样优化对远程EJB接口的调用。

好吧,我不明白为什么容器不能优化对远程EJB接口的“本地”调用,事实上,我想我在Glassfish文档的某个地方读过它。容器中不需要花费太多的脑力就可以解决这个问题,跳过序列化部分,改为使用passbyref。这似乎很自然。问题背景:我有一个非常不耦合的JEE系统,它在运行时根据需要实例化EJB(通过从数据库读取它们的描述),并且它仍然需要非常快。因此,您可以在运行时添加EJB,应用程序的运行时“引擎”将在需要时运行它。容器不能为了性能而改变这些语义,它会改变它的含义。实际上,即使您在同一位置的EJB模块中使用远程接口,您似乎也可以告诉容器按ref传递。本地EJB接口仅在同一个应用程序中可用,而不是在同一个应用程序服务器中。没错。因此,如果您希望解耦应用程序的各个部分,即使模块与位于同一位置,您仍然需要使用远程EJB,我看不到其他方法。