Java 如何在J2EE客户端环境中连接到WebSphere?

Java 如何在J2EE客户端环境中连接到WebSphere?,java,jakarta-ee,ejb,websphere,Java,Jakarta Ee,Ejb,Websphere,我正在尝试连接到WebSphere7.0上的EJB。EJB需要javax.EJB.SessionContext并从中读取主体,因此我需要在调用它之前登录 我在独立应用程序中使用以下代码: import javax.naming.InitialContext; import javax.security.auth.login.LoginContext; import com.ibm.websphere.security.auth.WSSubject; import com.ibm.webspher

我正在尝试连接到WebSphere7.0上的EJB。EJB需要
javax.EJB.SessionContext
并从中读取主体,因此我需要在调用它之前登录

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

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.GetUrlOrDefaultiniticTx(InitialContext.java:320) 在javax.naming.InitialContext.lookup(InitialContext.java:392)中


要在“J2EE客户端环境”中运行代码并在错误消息中结束,我还应该做什么?

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

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

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

java.naming.factory.initial

变量(在系统环境或属性对象中)以

com.ibm.websphere.naming.WsnInitialContextFactory`


基本上,这只是说“您的配置不正确,请修复它”的一种复杂方式。问题是:您试图在哪里运行此代码?在普通的旧Java应用程序或JEE容器中?@Gimby In POJA,请参阅updateOkay,因此您需要了解如何从客户端应用程序正确连接到Websphere。我不知道,因为我不使用它,我只能在你使用JBoss的情况下帮你。我所知道的是,互联网上充满了错误的方式,你需要尝试不同来源的例子,以找到一个真正有效的:/可能重复的我认为你应该坚持你原来的问题,而不是发布扩展的重复版本。顺便说一句,IBM WAS有大量的文档。