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

Java EE Discussion :

Transformation d'un appli lourde en appli distribuée [EJB3]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut Transformation d'un appli lourde en appli distribuée
    Bonjour,

    J'ai développé une application en client lourd avec un interface en swing et des objets métier avec leur propre système de persistance.
    J'ai une architecture en plusieurs packages:
    Un package vue qui comprend les interfaces swing
    Un package metier qui comprend les objets métiers
    Un package persistance qui s'occupe de la connexion à la base de donnée et des requêtes.

    Maintenant, il faudrait faire évoluer l'application en client serveur avec le client toujours en swing et plus tard un partie web.

    J'ai donc commencer à modifier mon application en mettant en place un serveur Glassfish, et des EJB3.
    J'ai réussi à faire tourner les tests d'EJB mais des que je veux les rattacher à mes classes métier le programme me dit qu'il n'arrive plus à trouver les EJB.

    Les EJB ne sont utilisables que par des classes annotées @Entity ?
    En gros comment faire une application distribuée en gérant moi même la persistance ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Bonjour,

    Un package vue qui comprend les interfaces swing
    Un package metier qui comprend les objets métiers
    Un package persistance qui s'occupe de la connexion à la base de donnée et des requêtes.
    Ça s'appelle un modèle MVC

    J'ai réussi à faire tourner les tests d'EJB mais des que je veux les rattacher à mes classes métier le programme me dit qu'il n'arrive plus à trouver les EJB.
    Tes EJB, tu leur as donné un nom JNDI ? genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @Stateful (name="ShoppingCartSB", mappedName=ShoppingCartHome.JNDI_NAME)
    Ma ShoppingCartHome n'est qu'une interface qui contient la constante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    package com.newenergy.server.cart;
     
    public interface ShoppingCartHome {
     
        static final String JNDI_NAME = "ejb/stateful/ShoppingCart";
    }

    Les EJB ne sont utilisables que par des classes annotées @Entity ?
    Non, les EJB sont utilisables par n'importe quelle classe. Il suffit de bien les récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     /**
         * will get the ejb Remote home factory. 
         * @return the EJB home corresponding to the homeName
         */
        public Object getHome(String jndiHomeName) throws ServiceLocatorException {
                try {
                    home = ic.lookup(jndiHomeName);
                    cache.put(jndiHomeName, home);
                } catch (Exception e) {
                    throw new ServiceLocatorException(e);
                }
            }
            return home;
        }
    En gros comment faire une application distribuée en gérant moi même la persistance ?
    Je te conseille de lire un très bon livre sur ce sujet : Java EE 5 par Antonio Goncalves.


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Bonjour,
    Merci de la réponse.

    Je te conseille de lire un très bon livre sur ce sujet : Java EE 5 par Antonio Goncalves.
    Je travail avec en fait

    J'ai bien recréer un ServiceLocator pour trouver les EJB
    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
    private ServiceLocator(){
    		try{
    			Properties prop = new Properties();
    			prop.setProperty("java.naming.factory.initial",
    					"com.sun.enterprise.naming.SerialInitContextFactory");
    			prop.setProperty("java.naming.factory.url.pkgs",
    					"com.sun.enterprise.naming");
    			prop.setProperty("java.naming.factory.state",
    					"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
    			prop.setProperty("Dorg.omg.CORBA.ORBInitialHost","com.acme.Host1");
    			prop.put("org.omg.CORBA.ORBInitialHost", "192.168.100.105");
    			//8082 8182 4849 3701 3820 3920 8686
    			prop.put("org.omg.CORBA.ORBInitialPort", "3701");  
     
    			context = new InitialContext(prop);
    			cache = new HashMap<String, Object>();
    		}catch(Exception e){
    			System.out.println("ServiceLocator()");
    			System.out.println(e.getMessage());
    		}
    	}
    puis un delegate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private static MenuRemote getMenuRemote(){
    		MenuRemote mr = (MenuRemote) ServiceLocator.getInstance().getRemoteInterface("EJB_Menu");
    		return mr;
    	}
    et enfin mon EJB et son interface @Remote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Remote
    public interface MenuRemote {
    	List<Menu> getMenus();
    	Menu createMenu(Menu m);
    	Menu findMenu(int id);
    	void deleteMenu(Menu m);
    }
    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
    @Stateless(name = "MenuBean", mappedName = "ejb/stateless/Menu")
    public class MenuBean implements MenuRemote {	
     
    	public Menu createMenu(Menu m) {
    		if(m != null){
    			m.ajouter();
    		}
    		return m;
    	}
     
     
    	public void deleteMenu(Menu m) {
    		if(m != null){
    			m.supprimer();
    		}
    	}
     
     
    	public Menu findMenu(int id) {
    		return Menu.getMenu(id);
    	}
     
     
    	public List<Menu> getMenus() {
    		return Menu.getAllMenu();
    	}
     
    }
    Mais je vois que toi tu utilise un EJB Statefull, c'est sa mon soucis ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Non, le soucis ne viens pas du fait que c'est statefull ou stateless.

    Peux tu poster la trace complète ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Voici
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Exception in thread "main" javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    	java.rmi.RemoteException: null; nested exception is: 
    	java.lang.NullPointerException
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    	java.rmi.RemoteException: null; nested exception is: 
    	java.lang.NullPointerException
    	at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:243)
    	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
    	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
    	at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
    	at droit.stateless.__MenuRemote_Remote_DynamicStub.getMenus(droit/stateless/__MenuRemote_Remote_DynamicStub.java)
    	at droit.stateless._MenuRemote_Wrapper.getMenus(droit/stateless/_MenuRemote_Wrapper.java)
    	at droit.delegate.DelegateMenu.getMenus(DelegateMenu.java:13)
    	at com.ejbTest.Main.main(Main.java:37)
    Caused by: java.rmi.RemoteException: null; nested exception is: 
    	java.lang.NullPointerException
    	at com.sun.enterprise.iiop.POAProtocolMgr.mapException(POAProtocolMgr.java:251)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1411)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
    	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210)
    	at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117)
    	at $Proxy74.getMenus(Unknown Source)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
    	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
    	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
    	at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
    	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
    	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
    Caused by: java.lang.NullPointerException
    	at droit.persistance.PersistanceMenu.getAllMenu(PersistanceMenu.java:51)
    	at droit.model.Menu.getAllMenu(Menu.java:446)
    	at droit.stateless.MenuBean.getMenus(MenuBean.java:33)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)
    	at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175)
    	at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011)
    	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203)
    	... 17 more
    javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    	java.rmi.RemoteException: null; nested exception is: 
    	java.lang.NullPointerException
    	at droit.stateless._MenuRemote_Wrapper.getMenus(droit/stateless/_MenuRemote_Wrapper.java)
    	at droit.delegate.DelegateMenu.getMenus(DelegateMenu.java:13)
    	at com.ejbTest.Main.main(Main.java:37)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    À mon humble avis, ta classe delegate est foireuse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private static MenuRemote getMenuRemote(){
    		MenuRemote mr = (MenuRemote) ServiceLocator.getInstance().getRemoteInterface("EJB_Menu");
    		return mr;
    	}
    doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    private static MenuRemote getMenuRemote(){
    		MenuRemote mr = (MenuRemote) ServiceLocator.getInstance().getRemoteInterface("ejb/stateless/Menu");
    		return mr;
    	}
    ++@

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

Discussions similaires

  1. transformer une appli VBA en appli web
    Par NewIT dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 01/11/2013, 09h51
  2. Transformer un site internet en une appli Iphone
    Par faf1992 dans le forum Projets
    Réponses: 2
    Dernier message: 21/09/2012, 12h10
  3. [Web Services] WebService et Appli lourde
    Par robbie_slash dans le forum Spring
    Réponses: 0
    Dernier message: 11/10/2010, 17h07
  4. Choix d'architecture : client lourd vers appli web
    Par nonoRedDevils dans le forum Frameworks Web
    Réponses: 8
    Dernier message: 21/04/2010, 10h14
  5. Applis lourdes : les limites ?
    Par cyspeo dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 22/10/2009, 16h39

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