JNDI 没有可用于处理的 EJB 接收器

2024-01-11

我的 EJBTest 有问题。

我已经安装了WildFly并配置了用户管理和应用程序管理。

我编写了一个 EJB 3.0 并部署了它:

@Stateless
@Remote(NewSessionBeanRemote.class)
public class NewSessionBean implements NewSessionBeanRemote {

    List<String> bookShielf;

    /**
     * Default constructor. 
     */
    public NewSessionBean() {
        bookShielf = new ArrayList<String>();
    }

    @Override
    public void addBook(String bookName) {
        bookShielf.add(bookName);
    }

    @Override
    public List getBook() {
        return bookShielf;
    }
}

后来我写了一个简单的客户端来连接它:

private static void invokeStatelessBean() throws NamingException {
    // Let's lookup the remote stateless calculator
    NewSessionBeanRemote remoteEjb = lookupRemoteSessionBean();
    System.out.println("Obtained a remote stateless calculator for invocation");
    String bookName = "TEST book";
    remoteEjb.addBook(bookName);
}

private static NewSessionBeanRemote lookupRemoteSessionBean() throws NamingException {

    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
    jndiProperties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:10090");
    jndiProperties.put(Context.SECURITY_PRINCIPAL, "ejb"); //this is the application user name, not management! it's correct?
    jndiProperties.put(Context.SECURITY_CREDENTIALS, "ejb");//this is the application password, not management! it's correct?
    jndiProperties.put("jboss.naming.client.ejb.context", true);
    final Context context = new InitialContext(jndiProperties);
    final String appName = "";
    final String moduleName = "EjbComponent";
    final String distinctName = "";
    final String beanName = NewSessionBean.class.getSimpleName();
    final String viewClassName = NewSessionBeanRemote.class.getName();
    System.out.println("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
    return (NewSessionBeanRemote) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
}

用户名和密码都是应用程序的用户凭证,不是管理的!这是对的吗?

我收到此错误:

线程“main”中的异常 java.lang.IllegalStateException: EJBCLIENT000025: 没有 EJB 接收器可用于处理调用上下文 org.jboss.ejb.client.EJBClientIn VocationContext@5034c75a 的 [appName:, moduleName:EjbComponent,distinctName:] 组合 在org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798) 在 org.jboss.ejb.client.ReceiverInterceptor.handleInitation(ReceiverInterceptor.java:128) 在 org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocalContext.java:186) 在 org.jboss.ejb.client.EJBInvocalHandler.sendRequestWithPossibleRetries(EJBInvocalHandler.java:255) 在 org.jboss.ejb.client.EJBInvocalHandler.doInvoke(EJBInvocalHandler.java:200) 在 org.jboss.ejb.client.EJBInvocalHandler.doInvoke(EJBInvocalHandler.java:183) 在 org.jboss.ejb.client.EJBIncationHandler.invoke(EJBIncationHandler.java:146) 在 com.sun.proxy.$Proxy2.addBook(来源未知) 在 com.studio.java.client.EjbTester.invokeStatelessBean(EjbTester.java:34) 在 com.studio.java.client.EjbTester.main(EjbTester.java:21)

我不知道为什么!有人有主意吗?


您收到上述错误是因为您尝试使用绝对 JNDI 名称访问远程 EJB。

正如所指出的文档 https://docs.jboss.org/author/display/WFLY10/Remote+JNDI+Reference+Update+Draft:

The http 远程处理客户端假设远程查找中的 JNDI 名称相对于 java:jboss/exported 命名空间,则绝对 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/导出根据上下文,获得 EJB 的正确方法应该是:

// Normally the appName is the EAR name
// Leave it empty if your application isn't packaged in a EAR
String appName = "your_application_name/";
// The EJB module name
String moduleName = "ejb_module_name/";
String beanName = NewSessionBean.class.getSimpleName();
String viewClassName = NewSessionBeanRemote.class.getName();

(NewSessionBeanRemote) context.lookup(appName + moduleName + beanName + "!" + viewClassName);

为了进一步阅读,我建议您还看一下Java EE JNDI 语法 https://docs.oracle.com/javaee/7/tutorial/ejb-intro004.htm#GIPJF以及WildFly 的 JNDI 参考 https://docs.jboss.org/author/display/WFLY10/JNDI+Reference.

至于您的凭据,它们不是必需的,因为您的 EJB 不需要任何类型的身份验证即可访问它。通常,只有当您拥有一个使用LDAP 服务提供商 http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ldap.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNDI 没有可用于处理的 EJB 接收器 的相关文章

随机推荐

  • 纯 WebGL 虚线

    我正在尝试使用纯 webgl 创建一条虚线 我知道已经有一个问题了 也许我很蠢 但我不知道如何让它发挥作用 我理解这个概念 但我不知道如何获取着色器中沿路径的距离 之前的答案有以下一行 varying float LengthSoFar l
  • 为什么结构体和可变结构体具有不同的默认相等运算符?

    我有以下代码 julia gt struct Point x y end julia gt Point 1 2 Point 1 2 true julia gt mutable struct Points x y end julia gt P
  • 如何获取谷歌地图标记上的双击事件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在我的应用程序中 我显示具有多个标记的谷歌地图 因为我有点击事件和获取信息窗口 但是我需要的是 当我双击标记时 应该显示包含有关该标记
  • 尝试连接到 .onion 站点时 Python 请求失败

    我正在尝试获取托管在 tor 网络中的网页 我正在使用以下代码 import requests def get tor session session requests session session proxies http socks5
  • CSS,自动调整div大小?

    我正在尝试用 css 设计一种布局 我有一个主容器 div 和两个内部容器 div upper 和 div lower 假设我想调整 div upper 和 div lower 的大小 它们会自动调整自身大小 并且两个 div 仍然适合主容
  • Azure Linux 应用服务:从 DevOps 管道部署后安装包

    我目前正在 Azure Devops 中设置 CI CD 管道 以在 Linux 托管应用程序服务 而不是 VM 上部署 NodeJS 应用程序 我的构建和部署都很顺利 但我需要确保在部署应用程序后在环境中安装一些软件包 问题是 无论如何a
  • 为什么人们使用 #ifdef 进行功能标志测试?

    People 推荐 ifdef条件编译大幅提高 https stackoverflow com q 21256252 103167 A 搜索 ifdef https stackoverflow com search q 23ifdef证实其
  • 以编程方式安装 Windows 服务

    如何在不使用 installutil exe 的情况下以编程方式安装 Windows 服务 您可以通过添加此代码 在程序文件 Program cs 中 来安装该服务 以便在使用指定参数从命令行运行时自行安装
  • 具有 openid 连接重定向的反向代理

    在我的应用程序中我集成了Identity server 3 with openid connect 在我们的生产服务器上 我们的网站位于反向代理后面 这会导致问题 当用户登录并被身份服务器重定向回来时 我们的应用程序希望将用户重定向到他的原
  • 如何在 JavaScript 中获取 css3 翻译后元素的位置?

    我在 stackoverflow 上看到了以两种不同形式发布的内容 但这些解决方案对我不起作用 本质上 我有一个要翻译的项目 当我执行 obj style left 或 obj offsetLeft 时 在元素被翻译后 我得到 0 无论如何
  • Docker:容器与本地安装

    在周末第一次使用 Docker 并看到 irssi mutt 浏览器等所有内容的小图像之后 我想知道本地安装的软件包是否正在为数十个容器让路 我可以看到保持基本系统非常干净以及拥有所有这些容器都是独立的并且可以轻松地重新定位到不同桌面 甚至
  • 将 pandas join 中的列后缀转换为 MultiIndex

    我有两个 pandas DataFrame 它们具有 不一定 相同的索引和列名称 gt gt gt df L pd DataFrame X 1 3 Y 5 7 gt gt gt df R pd DataFrame X 2 4 Y 6 8 我
  • 如果未安装应用程序,如何从深层链接重定向到应用程序商店?

    我希望用户能够通过 Facebook 等共享链接 例如 app com SKFLA 这主要是因为深层链接本身不可点击 单击时 会重定向到深层链接应用程序 SKFLA 如果安装了该应用程序 则会打开该应用程序 到目前为止一切正常 但如果该应用
  • Javascript / CSS:设置(firefox)iframe 的缩放级别?

    我想创建一个包含多个显示不同页面的 iframe 的页面 一种 并排浏览多个页面 类型的东西 问题是这样做时 视口非常小 我只能看到每个页面的左上角 有没有办法设置 iframe 来有效地执行 Firefox 的缩小 ctrl 减号 几次
  • 如何在Java中向文件写入换行符

    我有一个包含新行的字符串 我将此字符串发送到一个函数 以将字符串写入文本文件 如下所示 public static void writeResult String writeFileName String text try FileWrit
  • 按等级排列的 FindBugs 2.0 错误列表?

    我知道有list http findbugs sourceforge net bugDescriptions html错误 但我想要一个包含有关排名 版本 2 0 中为 1 到 20 或至少有关排名组 令人担忧 令人不安 可怕 最可怕 的附
  • 在SecurityManager下创建对象时出现NoClassDefFoundError

    我试图通过在非常严格的 SecurityManager 下运行处理用户提供的内容的代码来保护我的应用程序 它是 AccessController doPrivileged 的本质 通常这用于提供具有额外权限的代码块 但我使用它来将代码块限制
  • Spring Boot 日志中缺少应用程序名称

    例如 人们通常会得到这样的内容 my service id 是应用程序名称 2016 02 11 17 12 45 404 INFO my service id 85184 nio 8080 exec 1 com example MySim
  • SQL Server 2014 合并重叠的日期范围

    我在 SQL Server 2014 数据库中有一个包含 200 000 行的表 如下所示 CREATE TABLE DateRanges Contract VARCHAR 8 Sector VARCHAR 8 StartDate DATE
  • JNDI 没有可用于处理的 EJB 接收器

    我的 EJBTest 有问题 我已经安装了WildFly并配置了用户管理和应用程序管理 我编写了一个 EJB 3 0 并部署了它 Stateless Remote NewSessionBeanRemote class public clas