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

Eclipse Platform Discussion :

[RCP] Utiliser une couche service dans une action


Sujet :

Eclipse Platform

  1. #1
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut [RCP] Utiliser une couche service dans une action
    Bonjour,

    Je réalise une appli RCP et j'utilise Spring DM pour faire le lien entre différents bundle (couche)

    J'arrive à consommer le service dans ma vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <!-- Injection des services aux différentes vues -->
    	<bean id="org.pegase.rcpclient.views.zoneExplorerTreeView"
    		class="org.pegase.rcpclient.views.ZoneExplorerTreeView"
    		scope="prototype">
    		<property name="zoneService" ref="zoneService"></property>
    	</bean>
    J'ai une action qui doit aussi consommer le même service.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	<!-- Injection des services aux différentes actions -->
    	<bean class="org.pegase.rcpclient.actions.AddZoneAction" >
    		<property name="zoneService" ref="zoneService"></property>
    	</bean>
    Mais j'ai un nullPointerException. Probablement parce que mon action est initialisé lorsque je clique sur le bouton (Menu) et non au démarrage de l'appli comme les vues.

    Quel moyen propre me permet de récupérer mon service ?
    Comment faire le lien entre mon appli RCP et ma couche service?

    Cordialement

  2. #2
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,

    J'arrive à consommer le service dans ma vue
    Pour faire cela, tu as utilise le projet SpringExtensionFactoryde Martin Lippert comme j'avais explique dans la section SpringExtensionFactory?

    Si c'est cela la chose importante à dire c'est que la View Eclipse est créer par la factory SpringExtensionFactory qui est une factory Eclipse RCP qui se base sur le contexte Spring.

    J'ai une action qui doit aussi consommer le même service.
    . Cette question est très intéressante. Le question est comment récupérer un service dans n'importe quel contexte. La question avait été pose aussi ici.

    Ça ne va pas beaucoup t'aider, mais ta problématique met en avant Eclipse E4 qui d'après ce que j'ai compris gère ce genre de problématique. Ils ont développé un composant de DI (Depence Injection) et de ce que j'ai compris on peut utiliser @Inject. Si je ne me trompe pas, on pourrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MyAction {
     
      @Inject
      private IMyService service;
     
      public void run () {
        // use the service.
      }
    }
    Le problème avec Eclipse RCP actuel, c'est qu'il ne gère pas la DI. Donc une solution très bourrine est de mettre ton service en singleton dans l'Activator et l'Action appelle cette méthode.

    Je ne sais pas comment tu crée tes Actions, mais si tu passes par une factory (Je ne maitrise pas les commandes Eclipse, mais y a pas une factory de commande?). En fait si on arrive a trouver le même mécanisme que IExtensionFactory pour les commandes (actions), je pense qu'on peut faire quelque chose. Je pourrais t'aider là dessus si il le faut.

    Donc créer son action via un new, ça c'est à proscrire. Il faut trouver le mécanisme de factory pour les commandes en Eclipse et voir si il est possible d'implémenter sa propre factory. Là on pourra faire comme SpringExtensionFactory.

    Angelo

  3. #3
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Je viens de relire les commentaires sur SpringExtensionFactory et apparemment il y a quelqu'un qui a su gérer les commands avec SpringExtensionFactory : New version of Spring Extension Factory

    Il a résolu son problème en paramétrant le timeout de SpringExtensionFactory (jamais fait) je croies. Je te conseille lire tout le billet.

    Angelo

  4. #4
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Salut Angelo,

    Merci pour ces liens. Je n'avais pas lu les commentaires sur le blog de Martin Lippert.

    Cela fait quelque jours que je cherche et j'ai trouvé quelque chose de simple et propre à mon goût.
    On peut injecter les services dans une commande comme dans une vue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      	<!-- Injection des services aux différentes vues -->
    	<bean id="org.pegase.ui.views.zoneExplorerTreeView"
    		class="org.pegase.ui.views.ZoneExplorerTreeView"
    		scope="prototype">
    		<property name="zoneService" ref="zoneService"></property>
    	</bean>
     
    	<!-- Injection des services aux différentes commandes -->	
    	<bean id="org.pegase.ui.commands.AddZoneCommand" 
    		class="org.pegase.ui.commands.AddZoneCommand">
    		<property name="zoneService" ref="zoneService"></property>
    	</bean>
    plug-in.xml
    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
     
       <extension
             point="org.eclipse.ui.views">
          <view
                name="Zone Explorer Tree View"
                class="org.eclipse.springframework.util.SpringExtensionFactory"
                id="org.pegase.ui.views.zoneExplorerTreeView">
          </view>
       </extension>
       <extension
             point="org.eclipse.ui.commands">
          <command
                defaultHandler="org.eclipse.springframework.util.SpringExtensionFactory"
                id="org.pegase.ui.commands.AddZoneCommand"
                name="Ajouter une zone">
          </command>
       </extension>
       <extension
             point="org.eclipse.ui.menus">
          <menuContribution
                locationURI="menu:org.eclipse.ui.main.menu">
             <menu
                   label="Administration">
                <command
                      commandId="org.pegase.ui.commands.AddZoneCommand"
                      style="push">
                </command>
             </menu>
          </menuContribution>
       </extension>
    Je n'ai pas de problème de timeOut... A suivre !


    Vince

  5. #5
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    N'hésite pas à cliquer sur si c'est le cas...
    Pas de questions technique par MP, les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/07/2012, 00h14
  2. "Couche service" dans une architecture en couche
    Par Whisperer dans le forum Architecture
    Réponses: 7
    Dernier message: 16/02/2010, 16h51
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. Réponses: 4
    Dernier message: 16/05/2006, 23h15
  5. 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