© 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 portal de ejemplo o crear un proyecto de portal utilizando el asistente "Proyecto de portal nuevo" de la Galería de ejemplos, aparece un mensajes de aviso de enlace roto en la vista Problemas.
En eta versión de Rational® Developer, Portal Designer solo soporta visualizaciones en HTML, cHTML y WML. Si ha especificado otros lenguajes de códigos soportados para una página o etiqueta de un proyecto importado, Rational Developer soporta estos códigos pero no puede editarlos. Estos lenguajes de códigos no se visualizarán en la vista Propiedades.
A menos que asigne una paleta de colores a una página, la paleta de colores predeterminada se utiliza en WebSphere® Portal 6. Sin embargo en Portal Designer, cuando no se especifica la paleta de colores, se utiliza la paleta de colores de la página ancestro en lugar de la paleta predeterminada.
En el asistente Proyecto de portal nuevo, al seleccionar una versión de servidor de portal no se actualiza automáticamente el tiempo de ejecución destino. Los valores de tiempo de ejecución destino y la versión del servidor del portal deben sincronizarse manualmente. Por ejemplo, debe seleccionar un tiempo de ejecución WebSphere Portal v6.0 para un servidor de portal, versión 6.0.0.x, y debe seleccionar un tiempo de ejecución WebSphere Portal v5.1 para un servidor de portal, versión 5.1.0.x. Si la versión de tiempo de ejecución destino no está sincronizada con la versión de portal, el servidor de portal puede dañarse o inutilizarse cuando se despliega el proyecto de portal.
En WebSphere Portal v6.0, al editar los archivos JSP de tipo de contenido CSS, como por ejemplo styles.jsp o styles_theme.jspf con un diálogo Estilos, las expresiones JSP aparecerán en el diálogo. Estas expresiones JSP no pueden modificarse en el diálogo, debe modificarlas en el panel de código fuente de CSS Designer.
Para un portlet Faces JSR168, si utiliza cualquiera de las herramientas siguientes para generar un cliente de servicio en un JSP Faces, el código de página generado 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 del menú de contexto de Page Designer o del menú de Windows
- Bean Java (con invocación de método)
- Servicio Web
- Bean de sesión EJB
Esto está causado por la nueva implementación de tiempo de ejecución de portlet Faces JSR168 contenida en el archivo jsf-portletbridge.jar, que es diferente a lo que era antes.
En la implementación nueva, los beans pagecode de los JSP Faces, cuando se declaran como beans gestionados de ámbito de petición no persiste entre la fase de acción y la fase de representación del portlet. En el código de cliente de servicios Web, el bean pagecode se utiliza para poner en memoria caché el resultado del servicio web durante la fase de acción. Pero puesto que está en el ámbito de petición, se crea una instancia nueva durante la fase de representación. Por lo tanto, se pierde el resultado de la memoria caché.
Hay dos soluciones posibles:
- Ponga el bean en ámbito de sesión (esto está configurado en faces-config.xml). Esto es tan simple como cambiar una línea del archivo de configuración.
- Esto no es tan simple como el número 1, pero es la forma preferida de implementar el cliente de servicios en los portlets JSR168. Esto sigue los procedimientos recomendados de la programación de portlets JSR168 y permite un mejor soporte del botón de retroceder y de favoritos.
- Si es necesario invocar el servicio web durante la fase de acción, por ejemplo, según el resultado del servicio se navegará una página destino diferente, deberá cambiar la forma en que se pone el resultado en memoria caché. En lugar de utilizar una variable local en el bean pagecode, utilice el parámetro de representación o la sesión de portlet. La utilización de parámetros de representación es la forma preferida de pasar información de la fase de acción a la fase de representación, aunque solo soporta valores de serie. Si el resultado es de tipo complejo, debe utilizar la sesión de portlet en su lugar.
- A continuación se proporciona un fragmento de código de ejemplo para establecer valores para parámetros de representación del método de acción JSF en el código pagecode:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- A continuación se proporciona un fragmento de código de ejemplo para establecer valores para sesión de portlet del método de acción JSF en el código pagecode:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- O bien, si no es necesario invocar el servicio durante la fase de acción, puede diferir la invocación del servicio al método de obtención para el bean de resultado de servicio. En el método de acción JSF, ponga el valor de entrada en un parámetro de petición de representación si es una serie o en un portlet de sesión si el valor de entrada es de tipo complejo. A continuación, recupérelo del método de obtención para el bean de resultado de servicio web, para que pueda utilizarse para invocar el servicio.
- A continuación se proporciona un fragmento de código de ejemplo para establecer el valor de entrada de un parámetro de representación en el método de acción JSF del bean pagecode:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- A continuación se proporciona un fragmento de código de ejemplo para recuperar el valor de entrada del método de obtención para el 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 tiene la ventaja adicional de proporcionar un mejor soporte del botón retroceder y de favoritos del navegador.
Al importar un proyecto de portal puede aparecer un recuadro de mensaje con esta solicitud: "Los archivos siguientes del espacio de trabajo no son coherentes con el editor. Actualice el editor con el contenido del espacio de trabajo". Pulse Sí.
El ID de aplicación de portlet es opcional según la especificación JSR 168 pero Rational® Developer no publica correctamente los portlets que no tienen ID. Rational Developer no genera portlets sin estos ID. Es posible que se cree un portlet si importa un portlet de otro origen. Para solucionar este problema, abra el descriptor de despliegue de portlet para el proyecto y añada un ID de aplicación de portlet a la pestaña de origen. Por ejemplo:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="ESPECIFIQUE_AQUÍ_SU_ID">
...
</portlet-app>
Si el estado del servidor aparece como Detenido cuando el servidor esté ejecutándose, asegúrese de que los puertos del conector SOAP/RMI sean correctos y de que las credenciales de seguridad de WebSphere que esté utilizando sean correctas en el editor del servidor. Si no son correctas, el estado del servidor nunca aparecerá como Iniciado. Si son correctas y el estado del servidor sigue siendo Detenido, es posible que haya un problema con la coexistencia de WebSphere Application Server v6.1 y WebSphere Portal v6.0.
El caso de ejemplo más común es que el servidor WebSphere Application Server 6.1 esté instalado en el sistema local y que empiece con un espacio de trabajo nuevo. En este espacio de trabajo nuevo, se creará y se inicializará automáticamente una instancia de servidor WebSphere Application Server 6.1 y esto impedirá que la detección de estado de Portal 6.0 funcione adecuadamente. También puede ocurrir si crea un servidor WebSphere Application Server v6.1 y después crea un servidor Portal 6.0.
La solución consiste en reiniciar el producto Rational con el mismo espacio de trabajo. La instancia del servidor Portal 6.0 debe funcionar correctamente mientras el servidor WebSphere Application Server 6.1 no se haya inicializado, es decir mientras su estado permanezca en blanco en lugar de Detenido o Iniciado.
Los portlets no se muestran en páginas después de ejecutar o desplegar mi proyecto de portal en Portal 6.0. Para minimizar el efecto sobre este aspecto, utilice el despliegue de solo configuración siempre que el despliegue completo no sea necesario.
Si encuentra el problema, intente ejecutar un despliegue solo de configuración en el proyecto de portal sin desplegar portlets. Esto normalmente habilita el portal para volver a representar correctamente los portlets.
Si está creando un mensaje de proceso empresarial y el archivo WSDL está en estilo de literal de documento, los nombres de mensaje de entrada y salida no se visualizarán en la segunda página del asistente. Todavía puede seleccionarlos y ver los detalles de mensaje en el lado derecho del asistente. El código generado será correcto a pesar del hecho de que los nombres de mensaje no se muestren en el asistente.
Si está utilizando el asistente cooperativo para crear portlets origen o destino y el proyecto de portlet JSR 168 contiene varios tipos de portlet como por ejemplo un portlet básico y un portlet struts, el parámetro de acción predeterminado del asistente puede ser incorrecto.
En los portlets básicos y faces, el parámetro de acción predeterminado debe ser ACTION_NAME_PARAM, pero el usuario puede seleccionar un valor diferente.
En Struts, el parámetro de acción debe ser spf_strutsAction.
Estos son los valores predeterminados para el nombre exclusivo en los contenedores de página de tareas:
WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksEn Portal Designer, cuando utiliza otra página con un nombre exclusivo diferente de los anteriores, la página no se reconoce como página contenedora de página de tareas en WebSphere Portal después del despliegue.
Solución: después del despliegue, cambie el valor del parámetro TaskPageContainerUniqueName en el portlet Mis tareas mediante estos pasos:
1. Abrir administración > Gestión de portlets > Portlets
2. Para el portlet Mis tareas, pulse el botón Configurar portlet
3. Para el parámetro TaskPageContainerUniqueName, pulse Editar.
4. Cambie el valor por el nombre exclusivo nuevo en Portal Designer mediante estos valores:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Pulse Aceptar.
Si un proyecto de portal se migró del espacio de trabajo de Rational Developer 6.x a Rational Developer 7.0, causará una anomalía en el despliegue con una excepción NoModuleFileException. Cuando esto ocurra, siga este procedimiento para corregir el problema.
- Este procedimiento da por supuesto que el proyecto EAR de "wps" ya se ha generado a partir de la operación de despliegue del proyecto de portal anómalo.
- Abra el archivo application.xml en el proyecto EAR de wps recién generado.
- Asegúrese de que el contenido de application.xml tenga el aspecto siguiente:
<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>Todo el mundo en la empresa.</description>
<role-name>Rol Todo el mundo</role-name>
</security-role>
<security-role id="SecurityRole_2">
<description>Todos los usuarios autenticados de la empresa.</description>
<role-name>Rol Todos</role-name>
</security-role>
<security-role id="SecurityRole_3">
<description>Ningún usuario de la empresa.</description>
<role-name>Ningún rol</role-name>
</security-role>
- Más específicamente, debería
- contener una definición de módulo web para wps.war con el valor content-root establecido en "wps".
- no contener más de una definición de módulo web con el valor de raíz de contenido establecido en "wps".
- contener una definición de módulo web para wps_facade.war con el valor 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 "Rol Todo el mundo", "Rol Todos" y "Ningún rol".
- Guarde y vuelva a publicar.
Debido a una versión obsoleta del archivo jsf-ibm.jar proporcionado con WebSphere Portal 6.0, algunos componentes JSF no se representan correctamente en portlets si la modalidad de cargador de clases se establece en PARENT_FIRST en el módulo web del portlet. Esto es así porque la modalidad de cargador de clases se establece en PARENT_FIRST y después se utiliza jsf-ibm.jar en WebSphere Portal 6.0 en lugar de la copia contenida en el módulo web del portlet.
Sólo se ven afectados los componentes de jsf-ibm.jar correspondientes a uri http://www.ibm.com/jsf/html_extended. Se ven afectados los portlets IBM Faces y JSR168 Faces.
La modalidad de cargador de clases del módulo web se establecerá en PARENT_FIRST bajo las situaciones siguientes y por lo tanto deberá cambiarse:
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". Deberá volver a publicar la aplicación para que el cambio surta efecto sobre el servidor destino.
- cuando el portlet lo despliegue Rational Developer v7.
- cuando el portlet se instale primero en WebSphere Application Server mediante el EAR y después se configure en WebSphere Portal mediante el mandato xmlAccess.
Si el portlet se instala directamente en WebSphere Portal mediante el WAR, ya sea en la página de administración de WebSphere Portal o mediante el mandato xmlAccess, la modalidad de cargador de clases ya se establece en PARENT_LAST. En este caso el portlet funcionará correctamente sin necesidad de ninguna solución.
Cuando un proyecto de portal 5.1.0.1 creado mediante Rational Developer 6.x se importa con Intercambio de proyectos en un espacio de trabajo de Rational Developer 7.0, "Ejecutar en Entorno de prueba de WebSphere Portal v5.1" puede fallar.
Solución: modifique el contenido del archivo .portalsettings siguiendo estos pasos:
1. Abra Ventana > Abrir perspectiva > Otras... .
2. Seleccione Recursos 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 abra con el Editor de textos.
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 Web (avanzado) debe desactivarse para ver el asistente Importar portal y los ejemplos de portal y de portlet (de la Galería de ejemplos.) Para habilitar la posibilidad, vaya a Ayuda > Bienvenida, en la Bienvenida pulse el botón "Habilitar cometidos" que se carga en la esquina de la pantalla. A continuación seleccione el cometido "Desarrollador Web (avanzado)" para activarlo. Reinicie el asistente o la Galería de ejemplos para que los cambios surtan efecto.