#jboss #jndi
Вопрос:
Доброе утро. Мне нужно глубокое объяснение. У меня есть много экземпляров eap jboss, в которых я развернул одно и то же приложение ear, каждый экземпляр считывает данные из своего собственного источника данных. Из одного экземпляра мне нужно подключиться к другим экземплярам jboss для чтения данных из их отдельной базы данных. Я использую jndi для поиска необходимого ejb следующим образом:
public static Context initInterface(String adresse, String port)
throws NamingException, Exception {
String file = System.getProperty("jboss.server.data.dir") File.separator "configuration" File.separator
"config.properties";
System.out.println(file);
Properties config = new Properties();
try {
config.load(new FileInputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
JMSProps props = new JMSProps();
props.setHost(adresse);
props.setPort(Integer.parseInt(port));
System.out.println(config.get("local.username"));
props.setUsername((String) config.get("local.username"));
System.out.println(config.get("local.password"));
props.setPassword((String) config.get("local.password"));
return getContext(props);
//return (T) context.lookup(jndiName);
}
public static Context getContext(JMSProps jmsProps) throws NamingException {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
props.put(Context.PROVIDER_URL,
String.format("%s://%s:%d", "remote http", jmsProps.getHost(), jmsProps.getPort()));
props.put(Context.SECURITY_PRINCIPAL, jmsProps.getUsername());
props.put(Context.SECURITY_CREDENTIALS, jmsProps.getPassword());
props.put("org.jboss.ejb.client.scoped.context", "true");
return new InitialContext(props);
}
Когда я пытаюсь подключиться к двум разным контекстам, я замечаю, что первый открытый контекст всегда возвращается.
Context context;
context = MonetiqueUtil.initInterface("192.168.1.2",
"8087");
coreBean = (ICoreBean) context.lookup(TraitementBeanImpl.CORE_JNDI_NAME);
ageALT = coreBean.findById(Agences.class, "00001");
context.close();
context = MonetiqueUtil.initInterface("localhost",
"8080");
coreBean = (ICoreBean) context.lookup(TraitementBeanImpl.CORE_JNDI_NAME);
ageALT = coreBean.findById(Agences.class, "002");
context.close();
Любой вклад был бы полезен