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 22/12/2011, 12h04   #1
Membre expérimenté
 
Avatar de leminipouce
 
Homme Olivier
Ingénieur développement logiciels
Inscription : janvier 2004
Messages : 604
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : janvier 2004
Messages : 604
Points : 543
Points : 543
Par défaut Accès à une factory JMS sur un autre instance

Bonjour tout le monde,

Je suis tout nouveau sur Glassfish et j'ai un petit problème que je n'arrive pas à résoudre.

J'ai 2 serveurs Glassfish 3.1.1 (1 instance d'un côté et un cluster de l'autre) sur 2 machines distinctes A et B.
A héberge le DAS et l'instance principale du cluster.
B héberge l'autre instance du cluster et mon instance "solo".

Sur mon instance solo, je déploie une application qui a besoin d'accéder à une Factory JMS qui se trouve sur mon cluster. Lors du déploiement de cette appli, j'ai une erreur qui me dit qu'il n'arrive pas à trouver ma factory JMS (qui en l'occurence s'appelle JCF). Pourtant j'ai bien renseigné dans mon fichier jndi.properties l'adresse physique de l'instance principale de mon cluster. Bien sûr, à l'utilisation, mon application ne fonctionne pas (enfin, pas la partie qui doit accéder à JMS...).
Code :
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
[#|2011-12-21T17:48:07.440+0100|INFO|glassfish3.1.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=10;_ThreadName=Thread-2;|tableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
        at fr.gouv.agriculture.o2.kernel.spring.SpringKernel.start(SpringKernel.java:113)
        ... 62 more
Caused by: fr.gouv.agriculture.ors.AsyncRuntimeException: Impossible de creer une connexion JMS
        at fr.gouv.agriculture.ors.jndi.JNDIServiceLocator.getJMSConnection(JNDIServiceLocator.java:193)
        at fr.gouv.agriculture.ors.jms.JMSAsyncGateway.start(JMSAsyncGateway.java:406)
        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 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1412)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1373)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
        ... 75 more
Caused by: com.sun.messaging.jms.JMSException: MQRA:DCF:allocation failure:createConnection:No such resource : JCF
        at com.sun.messaging.jms.ra.DirectConnectionFactory._allocateConnection(DirectConnectionFactory.java:548)
        at com.sun.messaging.jms.ra.DirectConnectionFactory.createConnection(DirectConnectionFactory.java:265)
        at fr.gouv.agriculture.ors.jndi.JNDIServiceLocator.getJMSConnection(JNDIServiceLocator.java:147)
        ... 83 more
Caused by: javax.resource.ResourceException: No such resource : JCF
        at com.sun.enterprise.connectors.ConnectionManagerImpl.validateResourceAndPool(ConnectionManagerImpl.java:430)
        at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:171)
        at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165)
        at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:160)
        at com.sun.messaging.jms.ra.DirectConnectionFactory._allocateConnection(DirectConnectionFactory.java:543)
        ... 85 more
|#]
Cette erreur est levée lors de l'appel à
Code :
1
2
3
4
5
/** Factory de creation des connexions JMS en cache */
private javax.jms.ConnectionFactory factory;
// ...
// ... Appel qui pose problème
factory.createConnection(configuration.getJMSUser(), configuration.getJMSPassword());
Si je déploie rigoureusement la même application (avec donc la même config et surtout le même fichier jndi.properties), sur la même machine mais sur un Tomcat 5.5 au lieu de GF, je n'ai aucun problème pour accéder à JMS et sa factory.

Y'a-t-il une astuce particulière pour accéder à une factory JMS depuis une instance GF vers une autre instance GF ?
J'ai trouvé sur un forum Oracle qu'il fallait commenter la ligne localhost 127.0.0.1 dans le fichier /etc/hosts mais sans succés...

Pour info : mes machines A et B sont sous CentOS 5.4, basés sur une Red Hat 4.1.2, noyau 2.6.18.
Mes ports sont normalement ouverts (on a dû tous les spécifier à mano et depuis on a plus de message d'erreur d'accès sur nos ports...).
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !
leminipouce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 09h57   #2
Membre expérimenté
 
Avatar de leminipouce
 
Homme Olivier
Ingénieur développement logiciels
Inscription : janvier 2004
Messages : 604
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : janvier 2004
Messages : 604
Points : 543
Points : 543
Par défaut Solution

Bonjour à tous,

Ce fut long, mais un oeil externe, en reprenant tout de zéro, nous a trouvé la solution... que je partage aussitôt !

Les points de départs sont ici :
http://docs.oracle.com/cd/E18930_01/...lkb.html#giotd
et
http://docs.oracle.com/cd/E18930_01/...jms-resource-1

Avec une information sur les AddressList :
Citation:
A comma-separated list of message queue addresses that specify the host names (and, optionally, port numbers) of a message broker instance or instances with which your application will communicate. For example, the value could be earthearth:7677. Specify the port number if the message broker is running on a port other than the default (7676). The default value is an address list composed from the JMS hosts defined in the server's JMS service configuration. The default value is localhost and the default port number is 7676. The client will attempt a connection to a broker on port 7676 of the local host.
En d'autres termes il faut :
  1. Créer un Connection Factory sur le serveur
  2. Créer un Connection Factory sur le client, avec le même nom que celle sur le serveur
  3. Définir dans la Connection Factory du client une propriété du type "addresslist=monServeur:sonPort"

Par défaut les connections JMS sur font sur le broker local, même si on définit par JNDI un autre broker.


Voilà. En espérant que ça aide...
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !
leminipouce 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 20h44.


 
 
 
 
Partenaires

Hébergement Web