J'ai une servlet s'exécutant dans JBoss (4.2.2.GA et 4.3-eap) qui doit se connecter à un EJB pour fonctionner.Recherche d'un port JNP dans JBoss à partir du servlet
En général, ce code fonctionne très bien pour que le contexte se connecte et effectue des appels RMI (tous dans le même serveur).
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);
}
Maintenant, quand je change le port de liaison JNDI de 1099 dans le serveur/conf/jboss-service.xml Je ne peux pas comprendre comment trouver le programatically providerUrl le port correct ci-dessus.
J'ai jeté System.getProperties() et System.getEnv() et il n'apparaît pas là.
Je suis assez sûr que je peux le définir dans server/conf/jndi.properties, mais j'espérais éviter un autre fichier de configuration magique.
J'ai essayé les HttpNamingContextFactory mais qui ne parvient "java.net.ProtocolException: serveur redirigé trop de fois (20)"
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory");
env.put(Context.PROVIDER_URL, "http://" + serverAddress + ":8080/invoker/JNDIFactory");
Des idées?
Piotr, merci pour la réponse. Je n'avais pas pensé à aller directement au fichier de configuration. Une idée de ce que je fais de mal avec l'invocateur HTTP au bas de ma question? Y a-t-il un fichier où je le connecte à JAAS, ou est-ce quelque chose que je dois faire dans le code? Merci encore. –