1

私のアプリケーションには、Jetty サーバーを必要とするいくつかのインターフェイスの実装が必要です。ただし、これらのインターフェースのすべての実装で必ずしもそうであるとは限らないため、Jetty サーバーは依存関係にすぎません。

Jetty サーバー全体をすべてのロギング、コネクター、およびハンドラー構成でラップするのは非常に面倒なので、Spring を使用してこれらの実装にサーバーを注入したいと考えています。別の場所でサーバーが必要な場合でも、実装によってサーバーが停止する可能性があるため、Server クラスを注入することはお勧めできません。現在、これらの実装に空のHandlerListクラスを注入し、それらの問題を回避するためにハンドラーを登録しています。

問題: これらのハンドラーは他のハンドラーと干渉する可能性があります。そのような環境で 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" />

空が必要な場合は、指定された 内に新しいを作成する aのHandlerListようなものを使用します。com.example.myapp.util.ioc.CreateHandlerListFactoryorg.springframework.beans.factory.FactoryBeanHandlerListHandlerList

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

1 に答える 1

0

私はいくつかの可能な提案があります:

org.eclipse.jetty.servlet.ServletHandlerを追加し、Jetty固有のハンドラーの代わりに、代わりに標準のサーブレットをマップします。サーブレットハンドラのサーブレットは、1つずつ追加する(それぞれがServletHolderでラップされる)か、setServlets(ServletHolder []ホルダー)を使用して設定できます。ServletMappingsも同様に設定されます。

ServletHandlerを各インターフェース実装に注入して、マップされたサーブレットを追加したり、ServletHoldersとServletMappingsの配列を一元的に作成したりできます。これにより、各インターフェース実装からパスの制御を維持することで、パスの重複を防ぐこともできます。後者を使用すると、少なくともインターフェイスの実装を標準のサーブレットAPIに対してプログラムできるようになり、コードの大部分がJettyから独立したものになります。

于 2009-11-26T20:27:00.537 に答える