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

时间:2014-02-05 09:16:48

标签: java java-ee ejb websphere

我正在尝试连接 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

  
    

myuser readwrite

  

然而,我得到一个例外:

  

引起:javax.naming.ConfigurationException:名称空间访问器   对于java:名称空间尚未设置。可能的原因是   user在JNDI Context方法调用中指定了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客户端环境'中运行我的代码?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

设置

  

java.naming.factory.initial的

变量(在你的系统环境中或在一个Properties对象中)到

  

com.ibm.websphere.naming.WsnInitialContextFactory`