Précédent   Forum des professionnels en informatique > Java > Serveurs, conteneurs, et Java EE > GlassFish
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 04h49   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 1
Points : 1
Par défaut Erreur application cliente sur poste distant via Java Web Start

Bonjour,

débutant avec les EJB j'essaie de faire fonctionner depuis un certain temps un scénario hello world à base de client lourd géré par un ACC: j'ai une entreprise application qui regroupe un module ejb et une application cliente. Le tout est déployé dans glassfish. Mon client réalise un appel distant à mon module via une interface distante et une injection par @EJB.
Je passe ensuite par java web start pour distribuer mon application cliente.

Mon problème :
lorsque je lance mon client sur la machine hôte de glassfish, le client fonctionne correctement et accède bien à mon module "distant"

lorsque je lance mon client sur un autre poste de mon réseau local, le téléchargement se déroule correctement, j'accède à l'écran de validation de l’exécution, je valide et là rien ne se passe. Je peux laisser la machine tourner longtemps sans que rien ne bouge. Le processus javaw correspondant est bien dans mon pool.

lorsque je lance un client sans accès distant au module ejb (cf. plus bas) celui ci fonctionne sur tous les postes

Mon environnement :
- serveur : windows 7 32bits - netbean 7.1 + glassfish 3.1.1 - java 7 u2
- client 1 : windows 7 64bits - java 7 u2
- client 2 : windows XP 32bits - java 7 u2

Mes sources :

L'interface distante
Code :
1
2
3
4
5
6
7
8
9
package service;
 
import javax.ejb.Remote;
 
@Remote
public interface ServiceBeanRemote {
    String service1();
    String service2();
}
Le module
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package service;
 
import javax.ejb.Stateless;
 
@Stateless
public class ServiceBean implements ServiceBeanRemote {
    @Override
    public String service1() {
        return "service 1";
    }
    @Override
    public String service2() {
        return "service 2";
    }    
}
Le client ne fonctionnant pas:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package entapp2client;
 
// import divers...
import javax.ejb.EJB;
import service.ServiceBeanRemote;
 
public class Main {
    @EJB
    private static ServiceBeanRemote serviceBean;
 
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JTextField(serviceBean.service1()), BorderLayout.CENTER);
        f.setSize(400,400);
        f.setVisible(true);
    }
}
Client qui fonctionne :
Code :
1
2
3
4
5
public class Main {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "Hi dude !");
    }
}
J'ai tenté plusieurs manœuvres sans succès : extinction des par feux du serveur et de la machine cliente. Changement de l'adresse serveur dans le sun-acc.xml. Test sur 2 machines différentes.

Je ne sais pas comment fonctionne l'injection dans le client mais j'ai l'impression que le contexte reste fixé à localhost qu'importe la machine. Je ne vois nulle part une façon de spécifier l'adresse cible du serveur et je ne vois pas comment glassfish peut connaitre l'IP par laquelle le client accède (ex: comment faire si on accède au serveur derrière un NAT ?)

Si quelqu'un avait la solution à ce problème je passerais de meilleurs nuits
paul_lautner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h50   #2
Invité de passage
 
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 1
Points : 1
Après 10 heures d’exécution, un de mes clients se décide enfin à me donner un message d'erreur que voici :
Citation:
java.lang.RuntimeException: Error launching or running the application
at org.glassfish.appclient.client.JWSAppClientContainerMain.main(JWSAppClientContainerMain.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=entappclient.Main/service,Remote 3.x interface =service.ServiceRemote,ejb-link=EntApp-ejb.jar#Service,lookup=,mappedName=,jndi-name=java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote,refType=Session into class entappclient.Main: Lookup failed for 'java:comp/env/entappclient.Main/service' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
at org.glassfish.appclient.client.JWSAppClientContainerMain$ClientRunner.run(JWSAppClientContainerMain.java:179)
at org.glassfish.appclient.client.JWSAppClientContainerMain.main(JWSAppClientContainerMain.java:138)
... 9 more
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=entappclient.Main/service,Remote 3.x interface =service.ServiceRemote,ejb-link=EntApp-ejb.jar#Service,lookup=,mappedName=,jndi-name=java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote,refType=Session into class entappclient.Main: Lookup failed for 'java:comp/env/entappclient.Main/service' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:213)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:205)
at org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:625)
at org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:517)
at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:411)
at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:319)
at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:278)
at org.glassfish.appclient.client.JWSAppClientContainerMain$ClientRunner.run(JWSAppClientContainerMain.java:168)
... 10 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/entappclient.Main/service' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=entappclient.Main/service,Remote 3.x interface =service.ServiceRemote,ejb-link=EntApp-ejb.jar#Service,lookup=,mappedName=,jndi-name=java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: Précis: IOP00410008: Connection abort vmcid: OMG minor code: 8 completed: Maybe]]]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
... 19 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=entappclient.Main/service,Remote 3.x interface =service.ServiceRemote,ejb-link=EntApp-ejb.jar#Service,lookup=,mappedName=,jndi-name=java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote,refType=Session' . Actual (possibly internal) Remote JNDI name used for lookup is 'java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: Précis: IOP00410008: Connection abort vmcid: OMG minor code: 8 completed: Maybe]]]
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:178)
at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1106)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:172)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
... 22 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:global/EntApp/EntApp-ejb/Service!service.ServiceRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: Précis: IOP00410008: Connection abort vmcid: OMG minor code: 8 completed: Maybe]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:173)
... 27 more
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is org.omg.CORBA.COMM_FAILURE: Précis: IOP00410008: Connection abort vmcid: OMG minor code: 8 completed: Maybe]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
... 30 more
Caused by: org.omg.CORBA.COMM_FAILURE: Précis: IOP00410008: Connection abort vmcid: OMG minor code: 8 completed: Maybe
at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
at $Proxy34.connectionAbort(Unknown Source)
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1537)
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1084)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: org.omg.CORBA.COMM_FAILURE: Précis: IOP00410011: IOException received when reading from connection SocketOrChannelConnectionImpl[ java.nio.channels.SocketChannel[connected local=/192.168.1.8:61361 remote=p-guyot/192.168.1.21:3700] ESTABLISHED true true] vmcid: OMG minor code: 11 completed: No
at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
at $Proxy34.ioexceptionWhenReadingConnection(Unknown Source)
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:1708)
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doOptimizedReadStrategy(SocketOrChannelConnectionImpl.java:1481)
... 3 more
Caused by: java.io.IOException: Une connexion existante a dû être fermée par l’hôte distant
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.nonBlockingRead(SocketOrChannelConnectionImpl.java:1698)
... 4 more
Apparemment ca plante bien au moment du lookup, malheureusement la cause de l'erreur à l'air d'être due à la déconnexion automatique du client par le serveur (d'où le temps d'attente), donc je ne sais pas vraiment pourquoi il plante.
paul_lautner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h17   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 1
Points : 1
Problème résolu :

Pour spécifier l'adresse qui sera injecté dans le contexte du client, il faut modifier le fichier etc/hosts, mais n'utiliser qu'une adresse dans ce fichier (j'ai l'impression que ca bug lorsque j'en ai plusieurs de spécifiées avec ma version).

Changer le IIOP Listener dans l'administration glassfish n'a rien changé pour moi si ce n'est qu'au bout de quelques redémarrages de glassfish, mon serveur a refusé de déployer certains projets car il considérait mon IIOP Listener comme incorrect (pourtant remis aux valeurs initiales).
paul_lautner est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h09.


 
 
 
 
Partenaires

Hébergement Web