Status: work in progress
JDeveloper: 11.1.1.1.0
WebLogic: 10.3.1
Issue
Create simple Fusion Web Application as follows:
- Create readonly VO in the Business Layer on a table with > 20,000 records and expose it through an AM
- Create simple JSPX in the ViewController project
- Generate readonly table on a PanelCollection by drag and drop from the data control palette
- Create a command button with ExportCollectionActionListener (type="excelHTML" and exportId="<id of the table component>")
Example:
<af:panelCollection id="pc1">
<f:facet name="menus"/>
<f:facet name="toolbar">
<af:toolbar id="t2" flex="1">
<af:commandToolbarButton text="Test here: Excel Export"
id="ctb1">
<af:exportCollectionActionListener type="excelHTML"
exportedId="t1"/>
</af:commandToolbarButton>
</af:toolbar>
</f:facet>
<f:facet name="statusbar"/>
<af:table id="t1" ....
</af:table>
</af:panelCollection>
Now observe the memory consumption of the WLS
- Run the web application
- View the Memory consumtion of WLS process: ca 400MB
- Click the export to Excel button.
- View the Memory consumtion of WLS process: ca 740MB
- Undeploy the application
- View the Memory consumtion of WLS process: ca 740MB
Observations
- A single export of 20,000 records consumes ca. 340MB
- It seems there is a memory leak because the memory consumption remains after undeployment.
- Same result on Windows XP and Oracle Enterprise Linux 5.3(32bit)
Question
So why the export functionality consumes so much RAM?
Is there a memory leak? How to workaround?
Solution
Still in progress..in cooperation with Oracle Support… will be updated here.
Proposal
In order to be more flexible and powerful it would be great to be able to implement own Exporter implementations, e.g.
<af:exportCollectionActionListener type="excelHTML" exportedId="t1"
exporterClass="com.company.fusionapp.export.MyExcelExporter"/>
or even better (like custom conveter concept)
<af:exportCollectionActionListener type="excelHTML" exportedId="t1" exporterId="myExporter" />
and in adfc-config.xml:
<exporter id="myExporter" class="com.company.fusionapp.export.MyExcelExporter"/>