之所以收到上述错误,是因为您尝试使用绝对JNDI名称访问远程EJB。
如文档所述:
在 HTTP的远程处理 客户端假设在远程查找JNDI名称是相对于java的:JBoss的/导出的命名空间,绝对JNDI名称的查询将失败。
因此,在将应用程序部署到WildFly上之后,应该在服务器控制台上看到类似以下内容:
JNDI bindings for session bean named NewSessionBean in deployment unit deployment <your_deployment_unit> are as follows: java:global[/<application_name>]/<module_name>/<ejb_name>[!<interface_name>] java:app[/<module_name>]/<ejb_name>[!<interface_name>] java:module/<ejb_name>[!<interface_name>] java:jboss/exported[/<application_name>]/<module_name>/<ejb_name>[!<interface_name>] java:global/[/<application_name>]/<module_name>/<ejb_name> java:app[/<module_name>]/<ejb_name> java:module/<ejb_name>
因此,考虑到 java:jboss / exported 上下文,获得EJB的正确方法应该是:
// Normally the appName is the EAR name// Leave it empty if your application isn't packaged in a EARString appName = "your_application_name/";// The EJB module nameString moduleName = "ejb_module_name/";String beanName = NewSessionBean.class.getSimpleName();String viewClassName = NewSessionBeanRemote.class.getName();(NewSessionBeanRemote) context.lookup(appName + moduleName + beanName + "!" + viewClassName);
为了进一步阅读,我建议您也看看Java EE JNDI语法以及WildFly的JNDI参考。
关于您的凭证,由于您的EJB不需要任何类型的身份验证即可访问它们,因此它们不是必需的。通常,仅在例如拥有使用LDAP服务提供商的应用程序时才需要这样做。



