Java 使用JNDI配置EJB:NameNotFoundException

Java 使用JNDI配置EJB:NameNotFoundException,java,jakarta-ee,jndi,wildfly-8,Java,Jakarta Ee,Jndi,Wildfly 8,我有以下结构 MyProject.ear (module name) MyProjectEar |----- lib |----- META-INF |----- MyProject.war |----- MyProject.jar (module name) MyProject 在MyProject.jar,我有几个ejb,包括一个mypackages.MyProject.ejb.impl.ConfigManager(它在mypackages.MyProject.e

我有以下结构

MyProject.ear  (module name) MyProjectEar
   |----- lib
   |----- META-INF
   |----- MyProject.war
   |----- MyProject.jar (module name) MyProject
在MyProject.jar,我有几个ejb,包括一个
mypackages.MyProject.ejb.impl.ConfigManager
(它在
mypackages.MyProject.ejb.local.ConfigManagerLocal中有一个本地接口)

ConfigManager

@Singleton
@Startup
public class GestorConfiguracion implements GestorConfiguracionLocal {

  @PostConstruct
  private void init() {
    Context ctx = null;
    try {
      ctx = new InitialContext();
      ctx = (Context) ctx.lookup("java:comp");
    } catch (Exception e) {
      return;
    }
    try {
      String jndiEnv = (String) ctx.lookup("myProject/srv/environment");
    } catch (Exception e) {
      log.log(Level.WARNING, "Exception in jndienv", e);
    }
    try {
      appVersion = (String) ctx.lookup("myProject/buildVersion"));
    } catch (Exception e) {
      log.log(Level.WARNING, "Exception in buildversion", e);
    }
myProject/srv/environment
是服务器的本地版本(因此在EAR构建之间不会更改),因此它在
standalone.xml
中设置,如下所示

<subsystem xmlns="urn:jboss:domain:naming:2.0">
  <bindings>
    <simple name="java:/env/myProject/srv/environment" value="DEV"/>
  </bindings>
  <remote-naming/>
</subsystem>
我只得到了
javax.naming.NameNotFoundException
,其中包含以下消息:

  • 服务jboss.naming.context.java.comp.MyProjectEar.MyProject.ConfigManager.MyProject.buildVersion

  • 服务jboss.naming.context.java.comp.MyProjectEar.MyProject.ConfigManager.MyProject.srv.environment


结果是我看错了背景

  • 如果
    env条目
    resource ref
    标记了ejb项目中ejb-jar.xml中的位置,我将在
    java:comp/env/
    (v.g.
    java:comp/env/myProject/buildVersion
    java:comp/env/myProject/srv/environment
    )中找到它们;我需要将第一次查找更改为
    ctx=(Context)ctx.lookup(“java:comp/env”)

  • 如果
    env条目
    resource ref
    标记了EAR项目中application.xml中的位置,我将在
    java:app/env/
    中找到它们(例如,
    java:app/env/myProject/buildVersion
    java:app/env/myProject/srv/environment
    );我需要将第一次查找更改为
    ctx=(Context)ctx.lookup(“java:app/env”)

<env-entry>
  <env-entry-name>myProject/buildVersion</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>0.0.1</env-entry-value>
</env-entry>

<resource-ref>
  <res-ref-name>myProject/srv/environment</res-ref-name>
  <res-type>java.lang.String</res-type>
  <lookup-name>java:/env/myProject/srv/environment</lookup-name>
</resource-ref>