© Copyright International Business Machines Corporation 2006. Todos direitos reservados. Direitos Restritos para Usuários do Governo dos Estados Unidos - Uso, duplicação e divulgação restritos pelo documento GSA ADP Schedule Contract com a IBM® Corporation.
Ao importar uma amostra de projeto do Portal ou criar um projeto de portal utilizando o assistente "Novo Projeto de Portal" a partir da Galeria de amostras, uma mensagem de aviso de link interrompido aparece na visualização Problemas.
Nesta versão do Rational® Developer, o Portal Designer suporta apenas exibições em HTML, cHTML e WML. Se você especificou outras linguagens de marcações suportadas para uma página ou rótulo em um projeto importado, essas linguagens de marcações são suportadas para exibição pelo Rational Developer, mas não poderão ser editadas. Essas linguagens de marcações não serão exibidas na visualização Propriedades.
A não ser que você designe uma paleta de cores para uma página, a paleta de cores padrão será utilizada no WebSphere® Portal 6. Entretanto, no Portal Designer, quando a paleta de cores não é especificada, a paleta de cores da página ascendente será utilizada no lugar da paleta padrão.
No assistente Novo Projeto do Portal, selecionar uma versão do servidor de portal não atualiza automaticamente o tempo de execução de destino. A versão do servidor de portal e as configurações do tempo de execução de destino deverão ser sincronizadas manualmente. Por exemplo, você deve selecionar o tempo de execução do WebSphere Portal v6.0 para uma versão do servidor de portal igual a 6.0.0.x e deve selecionar o tempo de execução do WebSphere Portal v5.1 para uma versão do servidor de portal igual a 5.1.0.x. Se a versão do tempo de execução de destino não estiver sincronizada com a versão do portal, o servidor de portal poderá ficar distorcido ou inutilizável quando o projeto de portal for implementado.
No WebSphere Portal v6.0, ao editar os arquivos JSP de tipo de conteúdo do CSS, como styles.jsp ou styles_theme.jspf, com um diálogo Estilos, as expressões do JSP poderão ser exibidas no diálogo. Essas expressões do JSP não podem ser modificadas no diálogo. Você deve modificá-las no painel de origem do CSS Designer.
Para um portlet Faces do JSR168, se você utilizar qualquer uma das ferramentas a seguir, para gerar um cliente de serviço em uma JSP Faces, o código da página gerado não funcionará corretamente no WebSphere Portal 6.0 ou 5.1. As ferramentas afetadas incluem:
- Visualização Dados da Página
- Java™ Bean (com solicitação de método)
- Serviço da Web
- Bean de Sessão EJB
- Visualização Paleta
- Java Bean (com solicitação de método)
- Serviço da Web
- Bean de Sessão EJB
- Inserir -> Dados do menu de contexto Designer de Página ou menu do Windows
- Java Bean (com solicitação de método)
- Serviço da Web
- Bean de Sessão EJB
Isso é causado pela nova implementação do tempo de execução do portlet Faces do JSR168 contido em jsf-portletbridge.jar, que é diferente do que anteriormente.
Na nova implementação, os beans de código de página para JSPs Faces, quando declarados como beans gerenciados pelo escopo do pedido, não persistem entre a fase de Ação e a fase de Renderização do portlet. No código de cliente de serviços da Web gerado, o bean de código de página está sendo utilizado para armazenar em cache o resultado do serviço da Web durante a fase de Ação. Mas como ele está no escopo do pedido, uma nova instância será criada durante a fase de Renderização. Portanto, o resultado armazenado em cache será perdido.
Há duas soluções possíveis:
- Coloque o bean no escopo da sessão (isso é configurado em faces-config.xml). Isso é tão simples como alterar uma linha no arquivo de configuração.
- Esta não é tão simples como a primeira, mas é a forma preferida de implementação de cliente de serviços em portlets JSR168. Ela segue as melhores práticas da programação de portlets JSR168 e permite um suporte muito melhor ao botão Voltar e a marcadores.
- Se houver a necessidade de chamar o serviço da Web durante a fase de Ação, por exemplo, dependendo do resultado do serviço, uma página de destino diferente será navegada, você precisará alterar a forma pela qual o resultado é armazenado em cache. Em vez de utilizar uma variável local no bean de código da página, utilize o parâmetro de renderização ou a sessão do portlet. A utilização de parâmetros de renderização é a forma preferida de se transmitir informações da fase de Ação para a fase de Renderização, embora suporte apenas valores do tipo String. Se o resultado for de um tipo complexo, você deverá utilizar a sessão de portlet em seu lugar.
- Aqui está um snippet de amostra para configurar valores para parâmetros de renderização a partir do método de ação do JSF no bean de código de página:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- Aqui está um snippet de amostra para configurar valores para sessão de portlet a partir do método de ação do JSF no bean de código de página:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- OU, se chamar o serviço durante a fase de Ação não for necessário, você poderá adiar a chamada do serviço para o método getter do bean resultado do serviço da Web. No método de ação do JSF, coloque o valor de entrada em um parâmetro de pedido de renderização se ele for uma cadeia ou da sessão do portlet se o valor de entrada for do tipo complexo. Em seguida, recupere-o do método getter para o bean de resultado do serviço da Web, para que ele possa ser utilizado para chamar o serviço.
- Aqui está um snippet de amostra para configurar o valor de entrada em um parâmetro de renderização no método de ação do JSF no bean de código de página:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- Aqui está um snippet de amostra para recuperar o valor de entrada no método getter para o resultado:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
String inputValue = request.getParameter("inputValue");
- Note que a utilização do parâmetro de renderização para transmitir informações à fase de renderização tem o benefício adicional de melhor suporte ao botão Voltar e suporte a marcadores.
Ao importar um projeto de portal, é possível obter uma caixa de mensagem de pergunta: "Os arquivos do espaço de trabalho a seguir estão inconsistentes com o editor. Atualize o editor com o conteúdo do espaço de trabalho". Clique em Sim.
O ID do aplicativo do portlet é opcional de acordo com a especificação JSR 168, mas o Rational® Developer não publica corretamente portlets sem IDs. O Rational Developer não gera portlets sem esses IDs. É possível que um portlet seja criado se você importar um portlet de outra origem. Para obter uma solução alternativa para esse problema, abra o descritor de implementação do portlet para o projeto e inclua um ID de aplicativo de portlet na guia de origem. Por exemplo:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="ENTER_YOUR_ID_HERE">
...
</portlet-app>
Se o estado do servidor for detectado como Parado quando o servidor estiver em execução, primeiramente assegure-se de que as portas do conector SOAP/RMI estejam corretas e que as credenciais de segurança do WebSphere utilizadas estão corretas no editor do servidor. Se não estiverem corretas, o estado do servidor nunca será detectado como Iniciado. Se estiverem corretas e o estado do servidor permanecer Parado, poderá haver um problema com a coexistência do WebSphere Application Server v6.1 e do WebSphere Portal v6.0.
O cenário mais comum é ter o servidor do WebSphere Application Server 6.1 instalado na máquina local e iniciar com um novo espaço de trabalho. Nesse novo espaço de trabalho, uma instância do servidor WebSphere Application Server 6.1 será criada e inicializada automaticamente, o que impedirá que a detecção de estado do Portal 6.0 funcione corretamente. Também pode ocorrer se você acabou de criar um servidor do WebSphere Application Server v6.1 e, em seguida, criar um servidor do Portal 6.0.
A solução é reiniciar o produto Rational com o mesmo espaço de trabalho. A instância do servidor do Portal 6.0 deverá então funcionar corretamente, desde que o servidor do WebSphere Application Server 6.1 não esteja inicializado, isto é, seu estado permanece em branco em vez de Parado ou Iniciado.
Os portlets não são exibidos em páginas após executar ou implementar o projeto my portal no Portal 6.0. Para minimizar o efeito desse problema, utilize a configuração de apenas implementação sempre que uma implementação completa não for necessária.
Se você encontrar o problema, tente executar uma implementação de apenas configuração do projeto do portal sem implementar nenhum portlet. Isso normalmente permite que o portal renderize os portlets de maneira correta novamente.
Se você estiver criando uma nova Mensagem de Processo de Negócios e o arquivo WSDL estiver no estilo Document-Literal, os nomes de mensagens de entrada e saída poderão não ser exibidos na segunda página do assistente. Ainda é possível selecioná-los e visualizar os detalhes da mensagem no lado direito do assistente. O código gerado estará correto, apesar do fato de que os nomes das mensagens não são mostrados no assistente.
Se você estiver utilizando o assistente cooperativo para criar portlets de origem ou destino e o projeto de portlet JSR 168 contiver vários tipos de portlet, como um portlet básico e um portlet do Struts, o parâmetro de ação padrão no assistente poderá estar incorreto.
Em portlets básicos e de aspectos, o parâmetro de ação padrão deve ser ACTION_NAME_PARAM, mas o usuário pode selecionar um valor diferente.
No Struts, o parâmetro da ação deve ser spf_strutsAction.
Estes são os valores padrão para o nome exclusivo nos contêineres da página de tarefa:
WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksNo Portal Designer, ao utilizar outra página com um nome exclusivo diferente dos listados acima, a página não será reconhecida como uma página de contêiner da página de tarefa no WebSphere Portal após a implementação.
Solução alternativa: Após a implementação, altere o valor do parâmetro TaskPageContainerUniqueName no portlet My Tasks utilizando estas etapas:
1. Abra Administração > Gerenciamento de Portlets > Portlets
2. Para o portlet My Tasks, clique no botão Configurar portlet
3. Para o parâmetro TaskPageContainerUniqueName, clique em Editar.
4. Altere o valor para o novo nome exclusivo no Portal Designer utilizando estes valores:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Clique em OK.
Se um projeto do portal foi migrado do Rational Developer 6.x para o espaço de trabalho do Rational Developer 7.0, isso poderá causar falha de implementação com uma NoModuleFileException. Quando isso ocorrer, siga o procedimento a seguir para corrigir o problema.
- Este procedimento assume que um projeto EAR "wps" já foi gerado a partir da operação de implementação do projeto de portal com falha.
- Abra application.xml no projeto EAR wps recém gerado.
- Assegure-se de que o conteúdo de application.xml seja semelhante ao seguinte:
<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>Todos na corporação.</description>
<role-name>Everyone Role</role-name>
</security-role>
<security-role id="SecurityRole_2">
<description>Todos os usuários autenticados na corporação.</description>
<role-name>All Role</role-name>
</security-role>
<security-role id="SecurityRole_3">
<description>Nenhum usuário na corporação.</description>
<role-name>No Role</role-name>
</security-role>
- Mais especificamente, o conteúdo deve
- conter uma definição de módulo da Web para wps.war com o valor de content-root configurado como "wps".
- não conter mais de uma definição de módulo da Web com o valor de content-root configurado como "wps".
- conter uma definição de módulo da Web para wps_facade.war com o valor de content-root configurado como "/wsrp.
- conter uma definição de módulo ejb para wp.scheduler.ejb.jar.
- conter definições de função de segurança para "Everyone Role", "All Role" e "No Role".
- Salve e publique novamente.
Devido a uma versão desatualizada do jsf-ibm.jar que foi enviado no WebSphere Portal 6.0, alguns componentes do JSF não são renderizados corretamente em portlets se o modo do carregador de classe estiver configurado com o PARENT_FIRST no módulo da Web do portlet. Isso ocorre porque quando o modo do carregador de classe está configurado como PARENT_FIRST, o jsf-ibm.jar no WebSphere Portal 6.0 será utilizado, no lugar da cópia contida no módulo da Web do portlet.
Apenas os componentes no jsf-ibm.jar, que correspondem ao uri http://www.ibm.com/jsf/html_extended, são afetados. Os portlets Faces IBM e Faces JSR168 são afetados.
O modo do carregador de classe do módulo da Web do portlet será configurado como PARENT_FIRST nas seguintes situações, portanto precisaria ser alterado:
Para obter uma solução alternativa para esse problema, abra o arquivo application.xml no projeto EAR que contém o projeto de portlet e abra a guia "Deployment". Na seção "Application", localize a árvore que exibe o EAR e o projeto de portlet. Selecione o projeto de portlet e altere "Classloader mode" de "PARENT_FIRST" para "PARENT_LAST". Você pode desejar publicar novamente o aplicativo para que a alteração entre em efeito no servidor de destino.
- quando o portlet for implementado pelo Rational Developer v7.
- quando o portlet for instalado primeiramente no WebSphere Application Server utilizando EAR e, em seguida, configurado no WebSphere Portal utilizando o comando xmlAccess.
Se o portlet for instalado diretamente no WebSphere Portal utilizando o WAR, na página de administração do WebSphere Portal ou utilizando o comando xmlAccess, o modo do carregador de classe já está configurado como PARENT_LAST. Nesse caso, o portlet funcionará corretamente sem nenhuma solução alternativa.
Quando um projeto de portal 5.1.0.1 criado utilizando o Rational Developer 6.x for importado com o Project Interchange em um espaço de trabalho do Rational Developer 7.0, "Executar no Ambiente de Teste do WebSphere Portal v5.1" poderá falhar.
Solução alternativa: Modifique o conteúdo do arquivo .portalsettings utilizando estas etapas:
1. Abra Janela > Abrir Perspectiva > Outra...
2. Selecione Recurso e clique em OK no diálogo Abrir Perspectiva.
3. Expanda o projeto de portal na visualização Navegador.
4. Selecione o arquivo .portalsettings e abra com o Editor de Texto.
5. Insira o seguinte.
<?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>
O recurso "Desenvolvedor da Web (avançado) precisa estar ativado para visualizar o assistente Importar Portal e as amostra de portal e portlet (na Galeria de Amostras). Para ativar o recurso, vá para Ajuda > Bem-vindo; em Bem-vindo, clique no botão "Ativar Funções", que está localizado no canto da tela. Em seguida, selecione a função "Desenvolvedor da Web (avançado)" para ativá-la. Reinicie o assistente ou a Galeria de Amostras para que as alterações entrem em efeito.