2014-10-06 2 views
0

я иметь следующую структуруИспользование JNDI для настройки EJBs: NameNotFoundException

MyProject.ear (module name) MyProjectEar 
    |----- lib 
    |----- META-INF 
    |----- MyProject.war 
    |----- MyProject.jar (module name) MyProject 

В MyProject.jar У меня есть несколько EJBs, в том числе 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-value к env-entry.

Я попробовал два approachs:

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

ответ

0

Кончилось в том, что я смотрел на неверном контексте.

  • Если env-entry и resource-ref теги где-jar.xml EJB в проекте EJB, я найти их в java:comp/env/ (В.Г., java:comp/env/myProject/buildVersion и java:comp/env/myProject/srv/environment); Мне нужно изменить первый поиск в ctx = (Context) ctx.lookup("java:comp/env");

  • , если env-entry и resource-ref тегов, где в application.xml в проекте EAR, я найти их в java:app/env/ (В.Г., java:app/env/myProject/buildVersion и java:app/env/myProject/srv/environment); Мне нужно было изменить первый поиск до ctx = (Context) ctx.lookup("java:app/env");

Смежные вопросы