jboss 7.1 привязка jndi программно

Как программно привязать пользовательский объект jndi к jboss 7.1? Context.bind выдает исключение, указывающее, что контекст jndi доступен только для чтения. Это вообще возможно?


person user2889981    schedule 17.10.2013    source источник


Ответы (1)


Да вообще возможно. Следующий код работает в JBoss AS 7.1.1.Final:

@Stateless
public class JndiEjb {
    private static final Logger LOGGER = LoggerFactory.getLogger(JndiEjb.class);

    public void registerInJndi() {
        try {
            Context context = new InitialContext();
            context.bind("java:global/JndiEjb", this);
        } catch (NamingException e) {
            LOGGER.error(String.format("Failed to register bean in jndi: %s", e.getMessage()));
        }
    }

    public void retrieveFromJndi() {
        try {
            Context context = new InitialContext();
            Object lookup = context.lookup("java:global/JndiEjb");
            if(lookup != null && lookup instanceof  JndiEjb) {
                LOGGER.debug("Retrieval successful.");
                JndiEjb jndiEjb = (JndiEjb)lookup;
                jndiEjb.helloWorld();
            }
        } catch (NamingException e) {
            LOGGER.error(String.format("Failed to register bean in jndi: %s", e.getMessage()));
        }
    }

    public void helloWorld() {
        LOGGER.info("Hello world!");
    }
}

Если вы вызовете сначала registerInJndi(), а затем retrieveFromJndi(), объект будет найден и будет вызван метод helloWorld().

Дополнительную информацию можно найти здесь.

person siom    schedule 17.10.2013
comment
И registerInJndi() должен вызываться в сервлете с load-on-startup = 0 (и, возможно, из службы запуска ejb). Здесь мы можем редактировать jndi без исключения. - person user2889981; 06.02.2014