Пользовательская конфигурация клапана Tomcat - PullRequest
4 голосов
/ 16 сентября 2010

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

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

Когда я помещаю это объявление внутри элемента Host server.xml.Tomcat вызывает метод setFoo () для моего клапана со значением "bar".Это то, чего я хочу.

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

Я не понимаю, почему Tomcat правильно настраивает клапан, объявленный в server.xml, но не в context.xml.

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

Спасибо, Дэн

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

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

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

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

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

0 голосов
/ 21 ноября 2014

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

...