依赖注入:Jetty 7

时间:2009-11-10 17:39:47

标签: java spring dependency-injection jetty embedded-jetty

我的应用程序需要多个接口实现,这需要Jetty服务器才能完成工作。但是,在这些接口的每个实现中都不一定如此,因此Jetty服务器只是依赖项。

由于将整个jetty服务器及其所有日志记录,连接器和Handler配置包装起来会带来巨大的痛苦,我想用Spring注入服务器到那些实现。我决定注入Server类不是一个好主意,因为即使在另一个位置需要服务器,实现也可能会停止服务器。目前,我向这些实现注入空HandlerList类,并注册其处理程序以避免这些问题。

问题:这些处理程序可能会干扰其他处理程序,例如:实现可能会为/ foo注册一个处理程序,而实现两个也是......问题。有没有人在这样的环境中使用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.CreateHandlerListFactoryorg.springframework.beans.factory.FactoryBean的{​​{1}},在给定的HandlerList内创建新的HandlerList

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

1 个答案:

答案 0 :(得分:0)

我有一些可能的建议:

添加org.eclipse.jetty.servlet.ServletHandler而不是Jetty特定的处理程序,而是映射标准Servlet。您可以通过逐个添加它们(每个包装在ServletHolder中)或使用setServlets(ServletHolder []持有者)来设置ServletHandler的Servlet。 ServletMappings的设置类似。

您可以将ServletHandler注入每个接口实现,以允许它们添加其映射的servlet,或集中创建ServletHolders和ServletMappings数组,从而通过控制每个接口实现的路径来防止重复路径。后者还允许至少根据标准Servlet API对接口实现进行编程,使得大部分代码独立于Jetty。