現在、ブラウザからCSVファイルをインポートし、このファイルに含まれるデータをデータベースに転送するプロジェクトに取り組んでいます。
私が書いたコードは小さなファイルでは問題なく動作しますが、アプリケーションは大きなファイル(200MB以上)では動作しないことがわかりました。
import.xhtml:
...
<t:panelGrid columns="2" styleClass="table_layout center" columnClasses="col_label,col_input">
<t:outputLabel for="importFile" styleClass="required" value="#{messages.import_file}" />
<t:inputFileUpload id="importFile" value="#{imports.csv}" required="true" />
<t:panelGroup colspan="2" styleClass="center">
<t:commandButton action="#{imports.import}" value="#{messages.import_action_import}" disabled="#{imports.state}" reRender="pnl" />
</t:panelGroup>
</t:panelGrid>
...
ImportBean.java
public String import() throws IOException {
System.out.println("Entering import()");
...
if (csv != null) {
fileInputStream = csv.getInputStream();
}
final InputStream fileInputStreamF = fileInputStream;
Runnable r = new Runnable() {
public void run() {
System.out.println("Entering run()");
try {
System.out.println("Before entering importService.import(InputStream)");
importService.import(fileInputStreamF);
} catch (MyException e) {
...
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
System.out.println("Before running Thread");
Thread thread = new Thread(r);
}
したがって、小さなファイルをアップロードしようとすると、コンソールに次のように表示されます。
Entering import()
Before running Thread
Entering run()
Before entering importService.import(InputStream)
しかし、大きなファイルをアップロードしようとすると、コンソールにはまったく何も表示されません。つまりImportBean.import()
、呼び出されていないことを意味します(私は信じています)。
このプロジェクトでは、Java 5、JSF 1.1、Tomcat 5を使用しています。Tomcatで構成する必要があるものがあると思いますが、よくわかりません。
何か案は?
編集: Tomcat server.xmlで0に設定しようとしましmaxPostSize
たが、何も実行されないようです。パケットアナライザー(Wireshark)を使用したところ、ファイルが約1分間アップロードされ、その後停止したようです。そして、それが停止しても、コンソールにはまだ何もありません...