【问题标题】:Handling multiple jndi configurations with EJBs and RMI使用 EJB 和 RMI 处理多个 jndi 配置
【发布时间】:2013-05-03 14:20:16
【问题描述】:

我的应用程序使用 JNDI 访问本地 EJB,并通过 RMI 访问远程服务。目前这是通过以下方式处理的:

public MyLocalEJB getMyLocalEJB(){
    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"));
    env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
    env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"));

    InitialContext ctx = new InitialContext(environment);
    return (MyLocalEJB)ctx.lookup("MyEar/MyBean/local");
}

public RemoteServiceInterface getRemoveService(){
    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.ApplicationClientInitialContextFactory"));
    env.put(Context.PROVIDER_URL, "ormi://server:port/APPNAME");
    env.put(Context.SECURITY_PRINCIPAL, "user");
    env.put(Context.SECURITY_CREDENTIALS, "secret");

    InitialContext ctx = new InitialContext(environment);
    return (RemoteServiceInterface)ctx.lookup("ejb/service/RemoteService");
}

这似乎会带来一些问题,因为 Context.PROVIDER_URL 会覆盖 java.naming.provider.url,这会导致时间问题,因为来回更改属性。例如,当 Hibernate Sessionfactory 获取 RMI 提供程序 url 而不是本地时,会抛出提供程序 url 错误的警告,并且 JBoss 在关闭时抛出多个关于 jndi 绑定的异常。

我了解到您可以指定多个提供程序 URL,因此我在这两种方法中都尝试了以下方法:

env.put(Context.PROVIDER_URL, "jnp://localhost:1099,ormi://server:port/APPNAME");

这消除了错误,但仍然感觉很糟糕,因为其他一些参数会根据最后调用的方法不断变化(例如,在访问本地 ejb 时不应使用用户名/密码)。

我认为这个实现的核心有问题 - 应该如何正确完成?

【问题讨论】:

    标签: rmi jndi jboss5.x


    【解决方案1】:

    我不认为这是您的问题的原因。两个 InitialContexts 都有不同的环境,它们都做不同的事情。您是否也在其他地方设置了 java.naming.provider.url ?信息似乎不完整。

    您需要在 finally 块中关闭这些上下文。

    【讨论】:

    • 但是 initialcontexts 共享环境,如果我使用提供程序 url 创建一个新的 InitialContext,它将把全局环境设置为这个值,直到我创建一个新的来覆盖它。这会导致在未指定提供程序 url 且假定为默认值的情况下使用出现问题。我自己不会修改环境变量 java.naming.provider.url。然而,它在另一个类的 LDAP 调用中使用,但我认为这与这里无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多