2010-09-16 4 views
4

J'ai écrit une vanne Tomcat personnalisée. (J'utilise Tomcat 6.0.24 et Java 1.6) est ici l'élément XML où je déclare ma vanne:Configuration de vanne Tomcat personnalisée

<Valve className="mypkg.MyValve" foo="bar"/> 

Quand je mets cette déclaration dans l'élément hôte de server.xml. Tomcat appelle la méthode setFoo() sur ma vanne avec la valeur "bar". C'est ce que je veux arriver.

Cependant, lorsque je mets cette même déclaration dans le fichier META-INF/context.xml de ma webapp, à l'intérieur de l'élément Context, Tomcat charge la vanne et la vanne fonctionne correctement. Mais Tomcat n'appelle jamais la méthode setFoo() pour fournir la valeur "barre" dont la vanne a besoin.

Je ne comprends pas pourquoi Tomcat configure correctement une vanne déclarée dans server.xml mais pas dans context.xml.

Est-ce que quelqu'un sait comment je peux faire en sorte que Tomcat configure correctement ma vanne lorsqu'elle est déclarée dans le fichier META-INF/context.xml de ma webapp?

Merci, Dan

Cela provoque ma vanne à charger et être correctement configuré par Tomcat:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" 
    xmlValidation="false" xmlNamespaceAware="false"> 

    <Valve className="mypkg.MyValve" foo="bar"/> 
</Host> 

Cela provoque ma vanne à charger, mais Tomcat ne lui donner le paramètre de configuration " bar ":

<Context privileged="true" > 
    <Valve className="mypkg.MyValve" foo="bar"/> 
</Context> 

Répondre

3

Ceci est ma proposition de recherche. Il se peut que votre Valve soit lié au conteneur Host? Votre vanne personnalisée est-elle directement sous-classée? org.apache.catalina.valves.ValveBase ? Si oui, cela aurait dû marcher.

Vous pouvez essayer d'imprimer le getContainer() sur votre Valve à partir de vos deux paramètres pour voir si elle identifie correctement le Catalina containers (Engine, Host, Context) qu'il est défini à chaque fois.

Certaines vannes comme SingleSignOn sont liées à un conteneur comme Host, ce qui signifie qu'elles ne fonctionneront pas sur d'autres. Cela s'appliquera également aux valves sous-classées.

0

SetPropertiesRule, dans le cadre du démarrage, tentera de trouver des accesseurs pour vos propriétés personnalisées.

Questions connexes