2010-06-16 17 views
1

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?

Répondre

1

Les informations sur le port sont stockées sur JBoss en tant que propriété MBean. Le problème est que pour lire cette propriété vous avez besoin d'un accès à MBeans, qui nécessite le numéro de port ...

Je pense que la seule façon d'obtenir ce numéro de port est de lire le fichier de configuration lui-même et extraire le numéro de port. Ce n'est pas très élégant, vous pouvez donc préférer créer un fichier web.xml pour votre servlet et y stocker le numéro de port.

Vous pouvez également utiliser l'invocateur HTTP JBoss, qui achemine les requêtes au port 1099 via le port 8080 (port HTTP par défaut). Notez toutefois que vous devez sécuriser ce connecteur. Dans ce cas, le port sera toujours le même que votre port HTTP.

+0

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. –