2009-07-24 6 views
3

J'essaie d'utiliser les rapports Jasper (v3.5.2) pour générer et imprimer des rapports en PDF/HTML vers le navigateur pour une application web. Cette webapp utilise déjà JSF (Woodstock) pour le front end et EJB 3 (avec JPA et Hibernate comme fournisseur de persistance pour une base de données MySQL).Où s'insérer dans les rapports Jasper - front-end ou entreprise?

Ma question est - où devrait être le code pour générer les rapports basés sur Jasper? Je suis totalement confus à ce sujet. Devrais-je le mettre dans la partie avant du JSF? Ou devrait-il s'agir d'un module "report" dans la logique métier en tant que beans session?

Je pense que le bon endroit pour cela est le niveau de l'entreprise en tant que module séparé. J'appellerais une méthode commerciale avec le nom du rapport, la carte des paramètres d'entrée et le format du rapport en tant que paramètres de la méthode métier et obtiendrait le pdf/html généré en retour que je pourrais ensuite envoyer au navigateur. Suis-je sur la bonne voie avec ça?

Pouvez-vous suggérer un modèle pour ce faire?

En outre, je voudrais utiliser EJBQL puisque j'utilise déjà JPA.

Merci.

Répondre

3

Si vous voulez intégrer le jaspe générant dans votre oreille, je dirais qu'il devrait être abstrait dans une classe comme vous le suggérez. Je ne suis pas sûr d'en faire un EJB distinct, à moins que vous ne fassiez du clustering ou que vous ne déchargiez la génération de rapports sur une autre JVM, ou que vous ayez des besoins transactionnels spéciaux.

Une autre option courante consiste à avoir un serveur de rapports complètement séparé que vous appelez à distance et qui prendrait le relais de l'utilisateur.

1

Je suppose ici que 'code pour générer' = 'api pour appeler le rapport'.

Vous voulez la plupart du temps à le faire via la couche de présentation - où les bibliothèques du contact niveau de présentation des ressources au niveau de reporting que pour diffuser le rapport vers le bas à l'utilisateur.

De cette façon, vous éviterez d'avoir à conserver les données et garder le transmettre sur les différents niveaux avant d'envoyer réellement au demandeur (client)

0

Il y a quelques façons d'aller à ce sujet. Vous pouvez générer le rapport à partir d'un bean géré, sachez que vous devrez peut-être rompre le cycle de vie JSF en invoquant facesContext.responseComplete() juste avant de rendre votre rapport dans votre navigateur.

Une autre solution pourrait être d'avoir une servlet de rapport que vous pouvez invoquer à partir d'un lien de sortie JSF chaque fois que vous avez besoin de générer un rapport.

Questions connexes