Как программно привязать пользовательский объект jndi к jboss 7.1? Context.bind выдает исключение, указывающее, что контекст jndi доступен только для чтения. Это вообще возможно?
jboss 7.1 привязка jndi программно
Ответы (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
И registerInJndi() должен вызываться в сервлете с load-on-startup = 0 (и, возможно, из службы запуска ejb). Здесь мы можем редактировать jndi без исключения.
- person user2889981; 06.02.2014