2009-08-28 8 views
1

J'ai un tas de POJO annotés et interdépendants que je veux créer/modifier/rechercher sur SOAP. J'ai fait un utilitaire pour charger avec impatience chaque détail de chaque POJO et créer une chaîne XML afin que je puisse envoyer le graphique entier POJO comme un résultat de recherche. Même si les graphiques sont très petits (moins de trois nœuds), le chargement rapide a pris beaucoup de temps (500ms/nœud).JPA paresseux Hibernate utilisant SOAP

Il semble que le goulot d'étranglement soit d'avoir hâte de voir le graphique entier de chaque nœud. Est-il en quelque sorte possible de charger simplement paresseux sur SOAP? Quelles sont les autres alternatives?

Répondre

1

Il est possible d'effectuer une charge paresseuse sur SOAP, mais c'est plutôt impliqué. Et il ne sera certainement pas plus rapide :-)

Fondamentalement, vous devrez créer des proxies pour vos POJOs (en utilisant l'instrumentation bytecode) qui sauront comment charger l'objet complet (ou sa propriété individuelle si vous voulez descendre à ce niveau) sur SOAP. Si cela ressemble à répéter ce que Hibernate fait, c'est parce que c'est :-) Cette approche n'a de sens que lorsque les propriétés "à distance" ne sont pas susceptibles d'être consultées par le client et sont vraiment vraiment cher de charger avec impatience pour commencer. Une autre approche possible consiste à ajouter le paramètre "niveau d'inflation" à vos appels SOAP API, quelque chose du type SELF (propriétés directes uniquement)/CHILDREN (enfants directs)/FULL (arbre d'objets complet), ce qui causerait uniquement propriétés appropriées à initialiser. Cela délègue la responsabilité d'obtenir un objet correctement gonflé au client (qui sait probablement ce dont il a besoin pour travailler).

+0

Je pensais à cette approche proxy. Pouvez-vous me diriger vers de bonnes ressources ou donner un exemple de code sur la façon d'utiliser l'instrumentation bytecode pour construire un proxy? On dirait que c'est en hibernation quelque part. – User1

+1

Jetez un oeil à CGlib (http://cglib.sourceforge.net) ou Javassist - ils ont tous deux des exemples sur la création de proxy dynamique. Votre mandataire devra alors maintenir son propre état (par entité ou par propriété, selon ce que vous voulez) et remplir les données manquantes lors du premier accès en rappelant votre service SOAP. Vous devrez fournir les détails d'accès (URL, informations d'identification, etc ...) au proxy lors de la création ou les obtenir à partir de l'environnement client. – ChssPly76

Questions connexes