Моему приложению требуется несколько реализаций интерфейса, для выполнения которых требуется сервер Jetty. Это, однако, не обязательно имеет место во всех реализациях этих интерфейсов, поэтому сервер Jetty является только зависимостью.
Поскольку было бы очень сложно обернуть весь сервер Jetty со всеми его конфигурациями регистрации, соединителя и обработчика, я хочу внедрить сервер в эти реализации с помощью Spring. Я решил, что внедрение класса Server не является хорошей идеей, потому что реализация может остановить сервер, даже если он требуется в другом месте. В настоящее время я внедряю в эти реализации пустые HandlerList
классы, и они регистрируют свои обработчики, чтобы избежать этих проблем.
Проблема: Эти обработчики могут мешать другим обработчикам, например: реализация 1 может зарегистрировать обработчик для / foo и реализация 2 тоже ... проблема. Кто-нибудь использовал Jetty в такой среде? И как решить эту проблему?
Мой XML, чтобы прояснить мою проблему:
<bean id="jetty" class="org.eclipse.jetty.server.Server" destroy-method="stop">
<property name="connectors">
<list>
<bean class="org.eclipse.jetty.server.bio.SocketConnector">
<property name="host" value="10.8.0.46" />
<property name="port" value="9999" />
</bean>
</list>
</property>
<property name="handler">
<bean class="org.eclipse.jetty.server.handler.HandlerCollection">
<property name="handlers">
<list>
<ref bean="jetty.handlerList" />
<bean class="org.eclipse.jetty.server.handler.RequestLogHandler">
<property name="requestLog">
<bean class="org.eclipse.jetty.server.NCSARequestLog">
<constructor-arg value="${jetty.logfile}" />
<property name="extended" value="false"/>
</bean>
</property>
</bean>
</list>
</property>
</bean>
</property>
<property name="sendServerVersion" value="false" />
</bean>
<bean id="jetty.handlerList" class="org.eclipse.jetty.server.handler.HandlerList" />
Если мне требуется пустой HandlerList
, я использую что-то вроде этого, где com.example.myapp.util.ioc.CreateHandlerListFactory
- это org.springframework.beans.factory.FactoryBean
, который создает новый HandlerList
в данном HandlerList
.
<constructor-arg>
<bean class="com.example.myapp.util.ioc.CreateHandlerListFactory">
<constructor-arg ref="jetty.handlerList"/>
</bean>
</constructor-arg>