У меня есть сервлет, работающий в JBoss (4.2.2.GA и 4.3-eap), который должен подключиться к EJB для работы.
В целом, этот код работает нормально, чтобы заставить Context подключаться и выполнять вызовы RMI (все на одном сервере).
public class ContextFactory
{
public static final int DEFAULT_JNDI_PORT = 1099;
public static final String DEFAULT_CONTEXT_FACTORY_CLASS = "org.jnp.interfaces.NamingContextFactory";
public static final String DEFAULT_URL_PREFIXES = "org.jboss.naming:org.jnp.interfaces";
public Context createContext(String serverAddress)
{
//combine provider name and port
String providerUrl = serverAddress + ":" + DEFAULT_JNDI_PORT;
//Set properties needed for Context: factory, provider, and package prefixes.
Hashtable<String, String> env = new Hashtable<String, String>(3);
env.put(Context.INITIAL_CONTEXT_FACTORY, DEFAULT_CONTEXT_FACTORY_CLASS);
env.put(Context.PROVIDER_URL, providerUrl);
env.put(Context.URL_PKG_PREFIXES, DEFAULT_URL_PREFIXES);
return new InitialContext(env);
}
Теперь, когда я изменяю порт привязки JNDI с 1099 в server / conf / jboss-service.xml, я не могу понять, как программно найти правильный порт для providerUrl выше.
Я сбросил System.getProperties () и System.getEnv (), и он там не отображается.
Я почти уверен, что могу установить его и в server / conf / jndi.properties, но я надеялся избежать другого волшебного конфигурационного файла.
Я пробовал HttpNamingContextFactory, но это не удается "java.net.ProtocolException: сервер перенаправлен слишком много раз (20)"
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory");
env.put(Context.PROVIDER_URL, "http://" + serverAddress + ":8080/invoker/JNDIFactory");
Есть идеи?