我在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)
答案 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相关的可能过时的基础结构类副本,这可能会产生干扰。