使用 Jboss 和 Wildfly 9.x 运行 java EE 项目时出错

Error while runing java EE project with Jboss and Wildfly 9.x

我在运行我的项目时出错,它已正确部署,但我有这个错误

javax.naming.NoInitialContextException:需要在环境或系统属性中指定class名称,或作为小程序参数,或在应用程序资源文件中:java.naming.factory.initial 在 javax.naming.spi.NamingManager.getInitialContext(来源不明)

这是我的主要代码:

try {
        Context context = new InitialContext();
        UserServicesRemote userservicesremote = (UserServicesRemote) context.lookup("behealthy-ear/behealthy-ejb/UserServices!services.UserServicesRemote");
    } catch (NamingException e) {
        e.printStackTrace();
    }

我的规范地址是真实的:

此异常 (NamingException) 表示服务名称不正确。部署服务器后,您可以在日志中看到已部署服务的名称。例如:

java:global/backend-ear/backend-ejb/UserBOEJB!org.backend.bo.UserBOLocal
java:app/backend-ejb/UserBOEJB!org.backend.bo.UserBOLocal
java:module/UserBOEJB!org.backend.bo.UserBOLocal
java:global/backend-ear/backend-ejb/UserBOEJB
java:app/backend-ejb/UserBOEJB
java:module/UserBOEJB

您可以使用日志的第一行(全局)进行查找。

建议: 也许您应该将 jboss-client.jar 添加到您的客户端环境中。 ../bin/client/

错误不是来自实际查找,而是无法正确初始化 JNDI 系统。

如果您有独立客户端,则需要添加一个文件 jndi.properties,如下所示:

java.naming.factory.url.pkgs=org.jboss.ejb.client.naming

和文件 jboss-ejb-client.properties 如下所示:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

您必须将 jboss-client.jar 添加到类路径并在 ejb:-namespace 中使用正确的 JNDI 名称,而不是 java:-namespace 中的名称从日志文件。它看起来像这样:

ejb:backend-ear/backend-ejb/UserBOEJB!org.backend.bo.UserBOLocal