© Copyright International Business Machines Corporation 2006. Reservados todos los derechos. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
Al importar un proyecto de portal de ejemplo o crear un proyecto de portal utilizando el asistente "Proyecto de portal nuevo" de la Galería de ejemplos, aparecerá un mensaje de aviso de enlace roto en la vista Problemas.
En esta versión de Rational® Developer, Portal Designer sólo soporta visualizaciones en HTML, cHTML y WML. Si ha especificado otros lenguajes de códigos soportados para una página o etiqueta en un proyecto importado, dichos lenguajes de códigos estarán soportados para la visualización en Rational Developer pero no será posible editarlos. Estos lenguajes de códigos no aparecerán en la vista Propiedades.
A no se que asigne una paleta de colores a una página, se utilizará la paleta de colores predeterminada en WebSphere® Portal 6. Sin embargo, en Portal Designer, cuando no se especifica ninguna paleta de colores, se utilizará la paleta de colores de la página ancestro en lugar de la paleta predeterminada.
En el asistente Proyecto de portal nuevo, la selección de una versión del servidor de portal no actualiza automáticamente el tiempo de ejecución de destino. La versión del servidor de portal y la configuración del tiempo de ejecución de destino deben sincronizarse manualmente. Por ejemplo, debe seleccionar Tiempo de ejecución de WebSphere Portal v6.0 para una versión 6.0.0.x del servidor de portal y seleccionar Tiempo de ejecución de WebSphere Portal v5.1 para una versión 5.1.0.x del servidor de portal. Si la versión del tiempo de ejecución de destino no está sincronizada con la versión del portal, es posible que el servidor de portal se corrompa cuando se despliegue el proyecto del portal.
En WebSphere Portal v6.0, al editar archivos JSP de tipo de contenido CSS, como por ejemplo styles.jsp o styles_theme.jspf, con un diálogo Estilos, es posible que se visualicen expresiones JSP en el diálogo. Estas expresiones JSP no se pueden modificar en el diálogo; debe modificarlas en el panel fuente del Diseñador CSS.
En un portlet Faces JSR 168, si utiliza alguna de las siguientes herramientas para generar un cliente de servicio en un JSP Faces, el código de la página generada no funcionará correctamente en WebSphere Portal 6.0 ó 5.1. Las herramientas afectadas incluyen:
- Vista Datos de página
- Bean Java™ (con invocación de método)
- Servicio Web
- Bean de sesión EJB
- Vista Paleta
- Bean Java (con invocación de método)
- Servicio Web
- Bean de sesión EJB
- Insertar -> Datos desde el menú contextual de Page Designer o desde el menú Ventanas
- Bean Java (con invocación de método)
- Servicio Web
- Bean de sesión EJB
Este problema lo causa la nueva implementación del tiempo de ejecución de portlet Faces JSR168 contenido en el archivo jsf-portletbridge.jar, que es diferente de la anterior.
En la nueva implementación, los beans de código de página para los JSP de Faces, cuando se declaran como beans gestionados de ámbito de petición, no persisten entre la fase Acción del portlet y la fase Representador. En el código del cliente de servicios Web generado, el bean de código de página se utiliza para almacenar en la memoria caché el resultado del servicio Web durante la fase Acción. Pero, al estar en el ámbito de la petición, se crea una nueva instancia durante la fase Representador. Por lo tanto, el resultado que se almacena en la memoria caché se pierde.
Hay dos posibles soluciones:
- Colocar en el bean en el ámbito de sesión (esto se configura en el archivo faces-config.xml). Simplemente debe modificar una línea en el archivo de configuración.
- Esta opción no es tan simple como la primera pero es la manera preferida de implementar clientes de servicios Web en portlets JSR168. Cumple los procedimientos recomendados de la programación de portlets JSR168 y permite un soporte mucho más eficiente del botón Atrás y de la creación de favoritos.
- Si necesita invocar el servicio Web durante la fase de Acción, por ejemplo, dependiendo del resultado del servicio se navegarán en páginas de destino diferencias, y tendrá que cambiar la manera en que se almacenan en la memoria caché los resultados. En lugar de utilizar una variable local en el bean de código de página, utilice el parámetro de representación o la sesión de portlet. Es preferible utilizar parámetros de representación para pasar información de la fase Acción a la fase Representador, aunque sólo soporta valores de series. Si el resultado es de un tipo complejo, deberá entonces utilizar la sesión de portlet en su lugar.
- A continuación puede observar un fragmento de código de ejemplo que establece valores para los parámetros de representación desde dentro de un método de acción JSF en el bean de código de página:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- A continuación puede observar un fragmento de código de ejemplo que establece valores en una sesión de portlet sesión desde entro de un método de acción JSF en el bean de código de página:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- O bien, si no es necesario invocar el servicio durante la fase Acción, puede retrasar la invocación del servicio al método getter para el bean de resultado de servicio Web. En el método de acción JSF, coloque el valor de entrada en un parámetro de petición de representación si es una serie, o una sesión de portlet si el valor de entrada es de un tipo complejo. A continuación, recupérelo del método getter para el bean de resultado del servicio Web, para que pueda ser utilizado para invocar el servicio.
- A continuación puede observar un fragmento de código de ejemplo que establece el valor de entrada en un parámetro de representación dentro del método de acción JSF en el bean de código de página:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- A continuación puede observar un fragmento de código que recupera el valor de entrada dentro del método getter del resultado:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
String inputValue = request.getParameter("inputValue");
- Tenga en cuenta que utilizar el parámetro de representación para pasar información a la fase de representación también conlleva la ventaja adicional que un soporte más eficiente del botón Atrás y de la creación de favoritos.
Cuando se importa un proyecto de portal es posible que aparezca un recuadro de mensaje de pregunta: "Los siguientes archivos del espacio de trabajo son incompatibles con el editor. ¿Desea actualizar el editor con el contenido del espacio de trabajo?". Pulse Sí.
El ID de aplicación del portal es opcional de acuerdo con la especificación de JSR 168 pero Rational® Developer no publica correctamente portlets sin ID. Rational Developer no genera portlets sin dichos ID. Es posible que se cree un portlet si importa un portlet de otro origen. Para solucionar este problema, abra el descriptor de despliegue del portlet del proyecto y añada un ID de aplicación de portlet en la pestaña Origen. Por ejemplo:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="ESCRIBA_EL_ID_AQUÍ">
...
</portlet-app>
Si se detecta el estado del servidor como Detenido cuando el servidor se está ejecutando, compruebe primero que los puertos del conector SOAP/RMI son los correctos y que las credenciales de seguridad de WebSphere que está utilizando son las correctas en el editor de servidores. Si los valores no son correctos el estado del servidor nunca será detectado como Iniciado. Si son correctos y el estado del servidor permanece como Detenido, existen un problema en la coexistencia de WebSphere Application Server v6.1 y WebSphere Portal v6.0.
La situación más común es tener el servidor de WebSphere Application Server 6.1 instalado en el sistema local e iniciar un nuevo espacio de trabajo. En este nuevo espacio de trabajo una instancia de servidor de WebSphere Application Server 6.1 se creará de forma automática y esto impedirá que la detección del estado de Portal 6.0 funcione correctamente. También puede producirse si crea un servidor de WebSphere Application Server v6.1 y, a continuación, crea un servidor de Portal 6.0.
La solución es reiniciar el producto de Rational con el mismo espacio de trabajo. La instancia de servidor de Portal 6.0 debería funcionar correctamente siempre que el servidor de WebSphere Application Server 6.1 no esté inicializado, es decir, que su estado esté en blanco en lugar de Detenido o Iniciado.
Los portlets no aparecen en las páginas después de ejecutar o desplegar el proyecto Mi portal en Portal 6.0. Para minimizar el efecto de este problema, despliegue sólo la configuración siempre que no sea necesario realizar un despliegue completo.
Si experimenta el problema, intente ejecutar un despliegue de sólo configuración del proyecto de portal sin desplegar ningún portlet. Esto generalmente permite que el portal vuelva a representar los portlets correctamente.
Si está creando un nuevo mensaje de proceso comercial y el archivo WDSL es de estilo Document-Literal, los nombres de mensajes de entrada y salida pueden no mostrarse en la segunda página del asistente. Todavía podrá seleccionarlos y ver los mensajes en la parte derecha del asistente. El código generado será correcto independientemente del hecho de que los nombres de mensajes no aparezcan en el asistente.
Si está utilizando el asistente cooperativo para crear portlets de origen o de destino y el proyecto de portlet JSR 168 contiene varios tipos de portlets, como un portlet básico y un portlet struts, es posible que el parámetro de acción predeterminado en el asistente no sea correcto.
En los portlets básicos y Faces, el parámetro de acción predeterminado debe ser ACTION_NAME_PARAM, pero es posible que el usuario seleccione un valor distinto.
En struts, el parámetro de acción debe ser spf_strutsAction.
Estos los son los valores predeterminados del nombre exclusivo en los contenedores de página de tarea:
WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksEn Portal Designer, cuando se utiliza otra página con un nombre exclusivo diferente de los listados anteriormente, la página no se reconocerá como una página de contenedor de página de tareas en WebSphere Portal después del despliegue.
Método alternativo: Después del despliegue, cambie el valor del parámetro TaskPageContainerUniqueName en el portlet Mis tareas utilizando estos pasos:
1. Abra Administración > Gestión de portlets > Portlets
2. Para el portlet Mis tareas, pulse el botón Configurar portlet
3. En el parámetro TaskPageContainerUniqueName, pulse Editar.
4. Cambie el valor al nuevo nombre exclusivo en Portal Designer utilizando estos valores:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Pulse Aceptar.
Si un proyecto de portal se ha migrado desde Rational Developer 6.x a un espacio de trabajo de Rational Developer 7.0, es posible que se produzca un error de despliegue con una excepción NoModuleFileException. Cuando suceda esto, lleve a cabo el siguiente procedimiento para corregir el problema.
- Este procedimiento asume que ya se ha generado un proyecto EAR "wps" a partir de la operación de despliegue del proyecto de portal con error.
- Abra el archivo application.xml en el proyecto EAR wps recién generado.
- Compruebe que el contenido del archivo application.xml tenga el siguiente aspecto:
<module id="WebModule_1163447032109">
<web>
<web-uri>wps.war</web-uri>
<context-root>wps</context-root>
</web>
</module>
<module id="WebModule_WSRP">
<web>
<web-uri>wps_facade.war</web-uri>
<context-root>/wsrp</context-root>
</web>
</module>
<module id="EjbModule_1">
<ejb>wp.scheduler.ejb.jar</ejb>
</module>
<security-role id="SecurityRole_1">
<description>Everyone in the enterprise.</description>
<role-name>Everyone Role</role-name>
</security-role>
<security-role id="SecurityRole_2">
<description>Todos los usuarios autenticados en la empresa.</description>
<role-name>All Role</role-name>
</security-role>
<security-role id="SecurityRole_3">
<description>No hay usuarios en la empresa.</description>
<role-name>No Role</role-name>
</security-role>
- Con más detalles, el contenido debe
- contener una definición de módulo Web para wps.war con el valor de content-root establecido en "wps".
- no contener más de una definición de módulo Web con el valor de content-root establecido en "wps".
- contener una definición de módulo Web para wps_facade.war con el valor de content-root establecido en "/wsrp.
- contener una definición de módulo ejb para wp.scheduler.ejb.jar.
- contener definiciones de rol de seguridad para los roles "Todos", "Todos los roles" y "Sin rol".
- Guarde y vuelva a realizar la publicación.
Debido a una versión antigua de jsf-ibm.jar incluida con WebSphere Portal 6.0, algunos componentes JSF no se representan correctamente en portlets si la modalidad de cargador de clase está establecida en PARENT_FIRST en el módulo Web del portlet. Esto se debe a que cuando la modalidad del cargador de clase está establecida en PARENT_FIRST, se utilizará el archivo jsf-ibm.jar en WebSphere Portal 6.0 en lugar de la copia contenida en el módulo Web del portlet.
Sólo los componentes en jsf-ibm.jar, que corresponden con el URI http://www.ibm.com/jsf/html_extended, se ven afectados. Los portlets de IBM Faces y Faces JSR168 se ven afectados.
La modalidad de cargador de clase del módulo Web del portlet se establecerá en PARENT_FIRST en las siguientes situaciones y, por lo tanto, debe modificarse:
Para solucionar este problema, abra el archivo application.xml en el proyecto EAR que contiene el proyecto de portlet y abra la pestaña "Despliegue". En la sección "Aplicación", busque el árbol que muestra el EAR y el proyecto de portlet . Seleccione el proyecto de portlet y cambie la "Modalidad de cargador de clases" de "PARENT_FIRST" a "PARENT_LAST". Es posible que necesite volver a publicar la aplicación para que el cambio surta efecto en el servidor de destino.
- cuando el portlet sea desplegado por Rational Developer v7.
- cuando se instale por primera vez el portlet en in WebSphere Application Server utilizando el EAR y se configure entonces en WebSphere Portal utilizando el mandato xmlAccess.
Si el portlet se instala directamente en WebSphere Portal utilizando el WAR, en la página de administración de WebSphere Portal o utilizando el mandato xmlAccess, la modalidad de cargador de clase ya estará establecida en PARENT_LAST. En este caso el portlet funcionará correctamente sin ningún método temporal.
Cuando un proyecto de portal 5.1.0.1 creado utilizando Rational Developer 6.x se importa utilizando Intercambio de proyectos en un espacio de trabajo de Rational Developer 7.0, es posible que "Ejecutar en WebSphere Portal v5.1 Test Environment" falle.
Método alternativo: modifique el archivo .portalsettings utilizando estos pasos:
1. Abra Ventana > Abrir perspectiva > Otras... .
2. Seleccione Recurso y pulse Aceptar en el diálogo Abrir perspectiva.
3. Expanda el proyecto de portal en la vista Navegador.
4. Seleccione el archivo .portalsettings y ábralo con el Editor de texto.
5. Inserte lo siguiente.
<?xml version="1.0" encoding="UTF-8"?>
<portalSettings>
<portal-version version="5.1.0.1"/>
<portlets-ear-project portlets-ear-project-name=""/>
<process-integration mytaskspage-uniquename="wps.MyTasks"/>
</portalSettings>
La posibilidad "Desarrollador de Web (avanzado) necesita activarse para ver el asistente Importar portal y los ejemplos de portlet (de la Galería de ejemplos). Para habilitar la posibilidad vaya a Ayuda> Bienvenida, y pulse el botóin "Habilitar roles" que se encuentra en la esquina de la pantalla. A continuación seleccione el rol "Desarrollador de Web (avanzado)" para activarlo. Vuelva a iniciar el asistente o la Galería de ejemplos para que los cambios surtan efecto.