【问题标题】:How to connect to WebSphere in J2EE client environment?如何在 J2EE 客户端环境中连接到 WebSphere?
【发布时间】:2014-02-05 09:16:48
【问题描述】:

我正在尝试连接到 WebSphere 7.0 上的 EJB。 EJB 需要javax.ejb.SessionContext 并从中读取 Principal,所以我需要在调用它之前登录。

我在独立应用程序中使用以下代码:

import javax.naming.InitialContext;
import javax.security.auth.login.LoginContext;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;

 public static void main(String[] args) throws Exception {
    InitialContext ic = new InitialContext(System.getProperties());
    LoginContext lc = new LoginContext("WSLogin",
        new WSCallbackHandlerImpl("myuser","mypass"));
    lc.login();
    WSSubject.setRunAsSubject(lc.getSubject());
    SessionContext sessionContext=(SessionContext) ic.lookup(
        "java:comp/env/sessionContext");
}

我已将条目添加到我的jmxremote.access

我的用户读写

但是,我得到了一个例外:

引起:javax.naming.ConfigurationException:命名空间访问器 对于 java: 名称空间尚未设置。可能的原因是 用户在 JNDI 上下文方法调用中指定 java: URL 名称,但 不在 J2EE 客户端或服务器环境中运行。在 com.ibm.ws.naming.java.javaURLContextFactory.isNameSpaceAccessable(javaURLContextFactory.java:98) 在 com.ibm.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.java:82) 在 javax.naming.spi.NamingManager.getURLObject(NamingManager.java:584) 在 javax.naming.spi.NamingManager.getURLContext(NamingManager.java:533) 在 javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:320) 在 javax.naming.InitialContext.lookup(InitialContext.java:392)

我还应该做什么,在错误消息中提到的“J2EE 客户端环境”中运行我的代码?

【问题讨论】:

  • 基本上这只是说“您的配置不正确,修复它”的一种复杂方式。问题是:您要在哪里运行此代码?在普通的旧 Java 应用程序中还是在 JEE 容器中?
  • @Gimby 在 POJA,查看更新
  • 好的,那么您需要弄清楚如何从客户端应用程序正确连接到 Websphere。我不知道,因为我不使用它,如果您使用的是 JBoss,我只能为您提供帮助。我所知道的是,互联网上到处都是错误的方法,您需要尝试来自不同来源的示例才能找到真正有效的示例:/
  • 我认为您应该坚持原来的问题,而不是发布扩展的重复版本。 IBM WAS 有大量文档顺便说一句。

标签: java jakarta-ee ejb websphere


【解决方案1】:

为了使用java:comp,您需要将客户端应用程序打包在一个.ear 中并使用launchClient。最终,这只是使用 -CCBootstrapHost/-CCBootstrapPort (或默认值)连接到目标服务器以查找 EJB,因此您可以只使用 EJB 瘦客户端并改用完全限定的 EJB 绑定名称(请参阅@ SystemOut.log 中的 987654323@ 消息)。

【讨论】:

    【解决方案2】:

    您需要使用 WAS 客户端运行时 JAR。 WAS_HOME/AppServer/运行时。您将需要 ORB 和其他特定于服务的 JAR。作为使用 launchClient 的替代方法,您可以在此处手动指定要使用的上下文工厂:

    InitialContext ic = new InitialContext(System.getProperties());
    

    设置

    java.naming.factory.initial

    变量(在您的系统环境或属性对象中)到

    com.ibm.websphere.naming.WsnInitialContextFactory`

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多