2010-04-28 9 views
1

J'utilise struts 2 et j'aimerais lire quelques paramètres personnalisés (variables globales), de préférence à partir de web.xml ou de certains fichiers ".properties" personnalisés (c'est-à-dire non codés en dur dans les sources Java). Ce problème m'a rendu fou pour la dernière demi-heure car je ne peux pas google n'importe quelle solution raisonnable.struts 2 - où dois-je définir les variables d'application globales?

Quelle est la meilleure façon de faire cela? Je trouve étrange qu'il est si difficile ...

le meilleur

Nicola Montecchio

Répondre

0

Demandez-vous d'abord: sont ces constantes vraiment pertinentes pour Struts2 ou tout simplement à votre demande ? Si le plus tard, ce n'est pas vraiment une question de Struts2, et que vous ne voulez pas que vous ayez besoin de la gestion de constantes Struts2 (ou web.xml), ils devraient être accessibles depuis votre code d'application en dehors de la webapp (par exemple, à partir d'un code de test).

Je comprends que vous vous sentez mal à « harcoding » constantes dans certains (par exemple) Constantes classe (avec des champs statiques) finaux, mais sachez que cela pourrait ne pas être pratique si mal -si elles sont vraiment constantes, peu probable être changé indépendamment de votre code java. Ça vaut le coup de penser.

Sinon, vous pourriez avoir besoin de classe ConstantsManager, ce qui pourrait être un objet sans état singleton (ou une sorte d'objet « Service »), qui sait comment charger les constantes, par exemple de certains fichier de propriétés dans le classpath. Comment les objets de votre application (y compris peut-être une action Struts2) obtiennent-ils une référence à cette instance de ConstantsManager? Dans l'implémentation la plus simple (et la plus sale), vous auriez une implémentation de modèle Singleton avec une méthode getInstance() statique. Plus flexible et à la mode est la façon DI/IOC, peut-être avec un conteneur de haricots, comme le printemps; et Struts2 est bien adapté pour jouer avec that. Et si vous n'êtes pas familier avec ces concepts, ils apparaîtront sûrement bientôt, pour des problèmes similaires (mais moins trivial) que l'accès à certaines constantes.

+0

Vous soulevez des points intéressants. Il y a deux catégories de paramètres que j'ai besoin d'ajuster dans mon application (une démo pour un logiciel d'identification de musique basé sur le contenu): les paramètres d'algorithme (maths) et les paramètres de démo web (par ex.quel répertoire utiliser pour le traitement des fichiers téléchargés). J'ai fini par stocker ce dernier dans un fichier .properties que je charge avec InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); J'ai toujours le sentiment que c'est assez inélégant. Je vais regarder dans vos suggestions, merci pour votre réponse –

1

Il y a quelques façons de le faire.

+0

merci pour votre réponse - J'ai regardé le lien constant-configuration.html, mais comment puis-je accéder aux paires clé/valeur de Java? –