【发布时间】: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