在Wildfly10中调用远程ejb的性能影响

时间:2017-08-19 13:52:55

标签: ejb wildfly ejb-3.0 wildfly-8 wildfly-10

我已在域模式

中部署了如下所示的应用程序
MyWebApp.war ---> which has web tier
MyEjb.jar --> which has all ejbs
service.jar --> from where ejb is invoked

两者都以域模式部署。

并在调用时使用

java:global/MyEjb/...

这有效,但我想知道它在同一台服务器上部署时的性能影响。 如果我想以本地方式访问它,还需要改变什么。

如果我使用java:app/MyEjb/..访问它,则无法找到该bean。

而且, 如果我从同一台服务器调用ejb并使用下面的代码

Hashtable Props = new Hashtable();
Props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.as.naming.InitialContextFactory");
Props.put(Context.PROVIDER_URL, "remote://localhost:4447");
Props.put("jboss.naming.client.ejb.context", Boolean.valueOf(true));

为什么在这种情况下使用“远程”? 还有其他方式可以在本地打电话吗?

我的目标是在本地调用ejb,因为一切都在同一个JVM上运行。

1 个答案:

答案 0 :(得分:1)

您正在进行本地和远程访问的JNDI查找。您传递给Context的字符串定义了这是否是远程本地查找(以及传递给Context的属性)。

对于远程查找,您的名称将以ejb:...开头(例如here所述)。此外,您通过传递Context等属性来创建"org.jboss.ejb.client.naming"的实例,该属性表示上下文工厂所在的Java包:

Properties contextProperties = new Properties();
contextPropertiesL.put( Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(contextProperties);

如果您的名字以java:...开头,则会在本地查找。本地意味着在同一个JVM中,因此不必对象进行序列化/反序列化。因此,本地存根在运行时方面更有效,因为EJB的调用就像调用JVM中任何其他对象的方法一样。

只有在您想要进行远程查找时,才需要传递给Context的属性。