ejb查找失败,出现NamingException

时间:2009-09-24 20:23:36

标签: java ejb jndi

我在web.xml中添加了以下内容:

<ejb-ref>
        <ejb-ref-name>ejb/userManagerBean</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>gha.ywk.name.entry.ejb.usermanager.UserManagerHome</home>
        <remote>what should go here??</remote>
</ejb-ref>

以下java代码给我NamingException:

public UserManager getUserManager () throws HUDException {
    String ROLE_JNDI_NAME = "ejb/userManagerBean";
    try {
        Properties props = System.getProperties();
        Context ctx = new InitialContext(props);
        UserManagerHome userHome = (UserManagerHome) ctx.lookup(ROLE_JNDI_NAME);
        UserManager userManager = userHome.create();
        WASSSecurity user = userManager.getUserProfile("user101", null);
        return userManager;
    } catch (NamingException e) {
        log.error("Error Occured while getting EJB UserManager" + e);
        return null;
    } catch (RemoteException ex) {
        log.error("Error Occured while getting EJB UserManager" + ex);
        return null;
    } catch (CreateException ex) {
        log.error("Error Occured while getting EJB UserManager" + ex);
        return null;
    }
}

代码在容器内使用。我的意思是.WAR部署在服务器(Sun Application Server)上。

StackTrace(在jsight的建议之后):

>Exception occurred in target VM: com.sun.enterprise.naming.java.javaURLContext.<init>(Ljava/util/Hashtable;Lcom/sun/enterprise/naming/NamingManagerImpl;)V 
java.lang.NoSuchMethodError: com.sun.enterprise.naming.java.javaURLContext.<init>(Ljava/util/Hashtable;Lcom/sun/enterprise/naming/NamingManagerImpl;)V
 at com.sun.enterprise.naming.java.javaURLContextFactory.getObjectInstance(javaURLContextFactory.java:32)
 at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:584)
 at javax.naming.spi.NamingManager.getURLContext(NamingManager.java:533)
 at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:279)
 at javax.naming.InitialContext.lookup(InitialContext.java:351)
 at gov.hud.pih.eiv.web.EjbClient.EjbClient.getUserManager(EjbClient.java:34)

4 个答案:

答案 0 :(得分:36)

答案 1 :(得分:1)

也许查找字符串实际应该是:“java:comp / env / ejb / userManagerBean”?

答案 2 :(得分:1)

首先,修复您的web.xml并在其中添加远程接口:

<ejb-ref>
  <description>Sample EJB</description>
  <ejb-ref-name>SampleBean</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <home>com.SampleHome</home>
  <remote>com.Sample</remote> <!-- the remote interface goes here -->
</ejb-ref>

然后,关于java.lang.NoSuchMethodError,Sean是对的,您在NetBeans中使用的应用服务器“客户端库”版本与应用服务器版本(服务器端)之间存在不匹配。我无法确切地告诉您需要对齐哪些JAR,请参阅Sun Application Server文档。

PS:这不是问题的直接答案,但我不认为您在使用调用System.getProperties()的结果创建初始上下文时,当前正在传递任何有用的属性,没有任何帮助在这些属性中定义上下文的环境(例如初始上下文工厂)。有关详细信息,请参阅InitialContext javadoc。

答案 3 :(得分:1)

最后两个答案都是正确的,因为它们是您需要更改/修复的内容。但是你看到的NoSuchMethodError不是来自你的代码,也不是来自试图找到你的代码的东西(会产生某种NoClassDefFoundException,我认为是这样的)。这看起来更像是容器提供的JNDI提供程序的不兼容版本,以及Java库中的JNDI实现需要什么。这是一个非常模糊的答案,但是,可以想象它可以通过升级您的应用程序服务器来解决,并且确保您没有在您的应用程序中部署与JNDI相关的可能过时的基础结构类副本,这可能会产生干扰。