Я должен признать, что я не знаком с ANT и не написал большую часть кода ниже с нуля. То, что я пытаюсь сделать, это перебрать список имен файлов, который сохраняется в файле, разделенном запятыми. Код выполняется нормально до 1400-го имени файла. Для каждого имени файла он вызывает процедуру Java, которая выполняет запрос, чтобы получить файл PDF и сохранить его локально. Я полагал, что это может быть недостаточно памяти, потому что соединение, которое открывается в процедуре Java, не закрыто, но я подтвердил, что это так. Поэтому я думаю, что это связано с тем, что список имен файлов слишком велик. Любые идеи о том, как бороться с большими списками?
Ошибка, которую я получаю после 1400-й итерации, - java.lang.OutOfMemoryError: невозможно создать новый собственный поток
Спасибо.
<for list="${filenames}" delimiter="," param="filename">
<sequential>
<propertyregex override="yes" property="trimmedname" input="@{filename}" regexp="[\s]*([^\s].*[^\s])[\s]*" replace="\1"/>
<if>
<and>
<length string="${trimmedname}" trim="true" when="greater" length="0" />
<not><equals arg1="${trimmedname}" arg2="$${filenames}" /></not>
</and>
<then>
<java classname="LOBExtract" failonerror="true" fork="true" maxmemory="512m">
<arg value="DBSERVER=${server_name}"/>
<arg value="DBPORT=${oracle_port}"/>
<arg value="DBSID=${oracle_sid}"/>
<arg value="DBUSER=${dbuser}"/>
<arg value="DBPASSWORD=${dbpassword}"/>
<arg value="TABLE=BLOB_DATA"/>
<arg value="LOBFIELD=BLOB_DATA"/>
<arg value="WHERE=blob_id=${trimmedname}"/>
<arg value="FILENAME=${output_dir}/aircraft/esig/files/${trimmedname}.pdf"/>
<classpath>
<pathelement location="."/>
<pathelement path="${basedir}"/>
<pathelement path="${basedir}/resource/ojdbc14.jar"/>
</classpath>
</java>
</then>
</if>
</sequential>
</for>