2

私は、JBoss 5 インストールを JBoss 6.1.0.Alpha に更新するという骨の折れるプロセスの最後尾にいます。この問題は、JBoss 5 インストールには存在しません。

バージョン:

  • 春 3.2.3.RELEASE
  • JBoss EAP 6.1.0.Alpha1 (AS7.2.0.Alpha1-redhat-4)
  • mod_proxy を使用する Apache 2.2

コントローラー階層は、依然として古いorg.springframework.web.servlet.mvc.SimpleFormControllerコントローラーをベース コントローラーとして使用しています。

大量のフォーム データ セット (テーブルの 326 行) を送信すると、コントローラーに表示されるドメイン オブジェクト (MVC マーシャリングによって再水和される) が切り捨てられ、すべてが表示されるわけではありません。デバッガーと結果の部分的に更新された画面に見られるように。

すべてのデータは、投稿内のフォーム データに表示される Chrome で見ることができますContent-Type:application/x-www-form-urlencoded

しかしサーバー側では投稿されたデータからSpring Web MVCが作成したオブジェクトが246付近でストップ。

これは「パス内のドットのバグ」ではないように見えることに注意してください。この設定を無駄に追加しました:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false" />
</bean>

データに異常がある場合に備えて、カットオフが発生する場所 (243 から 249) の両側のいくつかのアイテムを削除しようとしましたが、それでもコントローラーに到着するアイテムは ~246 になります。

JBoss HTTP コネクタは、最大 100mb、さらには 1 回の投稿で 1000mb まで許可するように構成されています (投稿されるデータよりもはるかに大きい)。

私の疑いでは、これは Spring 構成の問題ですが、ドキュメントを掘り下げたところ、問題が解決しました。

編集:

Spring MVC は無実のようです。Eclipse を使用して、実行時にコール スタックを掘り下げて、リクエストを確認できる最初の呼び出しを見つけました。

リクエストによるスタック内の最初の呼び出し

次にrequest変数を選択 -> 右クリック -> 詳細フォーマッタの編集...

以下を使用してこのコードを追加しましSystem.outた (デバッグ UI への出力は Eclipse によって切り捨てられるため):

java.util.Enumeration paramNames = getParameterNames();
    while (paramNames.hasMoreElements()) {
    System.out.println(paramNames.nextElement());
}

Requestオブジェクトが持っているすべてのパラメータを出力します。

案の定、「選択された」属性 (この画面に影響を与えるには、フォームの各行を選択する必要があります) は 245 で停止します (ここで出力を並べ替えました)。

itemSearchFilter.results[244].selected
itemSearchFilter.results[245].selected
itemSearchFilter.results[24].selected
itemSearchFilter.results[25].selected

したがって、これは Apache と JBoss の間の構成の問題のように見えます。私の知る限り、Spring はまだこのRequestインスタンスとやり取りする機会がなかったからです (上記のコール スタックからは確かにそうは見えません)。 .

ここmod_proxyにApacheからの設定がありますhttp.conf

<IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyVia On
    ProxyPass /a-mgt http://localhost:8080/a-mgt
    ProxyPassReverse /a-mgt http://localhost:8080/a-mgt
</IfModule>

JBoss の HTTP コネクタ設定は次のとおりです。standalone-full.xml

    <subsystem xmlns="urn:jboss:domain:web:1.4" default-virtual-server="default-host" native="false">
        <configuration>
            <jsp-configuration development="true" check-interval="1"
                            modification-test-interval="1" recompile-on-fail="true"/>
        </configuration>
        <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"
                            max-post-size="1048576000" max-save-post-size="0" max-connections="1000"/>
        <virtual-server name="default-host" enable-welcome-root="true">
            <alias name="localhost"/>
        </virtual-server>
    </subsystem>

   <subsystem xmlns="urn:jboss:domain:threads:1.1">
        <bounded-queue-thread-pool name="http-executor">
            <core-threads count="100"/>
            <queue-length count="10"/>
            <max-threads count="1000"/>
            <keepalive-time time="20" unit="seconds"/>
        </bounded-queue-thread-pool>
    </subsystem>

    <socket-binding-group name="standard-sockets"
                    default-interface="public"
                    port-offset="${jboss.socket.binding.port-offset:0}">
            <socket-binding name="http" port="8080"/>
    </socket-binding-group>
4

1 に答える 1

0

JBoss HTTP コネクタで使用される HTTP パラメータの数には制限があることがわかりました。イライラすることに、私が質問に入れた XML スニペットを介して設定することはできません。

standalong-full.xml代わりに、システム プロパティとして追加する必要があります。

...
</extensions>

<system-properties>
    <property name="org.apache.tomcat.util.http.Parameters.MAX_COUNT" value="5000"/>
</system-properties>

<management>
...

なぜそれがHTTPコネクタから設定できないのか、少なくともそこに文書化されていないのですか...

この JBoss Community threadで解決策を見つけました。

于 2013-10-16T13:12:29.943 に答える