Je crée un rapport qui doit inclure une colonne 'estimation', basée sur des données qui ne sont pas disponibles dans l'ensemble de données.Affichage de données calculées avec des dépendances externes
Idéalement, je voudrais être en mesure de définir une interface Java
public int getEstimate(int foo_id, int bar_id, int quantity);
où foo_id
, bar_id
et quantity
sont disponibles dans la ligne que je veux l'estimation présentée.
Il y aura plusieurs stratégies pour produire l'estimation, donc il serait bon d'utiliser une interface pour permettre leur échange en cas de besoin. En regardant les documents BIRT, je pense qu'il est possible que je devrais utiliser les mécanismes du gestionnaire d'événements, mais cela semble seulement permettre de définir une classe à utiliser et je voudrais d'une manière ou d'une autre injecter un estimateur configuré. Un exemple non obfusqué pourrait être de dire que j'ai un ensemble de données qui inclut une colonne d'adresse IP, et j'aimerais pouvoir utiliser un service GeoIP pour résoudre le pays à partir de l'adresse IP. Dans ce cas, j'ai une interface public String getCountryName(String address)
et les implémentations réelles peuvent utiliser MaxMind, un cache local ou un autre système.
Comment ferais-je cela?
Ou ... serais-je mieux d'écrire une source de données scriptée qui peut intégrer les données calculées avant de les livrer à BIRT?
Ou ... une sorte de source de données scriptée qui est ensuite utilisée pour créer un ensemble de données de jointure?
J'essaie de voir comment, dans votre exemple, l'instance de redwood.HelloWord pourrait avoir des propriétés préconfigurées ne provenant pas du script BIRT. Par exemple, mon contexte Spring, dans lequel j'essaie d'exécuter BIRT, peut avoir une implémentation d'interface de service que mon estimateur doit utiliser.L'instanciation de HelloWorld signifie directement qu'elle doit être configurée. Peut-être que j'ai besoin de regarder Spring AOP pour injecter dynamiquement, mais je soupçonne que le bit BIRT OSGI pourrait gêner. Les gestionnaires d'événements ont l'air sympa mais je ne sais pas comment obtenir une référence à une instance préexistante, externe à birt. – ptomli
Dans l'exemple de gestionnaire d'événements, si vous devez récupérer une instance préexistante de quelque chose (et que vous exécutez dans la même machine virtuelle), vous avez probablement besoin de ce "quelque chose" pour implémenter le modèle Singleton. Un constructeur privé et une méthode publique "getInstance()". Cela vous permettra de l'attraper facilement au POJO. – MystikSpiral
OK, je vais essayer quelques variantes et voir ce qui tombe. Je pense qu'une source de données fournirait de meilleurs mécanismes de contrôle au sein de Spring (je peux injecter une instance, en évitant Singleton) bien que le gestionnaire d'événements ait une bonne «sensation» (classes spécifiques à des fins spécifiques). Merci – ptomli