私は、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>