Coldfusion: использование API событий Apache POI

Мне нужно разобрать большую таблицу Excel (примерно 20 листов) лист за листом с помощью ColdFusion. Тег cfspreadsheet не работает при обработке большого объема данных с помощью < em>[java.lang.OutOfMemoryError: превышен лимит накладных расходов сборщика мусора]. Пользовательский API Apache POI напрямую ведет себя так же:

<cfscript>
  pkg = CreateObject("java", "org.apache.poi.openxml4j.opc.OPCPackage").open(JavaCast("string", fileName));
  // error on next line
  wb = CreateObject("java", "org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(pkg);
</cfscript>

Я пытался использовать Apache POI event API вместо пользовательского API, но столкнулся с проблемами с наследованием Java. Кто-нибудь когда-нибудь использовал XSSF and SAX (Event API) для обработки больших электронных таблиц в ColdFusion?


person Sergey Babrenok    schedule 02.07.2014    source источник
comment
следили ли вы за этой страницей: help.adobe.com/ en_US/ColdFusion/10.0/Разработка/   -  person barnyr    schedule 02.07.2014
comment
В настоящее время наши приложения работают в среде CF9, но я приму во внимание расширенную интеграцию Java в CF 10-11, поскольку мы планируем перейти на CF11. Теперь я играю с CFX API, чтобы решить эту проблему. Спасибо   -  person Sergey Babrenok    schedule 03.07.2014
comment
@SergeyBabrenok - эта функция в основном является копией JavaLoader.cfc Марка Манделя, поэтому вы можете сделать то же самое в CF9 или более ранних версиях. Я использовал только API событий из java. Вероятно, вы могли бы сделать это с помощью динамического прокси-сервера, как предлагает Барнир, но с точки зрения кодирования и производительности, я подозреваю, что вам лучше реализовать его в java.   -  person Leigh    schedule 03.07.2014
comment
Я полагаю, другой вопрос в том, можете ли вы увеличить кучу, выделенную для JVM ColdFusion? Это вполне может быть дешевле, чем почти любые усилия разработчиков. Даже если вы не можете сделать это в производстве, я бы сделал это в разработке, просто чтобы исключить любые бесконечные циклы или другие проблемы.   -  person barnyr    schedule 03.07.2014
comment
@barnyr, да, увеличение размера кучи решает проблему, но я ищу более эффективное решение для памяти. Спасибо, Ли, я рассмотрю подход с JavaLoader.cfc   -  person Sergey Babrenok    schedule 03.07.2014
comment
Можете ли вы поднять кучу.. Это хороший момент. Если вы еще этого не сделали, это определенно то, что вам следует изучить, прежде чем тратить усилия на создание собственного. В конечном счете API событий лучше подходит для больших электронных таблиц, чем cfspreadsheet, но также требует усилий и более низкого уровня кодирования. Нужно ли вам действительно идти по этому пути, все зависит от ваших потребностей в обработке.   -  person Leigh    schedule 03.07.2014


Ответы (1)


В конце концов, мне удалось использовать CF + Apache POI Event API + Марк Мандель JavaLoader.cfc, спасибо @Leigh, @barnyr за всю вашу помощь. Я реализовал парсер excel на java с помощью XSSF and SAX Event API, теперь он работает и работает очень быстро. Это было непросто, потому что шаблон для анализа был непростым, и, как было указано в комментариях, увеличение размера кучи может быть дешевле.

person Sergey Babrenok    schedule 29.07.2014
comment
Не знаю, есть ли у вас еще код, но другим было бы полезно опубликовать несколько фрагментов и/или краткое описание вашего подхода. - person Leigh; 18.05.2015