【问题标题】:Performance impact on invoking remote ejb in Wildfly10在 Wildfly10 中调用远程 ejb 的性能影响
【发布时间】:2018-01-28 01:38:05
【问题描述】:

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

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 上运行。

【问题讨论】:

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


    【解决方案1】:

    您正在为本地和远程访问执行 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 中,因此不需要对对象进行序列化/反序列化。因此,本地存根在运行时方面更高效,因为调用 EJB 就像调用 JVM 中任何其他对象的方法一样。

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

    【讨论】:

    • 这意味着我正在使用 java:global/MyEjb/ 意味着我正在本地访问??如果我没有在 Context 中传递任何属性,那么它会说 name not found
    • 还有如何区分 java:global/...,java:module 和 java:app
    • 如果添加 contextPropertiesL.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");到传递给上下文的属性,然后它将使用 ejb 客户端上下文工厂和 URL 前缀 ejb:/.
    • global, module 和 app 是不同的命名上下文,即 global 用于完整的 JVM,module 仅用于 JEE 模块,app 仅用于 jar。
    • 现在对于本地调用,我已经从 Context 中删除了所有属性并使用 java:global/MyEjb/ 它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多