繁体   English   中英

使用JNDI配置EJB:NameNotFoundException

[英]Using JNDI to configure EJBs: NameNotFoundException

我有以下结构

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>

myProject/buildVersion将在每个建筑物而改变,通过添加env-entry-valueenv-entry

我尝试了两种方法:

1)将以下行添加到MyProject.ear / META-INF / application.xml中:

<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>

我只得到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-entryresource-ref标记在EJB项目的ejb-jar.xml中,则可以在java:comp/env/ (vg, java:comp/env/myProject/buildVersionjava:comp/env/myProject/srv/environment ); 我需要将第一次查找更改为ctx = (Context) ctx.lookup("java:comp/env");

  • 如果env-entryresource-ref标记在EAR项目的application.xml中,那么我将在java:app/env/ (vg, java:app/env/myProject/buildVersionjava:app/env/myProject/srv/environment ); 我需要将第一次查找更改为ctx = (Context) ctx.lookup("java:app/env");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM