2011-06-20 3 views
2

J'ai développé un client (Eclipse) serveur (Spring Framework sur Tomcat) en utilisant Spring Remoting sur HttpInvoker.Streaming avec Spring Framework

Certaines utilisations doivent transférer de gros fichiers (> 150 Mo) du serveur au client. Comme nous sommes sur un système 32 bits côté client, j'ai toujours un problème de taille de tas Java (bien que je mette le Xmx à 1014 Mo - mais les fichiers pourraient même être plus gros).

Ma question est: Y at-il un moyen de faire du streaming sur HttpInvoker ou autre chose pour résoudre ce problème?

+0

'HttpInvoker' n'est pas conçu comme une interface de transfert de fichiers, il est là pour les appels RPC. Si vous devez transférer de grandes quantités de données, vous devez utiliser un mécanisme plus approprié, c'est-à-dire un flux d'E/S manuscrit écrit sur le client et le serveur. – skaffman

+1

Existe-t-il des cadres éprouvés pour faire de telles choses? – Philipp

+0

Qu'en est-il du déplacement des parties qui doivent transférer de gros fichiers, de RPC à ['REST'] (http://en.wikipedia.org/wiki/Restful)? Lorsque vous pouvez télécharger le fichier avec une simple demande 'GET'. –

Répondre

3

voir rmiio: RMIIO

RMIIO est une bibliothèque qui le rend aussi simple que possible de diffuser de grandes quantités de données en utilisant le cadre RMI (ou tout autre cadre RPC pour cette matière). Qui a besoin de ça? Eh bien, si vous avez déjà eu besoin d'envoyer un fichier d'un client RMI à un serveur RMI, vous avez rencontré ce problème. Et, si vous avez réussi à implémenter une solution de base, il a probablement lancé un OutOfMemoryError la première fois que quelqu'un a essayé d'envoyer un fichier de 2 Go. En raison de la conception de RMI, ce problème commun et faussement simple est en fait assez difficile à résoudre d'une manière efficace et robuste.

Vous pouvez l'utiliser de manière autonome ou sur tout autre framework rmi tel que httpInvoker.

+1

L'intégration a déjà été faite: http://bitbucket.org/ruediste/rmiio-springhttpinvoker – ruediste

+0

fyi., RMIIO est LGPL –