IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Comment récupérer la couche service/dao d'une appli web dans une appli non-web ?


Sujet :

Spring Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 28
    Points
    28
    Par défaut Comment récupérer la couche service/dao d'une appli web dans une appli non-web ?
    Bonjour,
    Je travaille sur un projet web utilisant Spring et hibernate.
    La couche présentation utilise JSF. Le tout fonctionnent sous tomcat.
    Toutes les couches sont en place et fonctionnent bien.

    J'ai aujourd'hui besoin de récupérer les couches service et dao afin d'effectuer un traitement de type batch. Il s'agit donc d'une application non-web (pas de jsf, pas de tomcat), mais censée pouvoir réutiliser certains beans.

    J'ai donc écris quelque chose qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    String[] xs =  new String[] {"WebContent/WEB-INF/applicationContext-resources.xml",
    "WebContent/WEB-INF/applicationContext-mail.xml",	"WebContent/WEB-INF/applicationContext-hibernate.xml",
    "WebContent/WEB-INF/applicationContext-service.xml"
    };
     
    ClassPathResource("WebContent/WEB-INF"));
     
    GenericApplicationContext ctx = new GenericApplicationContext();
    XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
    xmlReader.loadBeanDefinitions(new FileSystemResource(xs[0]));
    xmlReader.loadBeanDefinitions(new FileSystemResource(xs[1]));
    xmlReader.loadBeanDefinitions(new FileSystemResource(xs[2]));
    xmlReader.loadBeanDefinitions(new FileSystemResource(xs[3]));
    ctx.refresh();
    A partir de là, quand je récupère un service en faisant
    Object service = ctx.getBean("userManager");
    Au lieu d'obtenir un objet de type UserManager j'obtiens un objet de type $Proxy1.

    Je précise quand dans l'application web, en faisant :
    comme je l'obtiens dans l'application web en faisant WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()).getBean("userManager")),
    j'obtiens bien un objet de type UserManager.

    Comment résoudre mon problème ?
    Peut être la classe GenericApplicationContext n'est elle pas adaptée à ce que je souhaite faire. Si vous avez des pistes ...

    Merci d'avance et bonne journée.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je procède de la façon suivante dans mon application Swing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-hibernate.xml");
     
    ClientService  clientService = (ClientService) context.getBean("clientService");
    J'espère que cela t'aidera.

  3. #3
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    bonjour,

    je créé de mon côté une classe singleton afin de récupérer tout mes beans principaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class GlobalMgr {
     
        private ApplicationContext ac;
        public final ApplicationContext getAc() {
            return ac;
        }
     
        public final ServiceDAO getServiceDAO () {
            return (ServiceDAO) GlobalMgr.getInstance().getAc().getBean("serviceDAO");
        }
    ...
     
        /**
         * Récupére l'instance unique de la class Singleton. Remarque : le
         * constructeur est rendu inaccessible
         */
        public static synchronized GlobalMgr getInstance() {
            if (null == instance) { 
                instance = new GlobalMgr();
            }
            return instance;
        }
     
        /**
         * Constructeur redéfini comme �tant privé pour interdire son appel et
         * forcer � passer par la méthode getInstance()
         */
        private GlobalMgr() {
            String [] acFiles = {
                    "arc/db/config/application-context-arcdb.xml", 
                    "org/j2ee/migrate/config/constant-config.xml",
                    "omnis/db/config/application-context-omnisdb.xml",
                    "org/j2ee/migrate/config/application-context-omnistoarc-config.xml" };
            ac = new ClassPathXmlApplicationContext(acFiles);
        }
     
        /** L'instance statique */
        private static GlobalMgr instance;
     
    }

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    pour du traitement batch ou programmé dans le temps tu as Spring Quartz

Discussions similaires

  1. [Toutes versions] comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ?
    Par popaul88 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/08/2014, 18h27
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. Réponses: 17
    Dernier message: 16/03/2009, 09h21
  4. Réponses: 11
    Dernier message: 06/12/2005, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo