Sugerencias para la resolución de problemas
Consejos para la resolución de problemas del perfil Liberty.
Para ayudarle a identificar y resolver problemas, el producto tiene un componente de registro unificado. Consulte Inicio de sesión y rastreo. Puede utilizar también la herramienta de mandato IBM® Support Assistant Data Collector (ISADC) en el directorio ${wlp.install.dir}/bin para recopilar rápidamente los archivos de diagnóstico, como los archivos de anotaciones cronológicas o los archivos de configuración, o para ejecutar los rastreos.
Si recibe un mensaje de excepción, la información sobre el mensaje está disponible en Mensajes.
La documentación de la API Java™ para cada API de perfil Liberty se detalla en la sección Interfaces de programación (API) del Information Center, y también está disponible como un archivo .zip aparte en uno de los subdirectorios javadoc del directorio ${wlp.install.dir}/dev.

Para obtener detalles de las
principales restricciones conocidas que se aplican al utilizar el
perfil Liberty, consulte Problemas y restricciones conocidos del entorno de ejecución.
- Resolución de los JDK
- Resolución de problemas de seguridad
- Resolución de problemas de LDAP
- Resolución de problemas de SSL
- Resolución de problemas con CORBA/IIOP
- Resolución de problemas de registro y rastreo
Aplicación de fixpacks y arreglos temporales para una instalación de archivado
- Resolución de problemas de rendimiento
Compruebe que los JDK tienen un nivel soportado
Si experimenta problemas que no están explicados fácilmente, compruebe que los JDK que utiliza sean compatibles con Java Versión 6 o posterior, y estén al nivel de servicio actual. Consulte Niveles mínimos de Java soportados.
- Habilite la opción de máquina virtual siguiente: -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass
- Establezca la opción de infraestructura de Equinox para utilizar el bloqueo de nombre de clase para la carga de clases estableciendo la opción de configuración de Equinox siguiente: -Dosgi.classloader.lock=classname
Resolución de problemas de seguridad
En este apartado se describen algunos de los problemas comunes y las soluciones que puede elegir.
- SESN0008E: Un usuario autenticado como anónimo ha intentado acceder a una sesión propiedad del usuario: LdapRegistry/cn=steven,o=myCompany,c=US.
- Este error se produce cuando un usuario no autenticado intenta acceder a una sesión creada por un usuario autenticado. La seguridad de sesiones que está habilitada de forma predeterminada impide el acceso no autorizado a las sesiones. Sólo el usuario que ha creado una sesión puede acceder a ella. Consulte seguridad de sesiones para obtener más información.
Este error se puede producir cuando se utiliza un JSP (login.jsp, por ejemplo) para el formulario de inicio de sesión y la señal SSO enviada por el navegador ha caducado. Dado que el símbolo SSO ha caducado, se le solicita al usuario que inicie la sesión de nuevo utilizando la página login.jsp configurada para el formulario de inicio de sesión. De forma predeterminada, la página jsp intenta obtener una sesión. Esta sesión la ha creado originalmente el usuario cuya señal ha caducado. No obstante, la señal ha caducado y el usuario no está autenticado, y no se establecen las credenciales al acceder a esta sesión, lo que da como resultado este error.
Para evitar este error, reinicie el navegador que inicia una nueva sesión, o configure el archivo login.jsp para que no cree la sesión de forma predeterminada. Si elige actualizar el archivo login.jsp, establezca <%@ page session="false" %>.
- CWWKS9104A: Ha fallado la autorización del usuario {0} al invocar {1} en {2}. No se ha otorgado al usuario acceso para ninguno de los roles necesarios : {3}.
- Este error se produce cuando no tiene autorización para los roles necesarios para la aplicación. Asegúrese de que el usuario o el grupo al que pertenece esté correlacionado con al menos uno de los roles mencionados en el mensaje de error. Una correlación de usuario a rol definida en el archivo ibm-application-bnd.xmi/xml tiene prioridad sobre una correlación definida en el archivo server.xml . Compruebe los recursos para garantizar que se ha definido la correlación correcta. Consulte Configuración de la autorización para aplicaciones en el perfil Liberty.
- CWWKZ0013E: No se pueden iniciar dos aplicaciones denominadas {0} seguido de un comportamiento de seguridad inesperado y mensajes de error como CWWKS9104A.
- Este error se produce cuando especifica la aplicación en server.xml utilizando el elemento application y en la carpeta dropins. Como resultado, se intenta instalar la aplicación dos veces y la configuración de seguridad en el archivo server.xml puede que entre en vigor o no. Para solucionarlo, debe eliminar la aplicación de la carpeta dropins y copiarla en otro directorio. Si tiene que dejarla en la carpeta dropins, debe inhabilitar la supervisión de aplicaciones utilizando el código siguiente en el archivo server.xml:
<applicationMonitor dropinsEnabled="false"/>
- Un usuario no autenticado ha podido acceder a mi servlet o JSP.
- Un usuario con un principal de UNAUTHENTICATED (o el usuario no autenticado SAF en z/OS) se crea cuando falla la autenticación o cuando el servlet o JSP no está protegida. Un usuario no autenticado puede acceder a su servlet o JSP si no define las restricciones de seguridad o si se correlaciona el sujeto especial EVERYONE con el rol necesario para la aplicación. Revise las correlaciones de usuario a rol en los archivos ibm-application-bnd.xmi/xml y server.xml. Ejecute una de las siguientes opciones:
- Si el servlet o JSP no está protegido, añada restricciones de seguridad al descriptor de despliegue de la aplicación. Consulte Autenticación.
- Si no desea que cualquier usuario no autenticado acceda a la aplicación, elimine el sujeto especial EVERYONE de la correlación para dicho rol. Consulte Configuración de la autorización para aplicaciones en el perfil Liberty.
- Si un determinado usuario no puede estar autorizado para el servlet o JSP, revise si está correlacionado con ese rol analizando los archivos ibm-application-bnd.xmi/xml y server.xml. Puede correlacionar un rol con un usuario, grupo o sujeto especial. Si el rol está correlacionado con el sujeto especial EVERYONE, se otorga acceso a cualquier usuario. Si el rol está correlacionado con el sujeto especial ALL_AUTHENTICATED, se otorga acceso a cualquier usuario autenticado. Elimine estos sujetos especiales si desea limitar adicionalmente quién puede acceder a su servlet o JSP. Finalmente, compruebe a qué grupo pertenece el usuario. Aunque el usuario puede no tener acceso explícito, el grupo puede estar correlacionado con el rol. En este caso, elimine el usuario del grupo autorizado o elimine el grupo de la correlación de roles. Consulte Configuración de la autorización para aplicaciones en el perfil Liberty.
- El inicio de sesión único (SSO) no funciona.
- Si SSO no funciona, compruebe que los distintos servidores de perfiles Liberty que utilizan las mismas claves LTPA, contraseña y atributo ssoCookieName del elemento webAppSecurity tengan el mismo UTC (Universal Time) y compartan el mismo registro de usuarios. Asimismo, si la señal caduca o si la cookie se envía desde un navegador web después de cambiar el registro de usuario de un modo que es incoherente, como por ejemplo modificar el reino o eliminar el usuario que representa la cookie, el SSO fallará y se solicitará al usuario que vuelva a especificar la información de credencial. Consulte Personalización de la configuración SSO utilizando cookies LTPA para el perfil Liberty.
- Depuración de las API públicas de seguridad
- WSSecurityHelper y RegistryHelper se cargan aunque la seguridad no esté habilitada, por ejemplo, si no se especifica una característica de seguridad appSecurity-1.0, appSecurity-2.0 o zosSecurity-1.0. Si la seguridad no está habilitada, los métodos WSSecurityHelper.isServerSecurityEnabled() y WSSecurityHelper.isGlobalSecurityEnabled() devuelven el valor false y el método RegistryHelper.getUserRegistry() devuelve un nulo.
Puede que otras clases de la API pública de seguridad no se carguen si la seguridad no está habilitada. Si intenta acceder a estas clases e invoca un método en una de estas clases, puede obtener una excepción java.lang.NoClassDefFoundError.
-
Para no recibir las excepciones java.lang.NoClassDefFoundError, en primer lugar, debe comprobar si la seguridad está habilitada llamando a la claseWSSecurityHelper.isServerSecurityEnabled() o WSSecurityHelper.isGlobalSecurityEnabled() y llamando luego a otras clases de la API pública de seguridad sólo cuando la seguridad esté habilitada. Consulte API públicas de seguridad para obtener ejemplos de esta técnica de codificación.
- Nota: Este comportamiento es diferente de perfil completo. En perfil completo, todas las clases se cargan siempre independientemente de si la seguridad está habilitada o no.
- No se pueden autenticar usuarios con caracteres Unicode
- Para poder autenticar usuarios cuyos nombres contienen caracteres Unicode, debe establecer el tipo de codificación de caracteres utilizado por el
servidor de Liberty en UTF-8 añadiendo la opción de JVM siguiente al mandato de inicio del servidor:
-Dclient.encoding.override=UTF-8
También debe especificar charset y pageEncoding en la página de inicio de sesión. A continuación se muestra un ejemplo de especificación de estos parámetros en una página JSP de sesión:<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
java.lang.annotation.AnnotationFormatError: java.lang.IllegalArgumentException:Wrong type at constant pool index at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:87)
Este error se puede producir cuando un proveedor de OpenID Connect o OAuth utiliza un almacén de base de datos para el registro de clientes con algunas versiones de JDK 7.
Para evitar este problema, actualice a la versión 7.1 de JDK.
Resolución de problemas de LDAP
En este apartado se describen algunos de los problemas comunes de LDAP y las soluciones que puede elegir.
- FFDC1015I: Se ha creado un incidente FFDC : javax.naming.ServiceUnavailableException: myldapserver.mycompany.com:636; socket closed com.ibm.ws.security.registry.ldap.internal.LdapRegistry 298
- Este mensaje de messages.log indica que el servidor LDAP configurado no se puede localizar. Compruebe el servidor LDAP para verificar que esté en ejecución y que se pueda acceder a su dirección IP desde el servidor de perfiles Liberty.
- javax.naming.CommunicationException: ha fallado el enlace simple: myldapserver.mycompany.com:636 [La excepción raíz es javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.g: ha fallado la creación de la vía de acceso PKIX: java.security.cert.CertPathBuilderException: no se ha podido encontrar la vía de acceso de certificación válida para el destino solicitado]
- Si habilita SSL en el servidor LDAP sin copiar el firmante del servidor LDAP en el almacén de confianza referenciado en el elemento LDAPSSLSettings, una conexión con el servidor LDAP fallará con un error de reconocimiento de SSL. Asegúrese de que copia el firmante del servidor LDAP en el almacén de confianza.
- javax.naming.CommunicationException: myldapserver.mycompany.com:389 [La excepción raíz es java.net.BindException: La dirección ya se está utilizando: conectar]
- Este mensaje puede aparecer en los registros de FFDC e indica que los sockets utilizables en el servidor local se han agotado, lo que da como resultado un error durante la conexión con el servidor LDAP. Asegúrese de que no se utilice el socket e inténtelo de nuevo.
- CWWKS1100A: La autenticación no ha sido satisfactoria para el ID de usuario xxxxx. Se ha especificado un ID de usuario o una contraseña que no son válidos
- Esta excepción FFDC puede producirse en el servidor aunque el usuario mencionado en el mensaje sea un usuario válido en el servidor LDAP con una gran carga. Con la configuración LDAP, puede añadir la propiedad reuseConnection=false o inhabilitarla utilizando las herramientas del desarrollador. Para solucionar el problema, establezca esta propiedad en el valor predeterminado true.
Resolución de problemas de SSL
En este apartado se describen algunos problemas de SSL comunes y las soluciones que puede elegir.
- CWWKS9105E: No se ha podido determinar el puerto SSL para redirección automática.
- Este error se produce cuando intenta acceder a una aplicación que redirige a un puerto SSL y el puerto SSL no está disponible. El puerto podría no estar disponible debido a que falta la configuración SSL o a algún error en la definición de configuración SSL. Compruebe la configuración SSL en el archivo server.xml para asegurarse de que existe y es correcta. Consulte Protección de las comunicaciones con el perfil Liberty.
- FFDC1015I: Se ha creado un incidente FFDC: "java.lang.IllegalArgumentException: Configuración incompleta desconocida: falta el campo de ID com.ibm.ws.config.internal.cm.ManagedServiceFactoryTracker aSyncReadNupdate. Se ha generado una excepción al intentar la leer la configuración y actualizar ManagedServiceFactory. Excepción = java.lang.IllegalArgumentException: Configuración desconocida, incompleta: falta el campo de ID" en ffdc_12.04.18_16.09.42.0.log
- Este error se produce cuando existe un elemento keystore en la configuración sin un campo de ID. Si utiliza una configuración SSL mínima, establezca el ID de campo en defaultKeyStore.
- Se producirá una excepción si utiliza un registro de usuarios LDAP con sslEnabled y no se especifica un valor sslRef.
- Por ejemplo, supongamos que una configuración tiene sslEnabled
establecido en true, pero no existe un valor sslRef, como se muestra en
el ejemplo siguiente:
<ltldapRegistry id="ldap" realm="SampleLdapIDSRealm" host="ccwin12.austin.ibm.com" port="636" ignoreCase="true" baseDN="o=ibm,c=us" bindDN="cn=root" bindPassword="rootpwd" ldapType="IBM Tivoli Directory Server" idsFilters="ibm_dir_server" sslEnabled="true" searchTimeout="8m" />
Debe especificar un valor sslRef. Si está utilizando una configuración SSL mínima similar a la siguiente:
el campo sslRef debe establecerse en defaultSSLConfig.<ltkeyStore id="defaultKeyStore" location="key.jks" password="mypassword" />
Si se ha configurado una configuración SSL personalizada, el nombre de la configuración debe colocarse en el campo sslRef.
- Si utiliza un JDK de WebSphere Application Server, es posible que vea el error siguiente si SSL está habilitado en el servidor de Liberty.
-
java.net.SocketException: java.lang.ClassNotFoundException: No se encuentra la clase especificada com.ibm.websphere.ssl.protocol.SSLSocketFactory at javax.net.ssl.DefaultSSLSocketFactory.a(SSLSocketFactory.java:11) at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:6) at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:161) at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:36) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:390) at com.ibm.net.ssl.www2.protocol.https.b.getResponseCode(b.java:75) at com.ibm.ws.jmx.connector.client.rest.internal.RESTMBeanServerConnection.loadJMXServerInfo(RESTMBeanServerConnection.java:142) at com.ibm.ws.jmx.connector.client.rest.internal.RESTMBeanServerConnection.<init>(RESTMBeanServerConnection.java:114) at com.ibm.ws.jmx.connector.client.rest.internal.Connector.connect(Connector.java:315) at com.ibm.ws.jmx.connector.client.rest.internal.Connector.connect(Connector.java:103)
Este error se produce porque las fábricas de sockets SSL de WebSphere Application Server no están admitidas en el perfil Liberty. Para omitir este problema, siga estos pasos:- Cree un archivo de texto como, por ejemplo, my.java.security con las siguientes dos entradas vacías:
ssl.SocketFactory.provider= ssl.ServerSocketFactory.provider=
- Cree un archivo jvm.options para el servidor de Liberty.
- Añada la siguiente propiedad al archivo jvm.options, que incluye la vía de acceso completa al archivo de texto que acaba de crear
-Djava.security.properties=fullPathTo/my.java.security
- Si desea que sea más reutilizable, puede poner el archivo my.java.security en el directorio del servidor y podrá utilizar una vía de acceso relativa como la siguiente:
-Djava.security.properties=./my.java.security
Para obtener más información, consulte Personalización del entorno del perfil Liberty.
- Cree un archivo de texto como, por ejemplo, my.java.security con las siguientes dos entradas vacías:
Resolución de problemas con CORBA/IIOP
En este apartado se describen algunos de los problemas comunes de CORBA y las soluciones que puede elegir.
- Si utiliza JDK desde WebSphere Application Server, puede que le aparezca el siguiente error si la aplicación utiliza comunicaciones CORBA/IIOP.
15:21:58.096 com.ibm.rmi.pi.InterceptorManager runPreInit:178 Init Process ORBRas [default] java.lang.ClassNotFoundException: com.ibm.ISecurityLocalObjectBaseL13Impl.CSIClientRI at com.ibm.CORBA.iiop.UtilDelegateImpl.loadClass(UtilDelegateImpl.java:685) at javax.rmi.CORBA.Util.loadClass(Util.java:246) at com.ibm.rmi.pi.InterceptorManager.runPreInit(InterceptorManager.java:172) at com.ibm.rmi.corba.ORB.initializeInterceptors(ORB.java:664) at com.ibm.CORBA.iiop.ORB.initializeInterceptors(ORB.java:1084) at com.ibm.rmi.corba.ORB.orbParameters(ORB.java:1359) at com.ibm.rmi.corba.ORB.set_parameters(ORB.java:1271) at com.ibm.CORBA.iiop.ORB.set_parameters(ORB.java:1694) at org.omg.CORBA.ORB.init(ORB.java:371) ...
Este error se produce porque los interceptores ORB (Object Request Broker - Intermediario para solicitudes de objetos) de WebSphere Application Server no reciben soporte del perfil Liberty. Puede resolver este problema editando el archivo orb.properties desde JDK para no utilizar estos interceptores. Este archivo se suele hallar en el directorio <JAVA_HOME>/jre/lib directory de WebSphere, aunque puede que se haya alterado temporalmente con una copia en el directorio <USER_HOME> del usuario. En el ejemplo siguiente se muestran las líneas en el archivo orb.properties que se deben descomentar:
# WS Interceptors #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.Transaction.JTS.TxInterceptorInitializer #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ejs.ras.RasContextSupport #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.ClientRIWrapper #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.activity.remote.cos.ActivityServiceClientInterceptor #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.CSIClientRI #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.debug.olt.ivbtrjrt.OLT_RI #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.wlm.client.WLMClientInitializer # WS ORB & Plugins properties #com.ibm.ws.orb.transport.ConnectionInterceptorName=com.ibm.ISecurityLocalObjectBaseL13Impl.SecurityConnectionInterceptor
Resolución de problemas de registro y rastreo
En esta sección se describen algunos problemas comunes con el registro y el rastreo.
- java.util.logging -- interfaz de programación de registro Java.
- El perfil Liberty no da soporte a la utilización del archivo logging.properties para configurar java.util.logging. Utilice el código java, por ejemplo en una aplicación desplegada o la característica de usuario, para crear y añadir manejadores , filtros o formateadores de java.util.logging.
- Puesto que el servidor de perfiles Liberty gestiona los niveles del registrador java.util.logging de acuerdo con el atributo traceSpecification del elemento de configuración de registro, debería evitar utilizar el método Logger.setLevel.


Aplicación de fixpacks y arreglos temporales para una instalación de archivado
Si ha instalado el entorno de ejecución del perfil Liberty desde un archivo de archivado, en lugar de mediante Installation Manager, debe tomar medidas especiales cuando aplique las actualizaciones de servicio. Para obtener más información, consulte los apartados Aplicación de un fixpack a una instalación de archivado Java de perfil Liberty y Aplicación de un arreglo temporal a una instalación de archivado de perfil Liberty.
Resolución de problemas de rendimiento
En este apartado se describen algunos de los problemas comunes de rendimiento y las soluciones que puede elegir.
- Uso elevado de CPU por parte del supervisor de aplicaciones.
-
Este error se puede producir si su supervisor de aplicaciones tiene demasiados archivos en el directorio apps/ y está realizando sondeos con demasiada frecuencia.
Para evitar este problema, hay bastantes cosas que puede cambiar.
- Aumente el valor del atributo pollingRate.
- Actualice server.xml para que incluya un elemento applicationMonitor con un valor updateTrigger que no sea polled.
server.xml <applicationMonitor updateTrigger="mbean" />
- Reduzca el número de archivos del directorio apps/.
Para obtener más información sobre el elemento applicationMonitor, consulte Control de las actualizaciones dinámicas.