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

Performance impact on invoking remote ejb in Wildfly10

我已经在域模式下部署了如下应用程序

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));

为什么在这种情况下使用 "remote"? 还有其他方法可以本地调用吗?

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

您正在为本地和远程访问执行 JNDI 查找。您传递给 Context 的字符串定义了这是否是远程矿石本地查找(连同传递给 Context 的属性)。

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

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

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

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