2009-05-14 6 views
2

J'ai réussi à déployer un fichier .war dans le conteneur Web Jboss contenant et lu le fichier pom.properties situé sous/META-INF/groupid -dir/artifactId-dir/Est-il possible de lire un fichier de propriétés de tous les fichiers .war déployés dans un conteneur JBoss?

Pour accéder au fichier que je l'ai utilisé le code suivant dans une page JSP dans la même guerre:

ServletContext servletContext = getServletConfig().getServletContext(); 
InputStream in = servletContext.getResourceAsStream("META-INF/maven/groupid-dir/artifactid-dir/pom.properties"); 

Cela fonctionne très bien. Mais je veux être en mesure de lire dynamiquement pom.propertes de TOUS .war déployé dans le conteneur. Est-ce possible ou ai-je seulement accès au contexte du porte-guerre mon jsp?

-mb

+0

Je suis curieux de savoir pourquoi votre application doit regarder les fichiers de propriétés dont elle ne connaît pas les noms ou qui ne peuvent pas les trouver à partir d'autres données de configuration. Cela semble un peu compliqué. –

Répondre

0

Fondamentalement, votre application fonctionne sur la même machine que le conteneur JBoss, afin d'accéder aux fichiers sur le système de fichiers local devrait être possible, beaucoup de la même manière vous accédez à vos propres .properties fichier. Je ne suis pas familier avec tout ce qui devrait vous empêcher de le faire.

Si vous voulez accéder aux fichiers dans le fichier war, vous devrez utiliser le paquet java.util.zip, car les fichiers war sont bien sûr des fichiers zip normaux. Juste un rappel amical.

0

Vous aurez probablement à faire quelque chose de difficile comme passer par les MBeans JBoss. Je réalise que c'est vague, mais envisager d'examiner cette approche. Voici un lien sur la façon d'obtenir le serveur MBean à partir d'une application dans JBoss (ajouter http: //) www.jboss.org/community/wiki/FindMBeanServer (Stackoverflow m'empêche de coller un lien). J'imagine que vous pourriez trouver le Jboss Web mbean, décoller tous les mbeans de l'application web, puis demandez à chacun son classloader, puis continuez à faire ce que vous avez déjà mentionné.

0

Je ne pense pas que la lecture d'un zip ou l'utilisation d'un jboss mbean est la bonne façon. Je ne pense pas que ce soit difficile et vous étiez sur la bonne voie en utilisant ServletContext.getResourceAsStream.

Vous pouvez probablement utiliser ServletContext.getResourcePaths, mais plusieurs fois il semble, pour identifier les sous-répertoires groupid et artifactid. Quelque chose comme

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/") 
       .iterator().next()) 
    .iterator().next() + "pom.properties") 

ou

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/") 
       .iterator().next()) 
    .iterator().next() + "pom.xml") 

pour pom.xml

0

Si le fichier WAR est explosé en tant que dossier, vous devriez être en mesure d'utiliser

Chaîne basePath = getServletContext(). getRealPath ("/");

Cette approche ne fonctionne pas si le fichier WAR est en format d'archive

0

Vous ne pouvez chercher des ressources dans votre classpath actuelle. Le fonctionnement normal d'un conteneur Web consiste à créer un chemin de classe spécifique pour chaque artefact déployé sans accès aux autres artefacts déployés dans le conteneur.

Ceci est très important pour éviter l'artefact A qui utilise foo-1.0.jar pour ne pas utiliser accidentially foo-0.9.jar qui est déployé avec l'artefact B.

Par conséquent, vous aurez besoin de demander le contenant de l'aide.Cela signifie que vous devez écrire le code spécifique au conteneur pour le faire. Cela vous rendra dépendant du fournisseur - vous ne le voudrez peut-être pas.

Questions connexes