2010-09-16 2 views
4

Я написал специальный клапан Tomcat. (Я использую Tomcat 6.0.24 и Java 1.6) Вот XML элемент, где я объявляю свой клапан:Конфигурация пользовательского клапана Tomcat

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

Когда я положил это заявление внутри принимающего элемента Server.xml в. Tomcat вызывает метод setFoo() на моем клапане со значением «bar». Это то, что я хочу.

Однако, когда я помещаю эту же декларацию в META-INF/context.xml моего webapp, внутри элемента Context Tomcat загружает клапан, и клапан работает нормально. Но Tomcat никогда не вызывает метод setFoo(), чтобы предоставить значение «bar», которое требуется клапану.

Я не понимаю, почему Tomcat правильно конфигурирует клапан, указанный в файле server.xml, но не в контексте .xml.

Кто-нибудь знает, как я могу заставить Tomcat правильно настроить мой клапан, когда он объявлен в моем метафоре META-INF/context.xml?

Спасибо, Dan

Это вызывает мой клапан для загрузки и быть правильно настроен на сервере Tomcat:

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

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

Это вызывает мой клапан для загрузки, но Tomcat не даст ему параметр конфигурации " бар ":

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

ответ

3

Это мое исследованное предположение. Может быть, ваш Valve связан с контейнером Host?

Является ли ваш пользовательский клапан непосредственно подклассом org.apache.catalina.valves.ValveBase ? Если это так, это должно сработать.

Вы можете попробовать и распечатать getContainer() на своем клапане из обоих настроек, чтобы убедиться, что он правильно идентифицирует, какой из Catalina containers (Engine, Host, Context) он настроен каждый раз.

Некоторые клапаны, такие как SingleSignOn, привязаны к контейнеру, как Host, что означает, что он не будет работать на других. Это применимо и к подклассам Valves.

0

SetPropertiesRule, как часть запуска, попытается найти геттеры для ваших пользовательских свойств.