2

私の目標は、Jetty テスト サーバーをセットアップし、カスタム サーブレットを挿入して、プロジェクト内のいくつかの REST クラスをテストすることです。spring xml を使用してサーバーを起動し、そのサーバーに対してテストを実行することができました。私が抱えている問題は、サーバーの起動後、テストを実行する前の時点でプロセスが停止することがあります。桟橋がバックグラウンドに行かなかったようです。私のコンピューターではいつでも動作します。しかし、CI サーバーにデプロイすると機能しません。また、VPN を使用しているときも機能しません。(変。)

テストがスタックしたとき、ブラウザを使用してサーバーにアクセスできたので、サーバーの初期化を完了する必要があります。

これが私の春のコンテキストxmlです: ....

<bean id="servletHolder" class="org.eclipse.jetty.servlet.ServletHolder">
    <constructor-arg ref="courseApiServlet"/>
</bean>

<bean id="servletHandler" class="org.eclipse.jetty.servlet.ServletContextHandler"/>

<!-- Adding the servlet holders to the handlers -->
<bean id="servletHandlerSetter" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="servletHandler"/>
    <property name="targetMethod" value="addServlet"/>
    <property name="arguments">
        <list>
            <ref bean="servletHolder"/>
            <value>/*</value>
        </list>
    </property>
</bean>

<bean id="httpTestServer" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop" depends-on="servletHandlerSetter">
    <property name="connectors">
        <list>
            <bean class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <property name="port" value="#{settings['webservice.server.port']}" />
            </bean>

        </list>
    </property>

    <property name="handler">
        <ref bean="servletHandler" />
    </property>
</bean>

最新の Jetty 8.1.8 サーバーと Spring 3.1.3 を実行しています。何か案が?

4

2 に答える 2

1

I figured it out. My bad. The IP address for the testing web server (jetty) that my REST client connect to is set to a internal IP address (not localhost) that only available to my local host. So that why the tests couldn't start when I'm on VPN or on CI server.

xml は実際に機能しており、別の ant タスクで jetty を開始するよりも優れていると思います。春は桟橋のライフサイクルを管理するためです。テストが終了すると、Spring は突堤を自動的にシャットダウンします。

于 2012-11-26T05:01:04.637 に答える
0

Maven を使用している場合は、ビルド プロセスの一部としてjetty-maven-pluginで Jetty を開始および停止できます。通常どおり Spring プロジェクトを作成し、プラグインを .pom ファイルに追加します。mvn jetty:run を使用すると、Web アプリをアセンブルせずに実行できます。mvn jetty:run-warを使用すると、.war ファイルを実行できます。あなたが本当に望んでいるのは、統合前のテスト段階で Jetty を開始し、統合後のテスト段階で停止することだと思います ( ref ):

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <stopKey>foo</stopKey>
    <stopPort>9999</stopPort>
  </configuration>
  <executions>
    <execution>
      <id>start-jetty</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>start</goal>
      </goals>
      <configuration>
       <scanIntervalSeconds>0</scanIntervalSeconds>
       <daemon>true</daemon>
      </configuration>
    </execution>
    <execution>
      <id>stop-jetty</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>stop</goal>
      </goals>
    </execution>
  </executions>
</plugin>   
于 2012-11-25T09:01:38.923 に答える