Bonjour, bonsoir amis développeurs et développeuses,

Je développe une application Java à l'aide de la plateforme Netbeans (EDI v6.8).... jusque là je crois que j'ai tout bon.

L'application que je développe s'appuie sur une bdd et est découpée en plusieurs modules : API ( interfaces et classes abstraites) et services providers (classes implémentant les interfaces ou étendant le classes abstraites) : cela me permettra de proposer différentes implémentations et pourquoi pas différentes versions de mes services providers donc.
Ca c'est la théorie...


En pratique, j'ai 3 modules que nous appelerons :

M1 : module contenant une interface "DAO" pour des classes DAO (create, update, etc....)

M2 : module contenant les classes implémentant l'interface de M1. Il peut y avoir plusieurs "versions" de ce module (par exemple on peut imaginef un module specialisé dans la persistence d'objets dans des fichiers xml, un autre pour une bdd postgresql, une autre pour mysql, etc...)
M2 dépend de M1
Toutes les classes de ce module sont déclarées "public" et possèdent un constructeur par défaut. Elles ont toutes l'annotation "@serviceprovider(service=DAO.class)"

M3 : classe utilisatrice. Elles contient des vues qui permettant d'enregisgrer des données en utilisant les dao des modules M2.
Ce module dépend de M1

Ainsi, pour appeler un DAO a partir d'unz classe de M3, il suffit de faire

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public class MonSuperTopComponent{
....
/* récupération d'un dao */
DAO d = Lookup.getDefault().lookup(DAO.class);
 
/* on peut utiliser l'instance dao pour faire ce qu'on veut */
....
}

Ma questions (ouf on y arrive !!) :
Est ce que plusieurs appels successifs (i.e. à plusieurs endroits de mon code) renvoient la MÊME instance de dao ?

La question semblera peut être incongrue pour certains mais le souci que j'ai c'est que je souhaite qu'il n'ait qu'une seule instance d'un DAO donnée (singleton) ceci parce qu'il contient un cache de tous les objets lues (afin de gagner du temps sur les lectures de données et reduire le besoin d'aller taper dans la bdd par exemple).

J'ai pensé un temps "implémenté" les DAO en suivant le pattern Singleton mais cette implémentation se révèle incompatible avec l'utilisation des annotations serviceproviders, specifiques à Netbeans RCP et fort pratique.

Avez vojs déjà été confronté à ce problème et comment l'avez vous résolu ?