Le problème
Je suppose que vous utilisez JPA pour obtenir vos données sous forme d'objets qui peuvent être manipulés par JAXB. Si tel est le cas, les objets JPA peuvent utiliser un chargement paresseux, ce qui signifie qu'une requête peut ne pas réaliser toutes les données à la fois. Cependant, lorsque l'implémentation JAXB parcourt le graphe d'objets, de plus en plus d'entre eux sont mis en mémoire jusqu'à épuisement.
Option # 1 - Fournir les données dans Chunks
Une approche est de renvoyer vos données en morceaux et offrir un URI comme celui ci-dessous:
Ces les paramètres se lient très bien aux paramètres de requête JPA:
namedQuery.setFirstResult(10);
namedQuery.setMaxResults(100);
Option # 2 - Fournir des liens pour obtenir plus de données
Sinon, au lieu d'inclure toutes les données que vous pouvez fournir des liens pour obtenir plus. Par exemple au lieu de:
<purchase-order>
<product id="1">
<name>...</name>
<price>...</price>
...
</product>
<product id="2">
<name>...</name>
<price>...</price>
...
</product>
...
</purchase-order>
Vous pouvez retourner ce qui suit, le client peut alors demander des détails sur les produits en utilisant l'URI fourni. Vous pouvez mapper ceci dans JAXB en utilisant un XmlAdapter.
<purchase-order>
<product>http://www.example.com/products/1</product>
<product>http://www.example.com/products/2</product>
...
</purchase-order>
Pour plus d'informations sur XMLAdapter voir: