© Copyright International Business Machines Corporation 2006. Tutti i diritti riservati. Limitazioni previste per gli Utenti del Governo degli Stati Uniti - L'uso, la duplicazione o la divulgazione sono limitati dal GSA ADP Schedule Contract con IBM Corp.
Durante l'importazione di un esempio di progetto di portale o la creazione di un progetto di portale utilizzando la procedura guidata "Nuovo progetto di portale" dalla Galleria di esempi, nella vista Problemi viene visualizzato un messaggio di avvertenza di collegamenti interrotti.
In questa versione di Rational® Developer, Portal Designer supporta solo visualizzazioni in HTML, cHTML e WML. Se sono state specificate altre lingue supportate per le markup per una pagina o un'etichetta in un progetto importato, in Rational Developer è supportata la visualizzazione ma non la modifica di tali lingue. Queste lingue delle markup non verranno visualizzate nella vista Proprietà.
A meno che non venga assegnata una tavolozza colori a una pagina, in WebSphere® Portal 6 viene utilizzata la tavolozza colori predefinita. In Portal Designer, tuttavia, quando non viene specificata la tavolozza colori, al posto della tavolozza predefinita viene utilizzata la tavolozza colori della pagina originaria.
Nella procedura guidata Nuovo progetto di portale, la selezione di una versione del server del portale non aggiorna automaticamente il runtime di destinazione. La versione del server del portale e le impostazioni runtime di destinazione devono essere sincronizzati manualmente. Ad esempio, è necessario selezionare un runtime WebSphere Portal v6.0 per una versione del server del portale 6.0.0.x, ed è necessario selezionare un runtime WebSphere Portal v5.1 per la versione del server del portale 5.1.0.x. Se la versione del runtime di destinazione non è sincronizzata con la versione del portale, il server del portale può risultare corrotto o può diventare inutilizzabile quando il progetto del portale viene distribuito.
In WebSphere Portal v6.0, durante la modifica dei file JSP del tipo contenuto CSS, quali styles.jsp o styles_theme.jspf, con la finestra di dialogo Stili, nella finestra potrebbero essere visualizzate espressioni JSP. Tali espressioni non possono essere modificate nella finestra di dialogo, ma devono essere modificate nel pannello di origine del Designer CSS.
Per un portlet Faces JSR168, se viene utilizzato uno degli strumenti di seguito riportati per generare un client di servizi in un JSP faces, il codice della pagina generata non funzionerà correttamente né in WebSphere Portal 6.0 né in WebSphere Portal 5.1. Tali strumenti comprendono:
- Vista Dati di pagina
- Bean Java™ (con richiamo del metodo)
- Servizio Web
- Bean di sessione EJB
- Vista Tavolozza
- Bean Java (con richiamo del metodo)
- Servizio Web
- Bean di sessione EJB
- Inserisci -> Dati dal menu finestra o dal menu di contesto di Page Designer
- Bean Java (con richiamo del metodo)
- Servizio Web
- Bean di sessione EJB
Ciò è causato dalla nuova implementazione del runtime del portlet Faces JSR168 contenuto in jsf-portletbridge.jar, diversa dalla precedente.
Nella nuova implementazione i bean pagecode per JSP Faces, quando dichiarati come bean gestiti in ambito richiesta, non sono persistenti tra la fase di azione e la fase di rendering del portlet. Nel codice client servizi Web generato, il bean pagecode viene utilizzato per memorizzare nella cache il risultato del servizio Web durante la fase di azione. Dal momento che si trova nell'ambito di richiesta, però, durante la fase di rendering viene creata una nuova istanza. Il risultato memorizzato nella cache, quindi, viene perso.
Esistono due possibili soluzioni:
- Collocare il bean in ambito di sessione (configurato in faces-config.xml). Ciò consiste semplicemente nella modifica di è una riga nel file di configurazione.
- Ciò non è semplice come il n. 1, ma è la maniera migliore per implementare client di servizi in portlet JSR168. Segue le procedure ottimali della programmazione di portlet JSR168 e consente un pulsante Indietro molto migliore e il supporto di segnalibri.
- Se è necessario richiamare il servizio Web durante la fase di azione, ad esempio per passare a una pagina di destinazione differente a seconda del risultato del servizio, è necessario modificare il modo in cui il risultato viene memorizzato nella cache. Invece di utilizzare una variabile locale nel bean pagecode, utilizzare il parametro di rendering o la sessione portlet. L'utilizzo di parametri di rendering è la maniera migliore per passare informazioni dalla fase di azione alla fase di rendering, nonostante siano supportati solo valori stringa. Se il risultato è di tipo complesso, è necessario utilizzare una sessione portlet.
- Di seguito viene riportato un frammento di esempio per l'impostazione di valori per parametri di rendering in un metodo di azione JSF nel bean pagecode:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- Di seguito viene riportato un frammento di esempio per l'impostazione di valori per una sessione portlet in un metodo di azione JSF nel bean pagecode:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- Se non è necessario il richiamo del servizio durante la fase di azione, è possibile rinviare il richiamo del servizio al metodo getter per il bean dei risultati del servizio Web. Nel metodo di azione JSF, collocare il valore di input in un parametro di richiesta di rendering se si tratta di una stringa, o una sessione di portlet se il valore di input è di tipo complesso. Richiamarlo, quindi, dal metodo getter per il bean dei risultati del servizio Web, in modo da poterlo utilizzare per richiamare il servizio.
- Di seguito viene riportato un frammento di esempio per l'impostazione del valore di input in un parametro di rendering in un metodo di azione JSF nel bean pagecode:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- Di seguito viene riportato un frammento di esempio per il richiamo del valore di input in un metodo getter per il risultato:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
String inputValue = request.getParameter("inputValue");
- L'utilizzo di un parametro di rendering per passare informazioni alla fase di rendering presenta l'ulteriore vantaggio del supporto di un migliore pulsante Indietro del browser e del supporto di segnalibri.
Nell'importazione di un progetto di portale può essere visualizzata una casella di messaggio con una domanda del tipo: "I seguenti file dello spazio di lavoro non sono coerenti con l'editor. Aggiornare l'editor con il contenuto dello spazio di lavoro". Fare clic su Sì.
L'id applicazione portlet è opzionale, in base alla specifica JSR 168, ma Rational® Developer non pubblica portlet correttamente senza id. Rational Developer non genera portlet senza tali id. Se viene importato un portlet da un'altra origine, è possibile che venga creato un portlet. Per risolvere temporaneamente tale problema, aprire il descrittore di distribuzione del portlet per il progetto e aggiungere un id applicazione portlet nella scheda origine. Ad esempio:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="ENTER_YOUR_ID_HERE">
...
</portlet-app>
Se lo stato del server viene rilevato Arrestato con il server ancora in esecuzione, accertarsi innanzitutto che le porte del connettore SOAP/RMI siano corrette e che le credenziali di protezione di WebSphere utilizzate siano corrette nell'editor del server. In caso di valori non corretti, lo stato del server non verrà mai rilevato Avviato. Se i valori sono corretti e lo stato del server rimane Arrestato, potrebbe trattarsi di un problema di coesistenza tra WebSphere Application Server v6.1 e WebSphere Portal v6.0.
Lo scenario più comune è aver installato un server WebSphere Application Server 6.1 sulla macchina locale e cominciare con un nuovo spazio di lavoro. In questo nuov spaziodi lavoro verrà creata e inizializzata automaticamente un'istanza del server WebSphere Application Server 6.1, e ciò impedirà il corretto funzionamento del rilevamento dello stato di Portal 6.0. Ciò può verificarsi anche solo avviando un server WebSphere Application Server v6.1 e quindi un server Portal 6.0.
La soluzione è riavviare il prodotto Rational con lo stesso spazio di lavoro. L'istanza del server Portal 6.0 dovrebbe funzionare correttamente a condizione che il server WebSphere Application Server 6.1 non venga inizializzato, cioè che lo stato rimanga indefinito e non Arrestato né Avviato.
Dopo l'esecuzione o la distribuzione del progetto my portal in Portal 6.0, i portlet non vengono visualizzati nelle pagine. Per minimizzare l'effetto di questo problema, utlizzare la distribuzione della sola configurazione ogni qualvolta non è necessaria la distribuzione completa.
Se si verifica il problema, tentare l'esecuzione di una distribuzione della sola configurazione del progetto del portale, senza distribuire alcun portlet. Ciò generalmente consente al portale di effettuare nuovamente il rendering corretto dei portlet.
Se viene creato un nuovo messaggio di processo aziendale e il file WSDL è in stile Document-Literal, i nomi dei messaggi di input e di output non verranno visualizzati nella seconda pagina della procedura guidata. Sarà ancora possibile selezionarli e visualizzare i dettagli dei messaggi nella parte destra della procedura guidata. Anche se i nomi dei messaggi non vengono visualizzati nella procedura guidata, il codice generato sarà corretto.
Se viene utilizzata la procedura guidata cooperativa per creare portlet di origine o di destinazione e il progetto di portlet JSR 168 contiene più tipi di portlet, ad esempio un portlet di base e un portlet struts, il parametro di azione predefinito nella procedura guidata potrebbe non essere corretto.
In portlet di base e faces, il parametro di azione predefinito dovrebbe essere ACTION_NAME_PARAM, ma l'utente può selezionare un valore differente.
In struts, il parametro di azione deve essere spf_strutsAction.
I seguenti sono i valori predefiniti del nome unico nei contenitori pagine di attività:
WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksIn Portal Designer, quando viene utilizzata un'altra pagina con nome unico diverso da quelli sopra elencati, in WebSphere Portal, dopo la distribuzione, la pagina non viene riconosciuta come pagina del contenitore pagine di attività.
Soluzione temporanea: Dopo la distribuzione, modificare il valore del parametro TaskPageContainerUniqueName nel portlet My Tasks seguendo le fasi successivamente riportate:
1. Aprire Amministrazione > Gestione portlet > Portlet
2. Per il portlet My Tasks fare clic sul pulsante Configura portlet
3. Per il parametro TaskPageContainerUniqueName fare clic su Modifica
4. Modificare il valore per il nuovo nome unico in Portal Designer utilizzando tali valori:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Fare clic su OK.
Se un progetto di portale è stato migrato da uno spazio di lavoro Rational Developer 6.x a uno spazio di lavoro Rational Developer 7.0, la distribuzione potrebbe avere esito negativo con una NoModuleFileException. Se ciò si verifica, seguire la procedura di seguito riportata per correggere il problema.
- Questa procedura presume che sia già stato generato un progetto EAR "wps" dall'operazione di distribuzione del progetto di portale non riuscita.
- Aprire application.xml nel progetto EAR wps appena generato.
- Accertarsi che il contenuto del file application.xml sia simile al seguente:
<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>All Authenticated users in the enterprise.</description>
<role-name>All Role</role-name>
</security-role>
<security-role id="SecurityRole_3">
<description>No users in the enterprise.</description>
<role-name>No Role</role-name>
</security-role>
- In particolare, il contenuto dovrebbe:
- essere una definizione di modulo Web per wps.war con valore content-root impostato su "wps".
- non contenere più di una definizione di modulo Web con valore content-root impostato su "wps".
- contenere una definizione di modulo Web per wps_facade.war con valore content-root impostato su "/wsrp.
- contenere una definizione di modulo ejb per wp.scheduler.ejb.jar.
- contenere definizioni di ruoli di protezione per "Everyone Role", "All Role" e "No Role".
- Salvare e procedere a una nuova pubblicazione.
A causa di una versione superata di jsf-ibm.jar fornita in WebSphere Portal 6.0, se la modalità classloader è impostata su PARENT_FIRST nel modulo Web del portlet, nei portlet non viene effettuato il rendering in maniera corretta di alcuni componenti JSF. Ciò si verifica poiché in WebSphere Portal 6.0, se la modalità classloader è impostata su PARENT_FIRST, verrà utilizzato jsf-ibm.jar e non la copia contenuta nel modulo Web del portlet.
Il problema riguarda solo i componenti in jsf-ibm.jar, che corrispondono all'uri http://www.ibm.com/jsf/html_extended. Ciò ha effetto sia su portlet IBM Faces che su portlet JSR168 Faces.
Nelle situazioni di seguito riportate, la modalità classloader del modulo Web del portlet verrà impostata su PARENT_FIRST, per cui sarà necessario modificarla:
Per risolvere temporaneamente il problema, aprire il file application.xml nel progetto EAR contenente il progetto del portlet e quindi aprire la scheda "Distribuzione". Nella sezione "Applicazione" individuare la struttura che visualizza l'EAR e il progetto del portlet. Selezionare il progetto del portlet e modificare la "Modalità classloader" da "PARENT_FIRST" a "PARENT_LAST". Per applicare la modifica sul server di destinazione, potrebbe essere necessario pubblicare nuovamente l'applicazione.
- quando il portlet viene distribuito da Rational Developer v7.
- quando il portlet viene dapprima installato in WebSphere Application Server utilizzando l'EAR, e quindi viene configurato in WebSphere Portal utilizzando il comando xmlAccess.
Se il portlet viene installato direttamente in WebSphere Portal utilizzando WAR, nella pagina di amministrazione di WebSphere Portal o utilizzando il comando xmlAccess, la modalità classloader risulta già impostata su PARENT_LAST. In questo caso il portlet funzionerà correttamente anche senza alcun intervento.
Quando un progetto di portale 5.1.0.1 creato utilizzando Rational Developer 6.x viene importato con Scambio progetti in uno spazio di lavoro Rational Developer 7.0, "Esegui nell'ambiente di test di WebSphere Portal v5.1" potrebbe avere esito negativo.
Soluzione temporanea: modificare il contenuto del file .portalsettings seguendo le fasi successivamente riportate:
1. Aprire Finestra > Apri prospettiva > Altro... .
2. Selezionare Risorsa e fare clic su OK nella finestra di dialogo Apri prospettiva.
3. Espandere il progetto del portale nella vista Navigator.
4. Selezionare il file .portalsettings e aprirlo con l'editor di testo.
5. Inserire quanto segue.
<?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 funzione "Web Developer (avanzata) deve essere attivata per visualizzare la procedura Importare portale e gli esempi di portali e portlet (dalla Galleria degli esempi). Per abilitare la funzione passare a Guida > Benvenuto, e in Benvenuto fare clic sul pulsante "Abilita ruoli" che si trova nell'angolo dello schermo. Selezionare, quindi, il ruolo "Web Developer (avanzato)" per attivarlo. Riavviare la procedura guidata o la Galleria degli esempi per applicare le modifiche.