2009-10-07 7 views
1

J'ai besoin d'accéder à certains fichiers sur les serveurs de servlet. Ils ont des chemins différents sur ma machine de développement et sur le serveur de déploiement. Je voudrais mettre un fichier de configuration (avec des chemins) quelque part (comme shared dir dans le déploiement capistrano) afin que l'application puisse le lire. Ou peut-être définir une propriété sur le serveur d'application ou quelque chose comme ça. Je peux utiliser Tomcat, Jetty ou Glassfish.Comment utiliser un fichier de configuration pour le servlet Java EE?

Actuellement, j'ai fait un fichier de configuration dans WEB-INF avec config pour la machine locale. Le script de déploiement qui copie .war sur le serveur, modifie le fichier war en y incluant le fichier de configuration du serveur. Cela fonctionne, mais n'est pas très agréable, et si quelque chose change avec les chemins sur le serveur, je devrais changer le fichier local et redéployer l'application.

Pouvez-vous suggérer une meilleure solution?

Répondre

2

Il y a quelques questions similaires ici dans SO. This est celui que j'ai trouvé, je me souviens qu'il y en a plus.

Quoi qu'il en soit, ce link de la réponse ci-dessus pourrait être utile.

Un résumé de vos options sont:

  • Si vous avez une base de données, y stocker vos options.
  • Vous pouvez également utiliser JNDI pour stocker vos propriétés directement ou le chemin du fichier de configuration.
  • Vous pouvez utiliser une variable d'environnement pour stocker le chemin du fichier de configuration.
1

La méthode habituelle consiste à configurer vos dépendances dans le conteneur de servlet et à les exposer via JNDI. Dans votre cas, exposer une chaîne avec le chemin serait probablement suffisant.

Les JNDI tutorial et Tomcat's JNDI docs devraient vous aider à démarrer. JNDI s'intègre également bien avec Spring, dans le cas où vous utilisez le conteneur Spring IOC.

1

Je suis d'accord avec kgiannakakis, mais il y a des limites à cela aussi bien - Stockage des propriétés/configurations xml dans la base de données est certainement une option mais pas toujours possible surtout si elle est une ressource non la propriété comme XML. - La recherche JNDI est la performance hit et vous ne pouvez pas stocker des xml là aussi bien - Si vous avez plusieurs copies de l'application déployé sur le même serveur, les variables d'environnement ne peuvent pas être utilisées. - Tous ci-dessus ne peut être utilisé pour faire quelque chose comme MyClass.getResourceAsStream()

.

Si la solution ci-dessus est correcte alors bon sinon vous pouvez utiliser le concept de bibliothèques partagées. Je ne suis pas sûr de la façon dont cela fonctionne avec les serveurs d'applications ci-dessus, mais ci-dessous sont des liens pour Geronimo, WASCE, IBM Websphere. Le concept est que pendant le déploiement, vous spécifiez un chemin de classe supplémentaire pour votre EAR.

Geronimo http://cwiki.apache.org/GMOxDOC21/configuring-geronimo-eclipse-plugin-to-publish-maven-dependencies-as-shared-library.html

WASCE 2.1.0 http://publib.boulder.ibm.com/wasce/V2.1.0/en/shared-library.html

IBM Websphere http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rxml_library.html

Questions connexes