Notes de version de Sun GlassFish Communications Server 2.0

Chapitre 4 Problèmes connus et restrictions de Sun GlassFish Enterprise Server

Ce chapitre décrit les problèmes connus relatifs au logiciel Sun GlassFish Enterprise Server 2.1.1 et les solutions associées. Ces problèmes affectent aussi spécifiquement Communications Server, qui a été créé à partir de Sun GlassFish Enterprise Server 2.1. Si le récapitulatif ne mentionne aucune plate-forme particulière, cela signifie que le problème s'applique à toutes les plates-formes. Voici les sujets abordés :

Administration

Cette section traite des problèmes connus liés à l'administration et les solutions associées.

Communications Server ne détecte pas de conflit avec le port de pulsation d'un cluster (numéro de problème 1967).

Description

Lorsqu'un cluster est créé, Communications Server assigne de manière aléatoire un port de pulsation compris entre 1026 à 45556. Pour le cluster par défaut, à savoir le cluster créé par une installation de Communications Server, un nombre aléatoire compris entre 0 et 45556 est sélectionné. Le processus de création d'un cluster ne détermine pas avec précision si le port de pulsation est déjà utilisé par un autre service.

Solution

Si la configuration automatique de la création d'un cluster sélectionne un port de pulsation qui est en conflit avec un autre service qui utilise déjà ce port, mettez à jour le port de pulsation du cluster vers un port non utilisé par le système.

Pour modifier le port de pulsation d'un cluster, utilisez la commande asadmin suivante :

asadmin set nom-cluster.heartbeat-port= nouveau-numéro-port

La création de domaine s'arrête sur un serveur NFS exécutant Linux 64 bits (numéro de problème 1961).

Description

La commande asadmin create-domain risque d'échouer lors de la tentative de création d'un domaine sur un système de fichiers NFS (Network File System) avec le serveur NFS sous Linux 64 bits.

Solution

Aucune solution connue.

Une dégradation des performances est observée lorsqu'un fichier journal volumineux fait l'objet d'une rotation (6718611)

Description

Lorsqu'un fichier journal volumineux fait l'objet d'une rotation, le temps de réponse augmente légèrement.

Solution

Il est possible de diminuer la perte de performances en modifiant les valeurs des paramètres Limite de rotation du fichier et Temps limite de rotation du fichier dans le Journal. Les valeurs de ces propriétés dépendent de votre application et de votre environnement.

Échec du déploiement d'adaptateur de ressources RA contre IBM MQ (problème 6605)

Description

Déploiement d'un adaptateur RA générique contre les défaillances produit d'IBM Message Queue. Les autorisations accordées dans le fichier server.policy sont les suivantes.


grant {
      permission java.util.logging.LoggingPermission "control";
      permission java.util.PropertyPermission "*", "read,write";
      }

Solution

Modifiez les autorisations du fichier server.policy comme suit :


grant codeBase
"file:${com.sun.aas.installRoot}/lib/install/applications/adminapp/-" {
  permission java.util.logging.LoggingPermission "control";
 };

Des instances autonomes obtiennent parfois des fichiers de la part d'autres instances (6698604)

Description

Dans certains cas, les fichiers installés sur le DAS devant être synchronisés avec une instance spécifique sont en fait envoyés à d'autres instances.

Solution

Aucune solution connue.

Le message de démarrage de la commande start-cluster est trop détaillé (6728317)

Description

La commande asadmin start-cluster indique trop de messages même en cas de défaillance de composants non essentiels au démarrage. Consultez l'exemple suivant de sortie de commandes en cas de défaillance d'éléments non essentiels (par rapport aux instances du cluster) :


./asadmin start-cluster --port 9898 cluster1
Please enter the admin user name>admin
Please enter the admin password>
The clustered instance, instance2, was successfully started.
error 0 [#|2008-07-17T14:58:16.496+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 1 [#|2008-07-17T14:58:17.517+0200|WARNING|sun-appserver9.1|javax.jms|
_ThreadID=10;_ThreadName=main;
_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|[C4003]: 
Error occurred on connection creation [localhost:37676]. - cause: 
java.net.ConnectException: Connection refused|#]


error 2 [#|2008-07-17T14:58:30.596+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=5954a044-df06-4a3e-902a-0c40b4b6cddb;
|EJB5108:Unable to initialize EJB Timer Service. 
The likely cause is the database has not been 
started or the timer database table has not been created.|#]


error 3 [#|2008-07-17T14:58:32.512+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|_ThreadID=10;_ThreadName=main;
__CallFlowPool;_RequestID=90bbbe3a-d654-4480-b295-7e317d945a4a;|
RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


The clustered instance, instance1, was successfully started.
error 0 [#|2008-07-17T14:58:21.117+0200|WARNING|sun-appserver9.1|
javax.enterprise.system.container.ejb|
_ThreadID=13;_ThreadName=pool-1-thread-4;TimerBean;
_RequestID=30827d9a-72ac-4854-b216-06494b6a9fb5;
|EJB5108:Unable to initialize EJB Timer Service. The likely cause is the database has 
not been started or the timer database table has not been created.|#]


error 1 [#|2008-07-17T14:58:23.106+0200|WARNING|sun-appserver9.1|
javax.enterprise.resource.resourceadapter|
_ThreadID=10;_ThreadName=main;__CallFlowPool;
_RequestID=b41d76fa-0203-49f7-a2ae-83bf242d3e7a;
|RAR5005:Error in accessing XA resource with JNDI name [__CallFlowPool] for recovery|#]


Command start-cluster executed successfully.

Solution

Aucune solution connue. Ces messages (exceptions) peuvent être ignorés.

Le script package-appclient ne fonctionne pas si le fichier domain1 est manquant (6171458)

Description

Par défaut, as-install/lib/package-appclient.xml comporte une valeur codée en dur pour la variable AS_ACC_CONFIG de domain1, pointée par asenv.conf. Si domain1 est supprimé et qu'un autre domaine est créé, la variable AS_ACC_CONFIG n'est pas mise à jour avec le nouveau nom de domaine, ce qui provoque l'échec du script package-appclient .

Solution

Effectuez l'une des opérations suivantes :

  1. Laissez domain1 intact et créez vos propres domaines en tenant compte de celui-ci.

  2. Supprimez domain1 et remplacez la valeur codée en dur de domain1 dans as-install/lib/package-appclient.xml par le nouveau nom de domaine.

Cette procédure devra être effectuée à chaque création d'un nouveau domaine si domain1 n'est pas présent.

Le démarrage d'Application Server avec un agent JMX supplémentaire n'est pas pris en charge (6200011)

Description

La version J2SE1.4.x, 5.0 ou version ultérieure peut être configurée sur Application Server. La fonction de démarrage d'un agent JMX est intégrée à la plate-forme J2SE 5.0. Un agent est activé lorsque vous définissez explicitement les propriétés système lors du démarrage du serveur.

Voici quelques exemples de valeurs:


name="com.sun.management.jmxremote" value="true"
name="com.sun.management.jmxremote.port" value="9999"
name="com.sun.management.jmxremote.authenticate" value="false"
name="com.sun.management.jmxremote.ssl" value="false"

Une fois les propriétés JMX configurées et le serveur démarré, un nouveau serveur jmx-connector est démarré dans la machine virtuelle d'Application Server. L'un des effets secondaires non désirés de cette opération est que celle-ci nuit aux fonctions d'administration ; la console d'administration d'Application Server et l'interface de ligne de commande peuvent alors produire des résultats inattendus. Le problème provient du fait qu'il existe des conflits entre le serveur jmx connector intégré et le nouveau serveur jmx-connector.

Solution

Si vous utilisez jconsole (ou tout autre client JMX-compliant), pensez à réutiliser le serveur de connecteurs JMX standard lancé au démarrage d'Application Server.

Lorsque le serveur démarre, une ligne similaire à celle indiquée ci-dessous s'affiche dans le journal du serveur. Vous pouvez vous connecter à l'URL JMXService spécifié et exécutez les mêmes opérations de configuration/gestion après avoir fourni des données d'authentification correctes ; par exemple :


[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|
javax.enterprise.system.tools.admin|_ThreadID=10;|ADM1501: 
Here is the JMXServiceURL for the JMXConnectorServer: 
[service:jmx:rmi:///jndi/rmi://hostname:8686/management/
rmi-jmx-connector]. This is where the remote administrative 
clients should connect using the JSR 160 JMX Connectors.|#]

Le fichier .asadmintruststore n'est pas décrit dans la documentation (6315957)

Description

Le fichier .asadmintruststore n'est pas présenté dans la documentation. Si ce fichier n'existe pas dans le répertoire home de l'administrateur, vous pouvez rencontrer de graves bogues lors de la mise à niveau d'applications hébergées sur le serveur.

Solution

Échec du démarrage des instances clusterisées suite à l'expiration du délai d'accès au courtier JMS (6523663)

Description

Le mode d'intégration MQ par défaut d'une instance clusterisée d'Communications Server est LOCAL. Lorsqu'Communications Server est installé dans un emplacement (PATH) long (c'est-à-dire « non court »), imqbrokerscv.exe s'arrête brutalement au démarrage de l'instance clusterisée. Le problème provient d'une allocation de mémoire incorrecte dans imqbrokersvc.

Solution

Il est nécessaire de modifier le type de service JMS pour l'instance clusterisée, de la valeur par défaut LOCAL sur REMOTE. Avec cette configuration, toutes les instances pointent vers le courtier DAS. Suivez les instructions ci-dessous pour configurer un cluster en mode REMOTE.


Remarque –

Avec le mode REMOTE, toutes les instances n'utilisent qu'un seul courtier (DAS), par conséquent aucun cluster de courtier n'est créé au démarrage du cluster d'Communications Server. Consultez “Clustering automatique” à la section 4.1, division iii de la page http://www.glassfishwiki.org/gfwiki/attach/OnePagersOrFunctionalSpecs/as-mq-integration-gfv2.txt pour obtenir plus d'informations. La fonctionnalité susmentionnée ne sera pas disponible.


ProcedureUtilisation de la ligne de commande

Avant de commencer

Modifiez le port et le fichier de mots de passe selon votre environnement. Notez que dans les instructions ci-dessous, le nom du cluster est racluster, le port d'administration DAS est 5858 et le port JMS DAS 7676 .

  1. Modifiez la configuration du cluster, en changeant le type JMS sur REMOTE .


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.type=REMOTE
  2. Créez un hôte JMS correspondant à l'hôte JMS DAS.


    as-install/bin/asadmin.bat create-jms-host --port 5858 --user admin --passwordfile \
    as-install/bin/password_file --target racluster --mqhost localhost --mqport 7676 \
    --mquser admin --mqpassword admin dashost
  3. Définissez l'hôte JMS DAS créé à l'étape précédente comme le nouvel hôte JMS par défaut.


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    as-install/bin/password_file racluster.jms-service.default-jms-host=dashost

ProcedureUtilisation de l'IG d'administration

  1. Accédez à Configurations->cluster-name-config->Java Message Service->Hôtes JMS.

  2. Cliquez sur Nouveau pour créer un nouvel hôte JMS ; nommez-le dashost.

  3. Entrez les paramètres de configuration correspondant au service JMS pour le DAS ; les valeurs par défaut sont les suivantes :

    • Nom d'hôte : hôtelocal

    • Port : 7676

    • Utilisateur administrateur : admin

    • Password: admin

    Modifiez ces paramètres au besoin pour votre service JMS DAS.

  4. Retournez à l'onglet Java Message Service, puis modifiez le type de service JMS sur REMOTE (défini sur LOCAL par défaut).

  5. Choisissez dashost à partir de la liste déroulante default-jms-host.

  6. Enregistrez vos modifications, puis démarrez votre agent de nœud ou votre cluster.

Impossible d'afficher le diagramme jmaki sous les navigateurs Netscape 8.1.3, Mozilla 1.7 et Safari 2.0.4 (6543014)

Description

Lorsque vous essayez d'afficher un diagramme de la page de contrôle des statistiques de journalisation à l'aide d'un navigateur non pris en charge, le message d'erreur suivant peut s'afficher :


Error loading jmaki.widgets.jmaki.charting.line.Widget : id=form1:jmaki_chart11
Script: http://easqelx5.red.iplanet.com:4848/resources/jmaki/charting/ \
line/component.js (line:5437).
Message: area.initialize is not a function

Solution

Utilisez un navigateur pris en charge. Reportez-vous à la section Navigateurs pour obtenir la liste des navigateurs pris en charge par Communications Server.

La commande create-domain échoue avec le mot de passe principal personnalisé sous AIX (6628170)

Description

Sous le système d'exploitation AIX, toute tentative de création de domaine avec un mot de passe principal personnalisé échoue avec l'erreur suivante :


keytool error (likely untranslated): java.lang.NullPointerException
 Enter keystore password:  New keystore password:

Client d'application

Cette section décrit les problèmes connus des clients d'application et les solutions associées.

Le JAR de bibliothèque contenu dans l'archive de clients d'application écrase le fichier MANIFEST (6193556)

Description

Si vous possédez un fichier JAR de niveau supérieur dans votre JAR client (dans notre cas, reporter.jar), le fichier manifeste de ce JAR écrase celui du JAR client lorsque vous déployez ce dernier.

Solution

Aucune pour l'instant.

Le CCA essaie toujours de se connecter à localhost:3700 (6527987)

Description

Le client d'application essaie toujours de se connecter à localhost:3700. Le problème vient du fait que plusieurs propriétés système doivent être lues avant que le code client ne soit invoqué.

Solution

Définissez les éléments suivants en tant que propriétés système (-D dans votre JAVA_CMD). Ne les définissez pas dans votre code client d'application :


org.omg.CORBA.ORBInitialHost = server-instance-host
org.omg.CORBA.ORBInitialPort = server-instance-port

ASQuickStartup rompt SocketChannel.keyFor(), retournant une valeur null au lieu de SelectionKey (Issue Tracker 3027)

Description

Lorsqu'un SocketChannel est enregistré sur plusieurs sélecteurs, socketChannel.keyFor(lastRegisteredSelector) retourne une valeur null au lieu de SelectionKey.

Solution

Ce problème est associé au bogue JDK 6562829 et devrait être résolu dans 6.0 U3. Une solution a été incluse dans Communications Server pour que le sélecteur soit déployé avant que l'API keyFor ne soit appelée. Cela permet à keyFor de fonctionner jusqu'à ce que le bogue JDK soit résolu.

Pilotes Sun JDBC intégrés

Cette section décrit les problèmes connus du pilote Sun JDBC intégré et les solutions associées.

Erreurs PreparedStatement (6170432)

Description 1

Si une application génère plus de 3000 objets PreparedStatement dans une transaction, l'erreur suivante peut se produire avec DB2 :

[sunm][DB2 JDBC Driver] Plus d'instruction disponible. Veuillez recréer votre package avec une valeur dynamicSections supérieure.

Solution 1

Ajoutez les propriétés suivantes à la définition de pool de connexions afin que le pilote puisse rééditer les liens des packages DB2 avec une valeur dynamicSections supérieure :

createDefaultPackage=true replacePackage=true dynamicSections=1000

Description 2

En liaison avec l'erreur PrepardStatement mentionnée ci-dessus, le message d'erreur suivant peut également être généré :

[sunm][DB2 JDBC Driver][DB2]Virtual storage or database resource is not available.

Solution 2

Augmentez la valeur du paramètre de configuration APPLHEAPSZ pour le serveur DB2. 4096 constitue une valeur correcte.

Description 3

Niveau d'isolement TRANSACTION_SERIALIZABLE. Si votre application utilise le niveau d'isolement TRANSACTION_SERIALIZABLE avec l'un des paramètres indiqués ci-dessus, elle peut rester bloquée en tentant d'obtenir la connexion.

Solution 3

Pour définir le niveau d'isolement d'une connexion, le pool de connexions correspondant doit être créé sur le même niveau d'isolement.

Java DB n'est pas démarrée après le redémarrage de la machine ou le démarrage d'Application Server (6515124)

Description

La base de données Java DB intégrée n'est pas automatiquement redémarrée après le redémarrage d'un système hôte ou d'une zone Solaris, ou le démarrage d'Communications Server. Il ne s'agit pas d'un bogue mais du comportement attendu pour toute application tiers ou intégrée. Le problème réside dans le fait que Java DB doit être démarrée avant l'instance d'Communications Server.

Solution

Après le redémarrage de la machine hôte ou de la zone Solaris, assurez-vous de démarrer Java DB avant Communications Server ; par exemple :


/opt/SUNWappserver/appserver/bin/asadmin start-database

Déploiement

Le déploiement automatique échoue parfois sur un cluster (6610527)

Description

Les problèmes de temporisation peuvent provoquer l'échec du déploiement automatique dans les domaines configurés pour prendre les clusters en charge. Ce problème ne survient pas dans les domaines ne prenant pas les clusters en charge.

Solution

Utilisez l'une des solutions suivantes :

Classloader spécifique à l'application non utilisé par la compilation JSP (6693246)

Description

Le classloader spécifique à l'application (applibs ou --libraries) n'est pas utilisé par la compilation JSP. En conséquence, les JSP associés à ces JAR ne seront pas compilés.

Solution

Aucune solution connue.

Documentation

Cette section décrit les problèmes détectés dans la documentation et les solutions associées.

Incohérences Javadoc (plusieurs ID)

Une documentation Javadoc est absente ou incorrecte pour plusieurs interfaces et méthodes AMX :

L'outil ANT intégré génère l'exception java.lang.NoClassDefFoundError (6265624)

Description

L'exception suivante est générée dans le thread principal "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher.

Solution

Il est conseillé de ne pas utiliser l'outil ANT intégré ailleurs que dans Communications Server.

EJB

Resource Injection ne fonctionne pas avec HandlerChain (6750245)

Description

Resouce Injection ne fonctionne pas avec HandlerChain à cause de l'ordre d'initialisation d'EJB.

Solution

Aucune solution connue.

Didacticiel de Java EE

Lorsque vous créez des ressources à l'aide de la console d'administration, utilisez l'onglet Cibles pour indiquer que le serveur est la cible. Si vous utilisez la ligne de commande ou une cible asant, le serveur représente la cible par défaut et aucune autre action n'est requise.

Java Persistence

TopLink suppose que la propriété/le champ myCollection est clonable (Issue Tracker 556)

Description

Si l'API java.util.Arrays.asList() est utilisée pour convertir un Object[] en une Collection, JDK retourne une implémentation de java.util.ArrayList non clonable. L'exception suivante est alors générée :


The method invocation of the method [protected native java.lang.Object 
java.lang.Object.clone() throws java.lang.CloneNotSupportedException] on the object 
[[pkg.A id = xxx]], of class [class java.util.Arrays$ArrayList], triggered an 
exception. Internal Exception: java.lang.reflect.InvocationTargetException Target 
Invocation Exception: java.lang.CloneNotSupportedException: 
java.util.Arrays$ArrayList

Ce problème fait l'objet d'un suivi sur https://glassfish.dev.java.net/issues/show_bug.cgi?id=556.

Solution

Créez une autre collection à l'aide de son constructeur ; par exemple :


myCollection = new ArrayList(java.util.Arrays.asList(a))

GenerationType.IDENTITY et DataDirect avec SyBase (Issue Tracker 2431)

Description

La tentative d'insertion d'une entité utilisant GenerationType.IDENTITY échoue lorsque le pilote DataDirect est utilisé avec SyBase. Cette tentative échoue car le pilote DataDirect crée une procédure stockée pour chaque instruction préparée et paramétrée.

Solution

Dans le fichier domain.xml, définissez la propriété PrepareMethod=direct sur la source de données correspondante.

Gestion du cycle de vie

Cette section décrit les problèmes connus de gestion du cycle de vie et les solutions associées.

La définition de la propriété ejb-timer-service entraîne l'échec de la commande set (6193449)

Description

Après avoir défini minimum-delivery-interval de la propriété ejb-timer-service sur 9000, la tentative de définition de redelivery-interval-in-mills de la propriété ejb-timer-service sur 7000 entraîne l'échec de la commande set avec l'erreur suivante :


[echo] Doing admin task set
[exec] [Attribute(id=redelivery-interval-internal-in-millis) : 
Redelivery-Interval (7,000) 
should be greater than or equal to Minimum-delivery-interval-
in-millis (9,000)]
[exec] CLI137 Command set failed.

La relation entre la propriété de l'intervalle de redistribution et celle de l'intervalle de livraison minimal n'étant pas logique, il vous est impossible d'utiliser l'interface graphique (IG) ou l'interface de ligne de commande (CLI) pour définir un intervalle de livraison minimal supérieur à celui de redistribution.

minimum-delivery-interval-in-millis doit toujours être égal ou supérieur à redelivery-interval-in-millis pour la propriété ejb-timer-service. Cependant, un contrôle de validité erroné s'effectue dans Application Server pour vérifier que la valeur de redelivery-interval-in-millis est supérieure à la valeur de minimum-delivery-interval-in-millis.

Solution

Utilisez les valeurs par défaut suivantes :


minimum-delivery-interval(default)=7000
redelivery-interval-in-millis(default)=5000

Toute autre valeur provoquera une erreur.

Erreur générée lors de l'affichage des destinations physiques JMS dans la configuration non DAS (6532532)

Description

Si vous essayez d'afficher les destinations physiques JMS à l'aide de default-config, un message d'erreur apparaîtra.

Solution

Ce comportement est normal. Dans Communications Server 2.0, default-config est un modèle d'informations de configuration, par conséquent, les opérations JMS (telles que list et create) ne peuvent pas être exécutées pour le fichier default-config. En revanche, ces opérations peuvent être exécutées pour la configuration de vos instances autonomes ou clusterisées.

Win2003 uniquement : fuite de mémoire du pool non paginé, arrêt de la pile TCP et test richaccess (6575349)

Description

(Windows 2003 uniquement) Des fuites de mémoire se produisent sur les systèmes Windows 2003 lors de l'exécution de fonctions richaccess. Ce problème est dû à la croissance continue du pool non paginé Win32, qui peut provoquer une panne de la pile TCP/IP complète. Une fois l'erreur générée, la pile TCP/IP demeure dans un état récupérable, et la seule manière de la restaurer est de redémarrer le système Windows 2003.

Solution

Il existe deux solutions à ce problème.

Enregistrement

Cette section décrit les problèmes connus de consignation et les solutions.

La définition de l'instruction de débogage access,failure interrompt le démarrage d'Application Server (6180095)

Description

Le paramétrage de l'option java.security.debug pour JVM entraîne un blocage du démarrage de l'instance du serveur. Ce problème se produit, par exemple, lorsque vous définissez les paramètres ci-dessous dans le fichier domain.xml.


<jvm-options>-Djava.security.debug=access,failure</jvm-options>

Solution

Aucune pour l'instant. Évitez de paramétrer cet indicateur.

Message Queue

Cette section décrit les problèmes connus liés aux files d'attente des messages Java et les solutions associées.

La reconnexion de JMS n'est pas complète dans certains cas dépendant des délais d'expiration (6173308, 6189645, 6198481, 6199510, 6208728)

Description

Dans des scénarios faisant appel à la synchronisation, plusieurs causes peuvent être à l'origine de ce problème.

Solution

Pour contourner ces problèmes :

Server ne démarre pas si le courtier MQ n'est pas démarré (6740797)

Description

Si vous configurez JMS de façon à être DISTANT, Enterprise Server échoue à démarrer si le courtier MQ n'est pas démarré.

Solution

Définissez l'option JVM suivante comme suit : com.sun.enterprise.jms.CONNECT_MQ_LAZILY=true . Après la configuration de cette option JVM, vous pouvez démarrer Communications Server si le courtier MQ n'est pas lancé. Cependant, il est recommandé de démarrer MQ avant le serveur.

Le courtier MQ ne parvient pas à démarrer avec un profil de cluster sous Linux (6524871)

Description

Après avoir créé un domaine avec un profil de cluster sur un système Linux, il se peut que vous rencontriez une erreur java.lang.OutOfMemoryError: Java heap space et que l'instance du serveur ne parvienne pas à redémarrer suite au blocage du démarrage du courtier MQ. Il est impossible de récupérer le système après cette condition. Ce problème provient d'une configuration incorrecte du fichier /etc/hosts ; de manière plus spécifique, le nom d'hôte du serveur pointe vers l'adresse de loopback 127.0.0.1.

Solution

Un cluster du courtier MQ ne peut pas démarrer lorsque le périphérique réseau est configuré pour pointer vers l'adresse de loopback. Il ne s'agit pas d'un bogue. La solution est de vous assurer que le fichier /etc/hosts de l'hôte d'Communications Server ne pointe pas vers 127.0.0.1.

Une incompatibilité entre les anciennes et les nouvelles classes est créé lorsque imqjmsra.jar est chargé avant la mise à niveau (6740794)

Description

Lors du démarrage du serveur, ce dernier vérifie la version de Message Queue. Si la version Message Queue est incorrecte, le serveur effectue alors sa mise à niveau à l'aide de imqjmsra.jar. Ceci met JAR à niveau et ses classes ne seront pas accessibles au serveur avant le prochain redémarrage d'Application Server. Cette situation se produit uniquement si Message Queue est mis à niveau seul, ou si l'on applique un patch au serveur d'application seul. Cette situation peut parfois entraîner l'effet secondaire suivant : Application Server ne démarre pas.

Solution

Message Queue et Application Server doivent être maintenus au même niveau de patch, ou bien il faut redémarrer Application Server.

Contrôle

Cette section décrit les problèmes connus liés au contrôle et les solutions associées.

Certaines statistiques de contrôle du service HTTP ne présentent aucune information utile et doivent être ignorées (6174518)

Description

Lorsqu'on affiche les statistiques de contrôle de certains éléments du service HTTP, certaines valeurs présentées ne correspondent pas aux valeurs actuelles ou sont toujours à 0. En particulier, les statistiques du service HTTP suivantes ne présentent pas d'informations applicables à Application Server, et doivent être ignorées :

Solution

Ces contrôles seront supprimés dans les versions ultérieures et remplacés par des informations mieux adaptées.

L'ouverture de la navigation JNDI à partir de l'IG d'administration génère plusieurs exceptions dans le fichier server.log (6591734)

Description

De nombreuses exceptions sont générées lorsque le navigateur JNDI est ouvert à partir de l'IG d'administration.

Solution

Aucune pour l'instant.

Sécurité

Cette section décrit les problèmes connus liés aux certificats et à la sécurité des applications Web sous Communications Server ainsi que les solutions associées.

Erreur de mémoire saturée dans les scénarios SSL lors d'un stress important (JDK 6 Problème 23)

Description

Un bogue JDK (Voir : https://jdk6.dev.java.net/issues/show_bug.cgi?id=23) dans JDK6 Sun PKCS11 Provider pourrait entraîner une erreur de mémoire saturée (OutOfMemoryError) lors de l'exécution de certains scénarios SSL en situation de stress important.

Solution

Si vous rencontrez ce problème, supprimez le fournisseur sun.security.pkcs11.SunPKCS11 du fichier java.security dans votre installation JRE.

La terminaison SSL ne fonctionne pas (6269102)

Description

La terminaison SSL ne fonctionne pas ; lorsque l'équilibreur de charge (matériel) est configuré pour la terminaison SSL, Communications Server passe du protocole https à http au cours de la redirection.

Solution

Ajoutez un équilibreur de charge logiciel entre l'équilibreur de charge matériel et Communications Server.

Fuites sur la connexion du socket avec SSL (6492477)

Description

À cause d'un bogue JVM, un problème de fuite survient avec certaines versions JDK lorsque security-enabled est défini sur true sur un listener HTTP. Les étapes de reproduction de ce bogue sont les suivantes :

  1. Définissez security-enabled sur true sur le listener HTTP :


    <http-listener acceptor-threads="1" address="0.0.0.0" 
    blocking-enabled="false" default-virtual-server="server" enabled="true" 
    family="inet" id=" http-listener-1" port="8080" security-enabled="true" 
    server-name="" xpowered-by="true">
  2. Commentez l'arrêt du domaine à la fin des tests quicklook.

  3. Exécutez les tests quicklook.

  4. Vérifiez l'utilisation du socket :


    netstat -an | grep 8080

    Les éléments suivants doivent être utilisés :


    *.8080               *.*                0      0 49152      0 LISTEN
    *.8080               *.*                0      0 49152      0 BOUND

Ce problème fait l'objet d'un suivi sur le site GlassFish https://glassfish.dev.java.net/issues/show_bug.cgi?id=849.

Solution

Procédez à une mise à niveau vers la dernière version de JDK.

Conteneur Web

Cette section décrit les problèmes connus liés au conteneur Web et les solutions associées.

Sous Windows, le déploiement d'une application à l'aide de --precompilejsp=true risque de verrouiller les fichiers JAR de celle-ci, eintraînant ainsi l'échec de l'annulation du déploiement ou du redéploiement ultérieur (5004315)

Description

Si vous devez effectuer une précompilation des pages JSP lors du déploiement d’une application sous Windows, les tentatives ultérieures de redéploiement ou d’annulation de déploiement de cette application (ou de toute autre application contenant le même ID de module) ne fonctionneront pas comme prévu. L’origine de ce problème provient du fait que la précompilation des pages JSP ouvre les fichiers JAR dans votre application, mais ne les referme pas. Windows empêche alors que le processus d’annulation du déploiement ne supprime ces fichiers ou que le processus de redéploiement ne les écrase.

Il est à noter que l’annulation du déploiement réussit partiellement dans la mesure où l’application est supprimée d’Application Server. Notez aussi qu'aucun message d'erreur n'est retourné par l'utilitaire asadmin, mais que le répertoire de l'application et les fichiers jar verrouillés ne sont pas supprimés du serveur. Le fichier journal du serveur contient les messages décrivant l'échec de la suppression des fichiers et du répertoire de l'application.

Toute tentative de redéploiement de l’application suite à l’annulation du déploiement échoue, car le serveur essaie en vain de supprimer le répertoire et les fichiers existants. Cela peut se produire si vous essayez de déployer une application qui utilise le même ID de module que celui de l'application initialement déployée. En effet, le serveur utilise cet ID de module lors de la sélection d'un répertoire destiné à contenir les fichiers de l'application.

Les tentatives de redéploiement de l'application sans annulation préalable du déploiement échouent pour les mêmes raisons.

Diagnostics

Si vous essayez de redéployer l’application ou de la déployer après avoir annulé son déploiement, l’utilitaire asadmin renvoie une erreur similaire à l'erreur ci-dessous.


An exception occurred while running the command. The exception 
message is: CLI171 Command deploy failed : Deploying application in 
domain failed; Cannot deploy. Module directory is locked and can't 
be deleted.

Solution

Ce problème ne se produit pas si vous définissez le paramètre par défaut --precompilejsps=false lors du déploiement d’une application. Lors de sa première utilisation, l'application déclenche la compilation des pages JSP. C'est pour cette raison que le temps de réponse de la première requête est supérieur à celui des requêtes suivantes.

Notez également qu’en cas de précompilation, vous devez arrêter et redémarrer le serveur avant d’annuler le déploiement de l’application ou de redéployer cette dernière. L’arrêt du serveur permet de libérer les fichiers JAR qui étaient verrouillés et d’effectuer correctement les opérations d’annulation du déploiement ou de redéploiement de l’application après le redémarrage.

Impossible de déployer les archives WAR avec le fichier web.xml basé sur Servlet 2.4, contenant un élément <load-on-startup> vide (6172006)

Description

L’élément facultatif load-on-startup inclus dans le fichier web.xml indique que le servlet correspondant doit être chargé et initialisé au démarrage de l'application Web à laquelle il appartient.

Le contenu facultatif de cet élément est un nombre entier précisant en quelle position le servlet doit être chargé et initialisé par rapport aux autres servlets de l'application Web. Lorsque l'élément <load-on-startup> est vide, l'ordre de démarrage du servlet est inutile tant que celui-ci est chargé et initialisé au cours du démarrage de l'application Web dont il dépend.

Le schéma Servlet 2.4 du fichier web.xml ne prend plus en charge les éléments <load-on-startup> vides, ce qui signifie que vous devez obligatoirement indiquer un nombre entier lorsque vous utilisez un fichier web.xml basé sur le composant Servlet 2.4. Si vous laissez l’élément <load-on-startup> vide, tel que <load-on-startup/>, le fichier web.xml ne parvient pas à valider le schéma Servlet 2.4 pour web.xml, provoquant l’échec du déploiement de l’application Web.

Problème de compatibilité ascendante : Vous pouvez néanmoins laisser l'élément <load-on-startup> vide pour un fichier web.xml basé sur le composant Servlet 2.3.

Solution

Définissez la valeur <load-on-startup>0</load-on-startup> lors de l'utilisation d'un fichier web.xml basé sur Servlet 2.4 afin d'indiquer que l'ordre de chargement du servlet n'est pas important.

Impossible de compiler la page JSP sur des serveurs limités en ressources (6184122)

Description

La page JSP est accessible mais ne peut pas être compilée. Le journal du serveur contient le message d’erreur "Impossible d'exécuter la commande" avec le suivi de pile suivant :


at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.
exec(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.
launch(Execute.java:416) 
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:427) 
at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.
executeExternalCompile(DefaultCompilerAdapter.java:448) 
at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute
(JavacExternal.java:81) 
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842) 
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682) 
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:396)

Solution

Définissez le commutateur de compilation JSP fork sur false.

Vous pouvez effectuer cette opération de l'une des deux manières suivantes:

Les deux paramétrages empêcheront ant de générer un nouveau processus pour la compilation javac .

Services Web

Cette section décrit les problèmes connus liés au conteneur Web et les solutions associées.

Échec de la commande wscompile avec l'erreur "package javax.xml.rpc does not exist" sous JDK6 u4 b3 (6638567)

Description

La tâche ant wscompile échoue pour JDK 6 Mise à jour 4. Pour chaque classe JAX-RPC API, le message d'erreur suivant s'affiche :


package package-name does not exist

Solution

Avant d'exécuter la tâche ant wscompile, assurez-vous que javaee.jar est spécifié dans le chemin de classe, et non pas j2ee.jar.