2009-11-10 63 views
1

我的應用程序需要若干接口實現需要一個Jetty服務器做他們的工作。然而,在這些接口的每個實現中並不一定如此,所以Jetty服務器只是一個依賴項。依賴注入:碼頭7

因爲這將是一個巨大的痛苦的量與所有的日誌記錄,連接器和處理器配置,以包住整個碼頭的服務器,我想在服務器注入使用Spring的實現。我決定注入Server類不是一個好主意,因爲實現可能會停止服務器,即使它在其他位置需要它。目前,我爲這些實現注入了空的HandlerList類,並且註冊了它們的處理程序以避免這些問題。

的問題:這些處理可能與其它處理例如干擾:實現一個可以註冊/ foo和實施兩個由太...問題的處理程序。有沒有人在這樣的環境中使用Jetty?這個問題怎麼解決?如果我需要一個空HandlerList我用這樣的事情哪裏com.example.myapp.util.ioc.CreateHandlerListFactoryorg.springframework.beans.factory.FactoryBean它創建給定HandlerList內的新HandlerList

<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" /> 

我的XML澄清我的問題。

<constructor-arg> 
    <bean class="com.example.myapp.util.ioc.CreateHandlerListFactory"> 
     <constructor-arg ref="jetty.handlerList"/> 
    </bean> 
</constructor-arg> 

回答

0

我有幾個可能的建議:

添加org.eclipse.jetty.servlet.ServletHandler,而是碼頭特有的處理程序,而不是標準映射的Servlet。您可以通過一個接一個加入它們(各包裹在ServletHolder)或用setServlets(ServletHolder []持有人)設置的ServletHandler的Servlet的。 ServletMappings設置類似。

您可以將ServletHandler注入到每個接口實現中,讓它們添加它們映射的servlet,或集中創建ServletHolders和ServletMappings的數組,從而通過保持每個接口實現中的路徑控制來防止重複的路徑。後者還允許至少接口實現針對標準Servlet API進行編程,使大部分代碼獨立於Jetty。