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

Tomcat et TomEE Java Discussion :

Tomcat 7 et un EJB externe sur GlassFish


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut Tomcat 7 et un EJB externe sur GlassFish
    j'ai un probleme avec cette configuration!

    j'ai un client java qui ce connecte sans aucun problem a mon ejb glassfish, mais si je le fait dans le context tomcat7 cela ne marche pas, alors qu'une class test avec un main fonctionne. quelqu'un a t'il une idee sur ce qui ce passe avec tomcat7
    merci

  2. #2
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Qu'est-qui ne marche pas ? As-tu un message d'erreur ? Détaille un peu ton problème...

  3. #3
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    Voilà , j’ai un projet sous Tomcat7 type serveur WMS.
    Alors ce qui ce passe est simple.
    la connexion et réponse a mon ejb GlassFish v3 ce fait .
    TestConnexionClientEjb.class :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    public class TestConnexionClientEjb {
     
    	public void essai() {
    		// Obtain our environment naming context
     
    		// Look up our data source
     
    		System.out.println(SendByteImageRemote.class.getName());
    		// ... use this connection to access the database ...
     
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String adressIP = null;
    		if (args.length != 0) {
     
    			adressIP = args[0];
     
    			TestConnexionClientEjb server = new TestConnexionClientEjb();
     
    			MonProxi monProxi = new MonProxi(adressIP);
     
    			SendByteImageRemote sendByteImageRemote = (SendByteImageRemote) monProxi
    					.getProxi(SendByteImageRemote.class);
     
     
    			server.essai();
    			String msg = sendByteImageRemote.testConnexion("le premier teste ") ;
     
    			System.out.println("essai chaine ==> "
    					+ msg );
     
    			ParamMarineChartEJB paramMarineChartEJB = new ParamMarineChartEJB();
     
    			String nameLayerRequest = "ENC.S52Dcns.DISPLAYBASE.LAND_AREA,ENC.S52Dcns.STANDARD";
    			String crs = "EPSG:4680";
    			boolean transparency = false;
     
    			double miny = 48;
    			double minx = -5;
    			double maxy = 48.25;
    			double maxx = -3.5;
     
    			int width = 512;
    			int height = 512;
     
    			paramMarineChartEJB.setNameLayerRequest(nameLayerRequest);
    			paramMarineChartEJB.setTransparency(transparency);
    			paramMarineChartEJB.setMiny(miny);
    			paramMarineChartEJB.setMinx(minx);
    			paramMarineChartEJB.setMaxy(maxy);
    			paramMarineChartEJB.setMaxx(maxx);
    			paramMarineChartEJB.setWidth(width);
    			paramMarineChartEJB.setHeight(height);
    			paramMarineChartEJB.setCrs(crs);
     
    			LayerResponse imageByte = sendByteImageRemote
    					.imageBytePng(paramMarineChartEJB);
     
    			System.out
    					.println("taille du tableau " + imageByte.getMap().length);
     
    			JFrame frame = new JFrame(TestConnexionClientEjb.class.getName());
    			frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    			frame.setSize(800, 600);
    			// frame.addWindowListener(new WindowAdapter() {
    			// public void windowClosing(WindowEvent ev) {
    			// System.out.println("Quitte");
    			// System.exit(0);
    			// }
    			// });
     
    			ImageIcon imageIcon = new ImageIcon(imageByte.getMap());
    			JLabel jLabel = new JLabel();
    			jLabel.setIcon(imageIcon);
    			jLabel.setBounds(0, 0, 800, 600);
    			JPanel jPanel = new JPanel();
    			jPanel.setSize(800, 600);
    			jPanel.add(jLabel);
    			frame.getContentPane().add(jPanel);
    			frame.setVisible(true);
     
    		} else {
    			System.out
    					.println("argument obligatoire : l'adress ip 0.0.0.0 merci !");
    		}
    	}
     
    }
    mon lookup qui est appelé par MonProxi:

    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
    public static Object getObjectInitialContext(Object ob) {
     
    		Context initialContext;
    		Hashtable<String, String> vEnv;
    		String name;
    		Object proxi;
     
    		// Pour appel distant
    		vEnv = new Hashtable<String, String>();
    		//vEnv.put("java.naming.factory.initial",
    				//"com.sun.enterprise.naming.SerialInitContextFactory");
    		//vEnv.put("java.naming.factory.url.pkgs", //"com.sun.enterprise.naming");
    		//vEnv.put("java.naming.factory.state",
    				"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
    		vEnv.put("org.omg.CORBA.ORBInitialHost", ip);
    		vEnv.put("org.omg.CORBA.ORBInitialPort", "3700");
    		// le port de connexion client sur Glassfidh est par d�faut 3700
    		try {
    			name = ((Class<?>) ob).getName();
    			System.out
    					.println("ServiceLocator.getObjectInitialContext() le name ==> "
    							+ name);
     
    			System.out
    					.println("ServiceLocator.getObjectInitialContext() avant initialcontext plus taill vEnv  "
    							+ vEnv.size());
    			initialContext = new InitialContext(vEnv);
    			System.out.println("apres new initialcontext");
     
    			proxi = initialContext.lookupLink(name);
     
    			System.out
    					.println("ServiceLocator.getObjectInitialContext() ==> apres lookup");
    			return proxi;
     
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		return null;
     
    	}
    cela marche très bien j'ai un Frame avec une image.

    mais si j'utilise la même chose sur mon serveur Tomcat j'ai un message d'erreur :

    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
     
    DEBUG (WmsServicesMarine.java:232) (WmsServicesMarine) - message ok
    javax.naming.NameNotFoundException: Le Nom fr.geomod.components.serversejb.metiers.SendByteImageRemote n'est pas lié à ce Contexte
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:803)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
    	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
    	at javax.naming.InitialContext.lookup(InitialContext.java:392)
    	at fr.geomod.components.serversejb.connexion.ServiceLocator.getObjectInitialContext(ServiceLocator.java:88)
    	at fr.geomod.components.serversejb.connexion.MonProxi.getProxi(MonProxi.java:14)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.marinechart.marinegeneratimage.MarineGenerateImageWithEjb.<init>(MarineGenerateImageWithEjb.java:62)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.marinechart.WmsOperationsImpl.getMap(WmsOperationsImpl.java:66)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.marinechart.WmsServicesMarine.map(WmsServicesMarine.java:240)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.marinechart.WmsServicesMarine.distributeRequest(WmsServicesMarine.java:160)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.marinechart.WmsServicesMarine.<init>(WmsServicesMarine.java:108)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.WmsMarineImpl.MarineTraitement(WmsMarineImpl.java:99)
    	at fr.geomod.components.servers.wms.impl.wmsmarine.WmsMarineImpl.doGet(WmsMarineImpl.java:63)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    	at java.lang.Thread.run(Thread.java:619)
    13 avr. 2011 12:40:59 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet WmsMarine a généré une exception
    après c'est les NullPointException
    je ne conprend pas cà

    fr.geomod.components.serversejb.metiers.SendByteImageRemote n'est pas lié à ce Contexte
    de la part de Tomcat

    car si je met ma class test dans mon environnement Tomcat et exécute la main ca marche!

    merci

  4. #4
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    On dirait que ton lookup est fait en local, c'est à dire dans Tomcat, au lieu de faire un lookup remote dans glassfish.

    Par ailleurs, pas facile d'analyser ton code : il ne compile pas... Vire les lignes en commentaire, ce sera plus clair et vérifie les lignes 13 et 14 de la méthode getObjectInitialContext.

  5. #5
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    je ne comprend pas le lookup en local, car c'est bien dans mon evironement Tomcat et MonProxi.class qu'il ce fait.

    le code un peux plus claire
    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
     
     
    public static Object getObjectInitialContext(Object ob) {
    		Context initialContext;
    		Hashtable<String, String> vEnv;
    		String name;
    		Object proxi;
    		vEnv = new Hashtable<String, String>();
    		vEnv.put("org.omg.CORBA.ORBInitialHost", "192.168.1.77");
    		vEnv.put("org.omg.CORBA.ORBInitialPort", "3700");
    		try {
    			initialContext = new InitialContext(vEnv);
    			name = ((Class<?>) ob).getName();
    			proxi = initialContext.lookup(name);
    			return proxi;
    		} catch (NamingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return null;
     
    	}
    si tu peux m'expliquer, car que dois-je faire dans GlassFish:

    ma classs SendByteImageRemote

    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
    package fr.geomod.components.serversejb.metiers;
     
    import javax.ejb.Remote;
     
    import fr.geomod.components.serversejb.datatypes.LayerResponse;
    import fr.geomod.components.serversejb.datatypes.ParamMarineChartEJB;
     
    @Remote
    public interface SendByteImageRemote {
     
    	/**
             * send the image png
             * @param paramMarineChart
             * @return
             */
    	abstract public LayerResponse imageBytePng(ParamMarineChartEJB paramMarineChartEJB);
     
    	/**
             * the test connection EJB
             * @param str
             * @return
             */
    	abstract public String testConnexion(String str);
     
    }
    merci.

  6. #6
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    je n'y a pas de problème de compilation et de déploiement tous fonctionnes.
    sauf ce lookup des que je fait appelle a cette méthode.

  7. #7
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    OK, ça commence à s'éclaircir.
    Je pense qu'il te manque un vEnv.put("java.naming.factory.initial", ...) pour ne pas utiliser la factory par défaut, mais la factory remote.

  8. #8
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    quel vEnv.put("java.naming.factory.initial" ?
    car si j'utilise "com.sun.enterprise.naming.SerialInitContextFactory" ca plante car il ne trouve pas la class et je ne vois pas quel jar rajouter!

  9. #9
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Là je ne vais plus pouvoir t'aider. Tu devrais peut-être poser la question sur le forum glassfish. En tout cas, je pense que tu tiens une piste. Tiens nous au courant si elle aboutie

  10. #10
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    merci pour ton aide
    cordialement.

  11. #11
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    je cherche toujours!

  12. #12
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Citation Envoyé par gloax29 Voir le message
    quel vEnv.put("java.naming.factory.initial" ?
    car si j'utilise "com.sun.enterprise.naming.SerialInitContextFactory" ca plante car il ne trouve pas la class et je ne vois pas quel jar rajouter!
    gf-client.jar (attention c'est une référence vers d'autres JARs)

  13. #13
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    oui merci, il ce trouve dans le dossier lib de GlassFish et en plus le dossier module qui est a cote pour les dépendances, mais j'ai essayer différente lib , qui fonctionne avec le client, mais si je suis dans le contexte Tomcat autrement dit si c'est ma servlet qui appelle la méthode, il m'indique que la classe remote a la quelle je fais référence ne fait pas parti du contexte, donc là je cherche si il y a une déclaration du serveur GlassFish a faire quelque part, et comment.

Discussions similaires

  1. Erreur lors de l'invocation d'un EJB distant déployé sur Glassfish
    Par JacNar6 dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 11/07/2013, 15h03
  2. Réponses: 0
    Dernier message: 20/11/2011, 20h31
  3. Pas d'ejb Remote sur Glassfish/debian
    Par jsansnom dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 17/08/2010, 10h25
  4. Réponses: 3
    Dernier message: 09/06/2010, 10h58
  5. Réponses: 1
    Dernier message: 15/01/2010, 13h25

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