© Copyright International Business Machines Corporation 2006. All rights reserved.
© Copyright IBM Deutschland GmbH 2006. Alle Rechte
vorbehalten.
Beim Importieren eines Beispielportalprojekts oder beim Erstellen eines Portalprojekts mit dem Assistenten "Neues Portalprojekt" aus der Beispielsammlung wird in der Problemsicht eine Warnung zu defekten Links angezeigt.
In dieser Version von Rational® Developer unterstützt Portal Designer nur die Anzeigeformate HTML, cHTML und WML. Wenn Sie für eine Seite oder Bezeichnung in einem importierten Projekt andere unterstützte Markup-Sprachen angegeben haben, unterstützt Rational Developer zwar die Anzeige dieser Markups, aber die Markups können nicht bearbeitet werden. Diese Markup-Sprachen werden in der Eigenschaftensicht nicht angezeigt.
In WebSphere® Portal 6 wird die Standardfarbpalette verwendet, es sie denn, einer Seite wurde eine Farbpalette zugewiesen. Wenn jedoch in Portal Designer keine Farbpalette angegeben wird, dann wird an Stelle der Standardpalette die Farbpalette der Vorgängerseite verwendet.
Wenn im Assistenten 'Neues Portalprojekt' eine Portalserverversion ausgewählt wird, dann wird nicht automatisch auch die Ziellaufzeit aktualisiert. Die Einstellungen für die Portalserverversion und Ziellaufzeit müssen manuell synchronisiert werden. Sie müssen zum Beispiel eine Laufzeit von WebSphere Portal Version 6.0 für einen Portalserver der Version 6.0.0.x auswählen und eine Laufzeit von WebSphere Portal Version 5.1 für einen Portalserver der Version 5.1.0.x. Wenn die Version der Laufzeitversion nicht mit der Portalversion synchronisiert wird, kann der Portalserver beschädigt oder unbrauchbar werden, wenn das Portalprojekt implementiert wird.
In WebSphere Portal 6.0 kann es beim Bearbeiten von JSP-Dateien mit CSS-Inhaltstyp wie zum Beispiel 'styles.jsp' oder 'styles_theme.jspf' im Dialog 'Darstellungen' vorkommen, dass JSP-Ausdrücke im Dialog angezeigt werden. Diese JSP-Ausdrücke können nicht im Dialog geändert werden. Sie müssen sie in der CSS Designer-Quellenanzeige ändern.
Wenn Sie bei einem JSR 168 Faces-Portlet eines der folgenden Tools verwenden, um einen Service-Client in einer Faces-JSP zu generieren, dann funktioniert der generierte Seitencode nicht korrekt auf WebSphere Portal Version 6.0 oder Version 5.1. Dies gilt für folgende Tools:
- Sicht 'Seitendaten'
- Java™-Bean (mit Methodenaufruf)
- Web-Service
- EJB-Session-Bean
- Sicht 'Palette'
- Java-Bean (mit Methodenaufruf)
- Web-Service
- EJB-Session-Bean
- 'Einfügen -> Daten' im Kontextmenü von Page Designer oder im Menü 'Fenster'
- Java-Bean (mit Methodenaufruf)
- Web-Service
- EJB-Session-Bean
Dies wird durch die Implementierung der neuen JSR 168 Faces-Portletlaufzeit verursacht, die in 'jsf-portletbridge.jar' enthalten ist.
Seitencode-Beans für Faces-JSPs bleiben, wenn sie als anforderungsbereichsgesteuerte Beans deklariert wurden, in der neuen Implementierung zwischen der Aktionsphase des Portlets und der Wiedergabephase nicht mehr bestehen. Im generierten Web-Service-Client-Code wird die Seitencode-Bean in der Aktionsphase zum Zwischenspeichern der Ergebnisse des Web-Services verwendet. Da sie sich jedoch im Anforderungsbereich befindet, wird in der Wiedergabephase ein neues Exemplar erstellt. Daher geht das zwischengespeicherte Ergebnis verloren.
Es gibt zwei Lösungen:
- Geben Sie für das Bean als Geltungsbereich den Sitzungsbereich an. Die Konfiguration hierfür erfolgt in der Datei 'faces-config.xml'. Hierzu muss lediglich eine Zeile in der Konfigurationsdatei geändert werden.
- Diese Lösung ist nicht ganz so einfach wie Nr. 1, ist jedoch die bevorzugte Vorgehensweise zum Implementieren von Service-Clients in JSR 168-Portlets. Sie entspricht den bewährten Verfahren (Best Practices) für die Programmierung von JSR 168-Portlets und gewährt eine sehr viel bessere Unterstützung von 'Zurück'-Schaltflächen und von Lesezeichen.
- Wenn Sie den Web-Service während der Aktionsphase aufrufen müssen, wenn beispielsweise abhängig vom Serviceergebnis zu jeweils einer anderen Zielseite navigiert wird, dann müssen Sie die Art und Weise ändern, in der das Ergebnis zwischengespeichert wird. In diesem Fall sollten Sie keine lokale Variable in der Seitencode-Bean verwenden, sonder eher den Wiedergabeparameter 'render' oder den Portletsitzungsparameter verwenden. Die Verwendung von Wiedergabeparametern ist die bevorzugte Vorgehensweise für die Weitergabe von Information von der Aktions- zur Wiedergabephase. Allerdings können hierbei nur Zeichenfolgewerte verwendet werden. Wenn das Ergebnis vom Typ 'komplex' ist, müssen statt dessen den Portletsitzungsparameter verwenden.
- Das Beispielsnippet im folgenden Absatz veranschaulicht, wie Sie die Werte für die Wiedergabe von Parametern innerhalb der JSF-Aktionsmethode in der Seitencode-Bean definieren:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- Das Beispielsnippet im folgenden Absatz veranschaulicht, wie Sie die Werte für die Portletsitzung innerhalb der JSF-Aktionsmethode in der Seitencode-Bean definieren:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- Sollte das Aufrufen des Services während der Aktionsphase nicht erforderlich sein, können Sie Serviceaufruf an die Getter-Methode für die Web-Service-Ergebnisbean weiterleiten. Schließen Sie in einer JSF-Aktionsmethode den Eingabewerte in einen Wiedergabeanforderungsparameter ein, wenn es sich um eine Zeichenfolge handelt, oder in einen Portletsitzungsparameter, wenn der Eingabewert den Typ 'komplex' aufweist. Rufen Sie ihn dann von der Getter-Methode der Web-Service-Ergebnisbean ab, damit er zum Aufrufen des Services verwendet werden kann.
- Das Beispielsnippet im folgenden Absatz veranschaulicht, wie Sie den Eingabewert in einem Wiedergabeparameter innerhalb JSF-Aktionsmethode in der Seitencode-Bean definieren:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- Das Beispielsnippet im folgenden Absatz veranschaulicht, wie der Eingabewert innerhalb der Getter-Methode als Ergebnis abgerufen wird:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
String inputValue = request.getParameter("inputValue");
- Beachten Sie, dass die Verwendung des Wiedergabeparameters 'render' für die Übergabe von Informationen an die Wiedergabephase zusätzlich den Vorteil bietet, dass die 'Zurück'-Schaltfläche in Browsern und Lesezeichen besser unterstützt werden.
Beim Importieren eines Portalprojekts wird möglicherweise ein Nachrichtenfeld mit folgendem Inhalt angezeigt: "Die folgenden Arbeitsbereichsdateien sind mit dem Editor nicht konsistent. Soll der Editor mit dem Inhalt des Arbeitsbereichs aktualisiert werden?" Klicken Sie auf 'Ja'.
Die Anwendungs-ID des Portlets ist - je nach JSR 168-Spezifikation - optional, aber Rational® Developer publiziert Portlets ohne ID nicht korrekt. Rational Developer generiert keine Portlets ohne diese IDs. Es ist möglich, dass ein Portlet erstellt wird, wenn Sie ein Portlet von einer anderen Quelle importieren. Um dieses Problem zu umgehen, öffnen Sie den Portletimplementierungsdeskriptor für das Projekt, und fügen Sie auf der Registerkarte 'Quelle' eine Portletanwendungs-ID hinzu. Beispiel:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="HIER_ID_EINGEBEN">
...
</portlet-app>
Wenn der Serverstatus als 'Gestoppt' erkannt wird, wenn der Server ausgeführt wird, stellen Sie zuerst sicher, dass im Servereditor die korrekten SOAP/RMI-Connector-Ports angegeben sind und die verwendeten Sicherheitsberechtigungsnachweise für WebSphere richtig sind. Sollten diese Angaben nicht korrekt sein, wird der Serverstatus nie als 'Gestartet' erkannt. Sind die Angaben korrekt und der Serverstatus lautet weiterhin 'Gestoppt', können ein Koexistenzproblem zwischen WebSphere Application Server Version 6.1 und WebSphere Portal Version 6.0 bestehen.
Das üblichste Szenario besteht darin, dass auf dem lokalen System der Server von WebSphere Application Server 6.1 installiert ist und Sie mit einem neuen Arbeitsbereich beginnen. In diesem Arbeitsbereich wird automatisch ein Serverexemplar von WebSphere Application Server 6.1 erstellt und initialisiert. Dies verhindert, dass die Statusermittlung von Portal 6.0 korrekt funktioniert. Diese Situation kann auch eintreten, wenn Sie nur einen Server von WebSphere Application Server Version 6.1 erstellen und dann einen Server von Portal 6.0 erstellen.
Die Lösung besteht darin, das Rational-Produkt mit demselben Arbeitsbereich zu starten. Das Serverexemplar von Portal 6.0 sollte dann korrekt funktionieren, solange der Server von WebSphere Application Server 6.1 nicht initialisiert wird, d. h. die Statusanzeige leer bleibt und nicht 'Gestoppt' oder 'Gestartet' angibt.
Portlets werden nicht in Seiten angezeigt, nachdem das Projekt 'Mein Portal' ausgeführt oder in Portal 6.0 implementiert wurde. Um die Auswirkungen dieses Problems so gering wie möglich zu halten, verwenden Sie die nur die Konfigurationsimplementierung, wann immer keine vollständige Implementierung erforderlich ist.
Wenn dieses Problem auftritt, führen Sie nur eine Implementierung der Konfiguration des Portalprojekts aus, ohne jedoch Portlets zu implementieren. Dies bewirkt normalerweise, dass das Portal die Portlets korrekt wiedergibt.
Wenn Sie eine neue Geschäftsprozessnachricht erstellen und die WSDL-Datei den Stil 'Dokument-Literal' aufweist, werden auf der zweiten Seite des Assistenten möglicherweise die Namen der Eingabe- und der Ausgabenachricht nicht angezeigt. Sie können trotzdem die Nachrichten auswählen und die Nachrichtendetails in der rechten Seite des Assistenten anzeigen. Der generierte Code ist korrekt, auch wenn die Namen der Nachrichten im Assistenten nicht angezeigt werden.
Wenn Sie den Assistenten für Kooperation zum Erstellen von Quell- oder Zielportlets verwenden und das JSR 168-Portletprojekt Portlets verschiedener Typen enthält, zum Beispiel ein Basisportlet und ein Struts-Portlet, ist der Standardaktionsparameter im Assistenten möglicherweise falsch.
In Basis- und Faces-Portlets sollte der Standardaktionsparameter 'ACTION_NAME_PARAM' lauten, aber der Benutzer kann einen anderen Wert auswählen.
Bei Struts muss der Aktionsparameter 'spf_strutsAction' sein.
Die Standardwerte für den eindeutigen Namen in den Taskseitencontainern lauten wie folgt:
WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksBei Portal Designer wird bei Verwendung einer anderen Seite mit einem anderen eindeutigen Namen als dem oben aufgeführten die Seite nach der Implementierung in WebSphere Portal nicht als Seite für Taskseitencontainer erkannt.
Problemumgehung: Ändern Sie nach der Implementierung den Wert des Parameters 'TaskPageContainerUniqueName' im Portlet 'Meine Tasks', indem Sie die folgenden Schritte ausführen:
1. Öffnen Sie 'Verwaltung > Portletverwaltung > Portlets'.
2. Klicken Sie für das Portlet 'Meine Tasks' auf die Schaltfläche 'Konfigurieren' zum Konfigurieren des Portlets.
3. Klicken Sie zum Bearbeiten des Parameters 'TaskPageContainerUniqueName' auf 'Bearbeiten'.
4. Ändern Sie den Wert in den neuen eindeutigen Namen in Portal Designer. Verwenden Sie hierzu die folgenden Werte:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Klicken Sie auf 'OK'.
Wenn ein Portalprojekt von einem Arbeitsbereich mit Rational Developer 6.x zu einem Arbeitsbereich mit Rational Developer 7.0 migriert wurde, kann hierdurch ein Implementierungsfehler mit 'NoModuleFileException' verursacht werden. Führen Sie in diesem Fall die unten aufgeführte Prozedur aus, um das Problem zu beheben.
- Bei dieser Prozedur wird davon ausgegangen, dass von der fehlgeschlagenen Operation für die Portalprojektimplementierung bereits ein "wps"-EAR-Projekt generiert wurde.
- Öffnen Sie die Datei 'application.xml' im neu generierten wps-EAR-Projekt.
- Stellen Sie sicher, dass der Inhalt der Datei 'application.xml' aussieht wie der folgende Absatz:
<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>
- Im Detail sollte der Inhalt wie folgt aussehen:
- Es muss eine eine Webmoduldefinition für wps.war enthalten sein, bei der für 'content-root' der Wert "wps" definiert ist.
- Es darf höchstens eine Webmoduldefinition enthalten sein, bei der für 'content-root' der Wert "wps" definiert ist.
- Es muss eine Webmoduldefinition für 'wps_facade.war' enthalten sein, bei der für 'content-root' der Wert "/wsrp" definiert ist.
- Es muss eine ejb-Moduldefinition für 'wp.scheduler.ejb.jar' enthalten sein.
- Es müssen Definitionen für Sicherheitsaufgabenbereiche für die Aufgabenbereiche "Jeder", "Alle" und "Keiner" enthalten sein.
- Speichern und publizieren Sie erneut.
Durch eine veraltete Version von 'jsf-ibm.jar', die mit WebSphere Portal 6.0 ausgeliefert wurde, werden einige JSF-Komponenten in den Portlets nicht korrekt wiedergegeben, wenn für den Modus des Klassenladeprogramms für das Portlet-Webmodul der Wert 'PARENT_FIRST' definiert ist. Dies wird dadurch verursacht, dass bei Festlegung von 'PARENT_FIRST' für den Modus des Klassenladeprogramms die Datei 'jsf-ibm.jar' in WebSphere Portal 6.0 verwendet wird und nicht die Kopie im Portlet-Webmodul.
Es sind nur die Komponenten in 'jsf-ibm.jar' betroffen, die 'http://www.ibm.com/jsf/html_extended' entsprechen. Sowohl Faces IBM-Portlets als auch Faces JSR 168-Portlets sind betroffen.
Der Klassenladeprogramm-Modus des Portlet-Webmoduls wird in folgenden Fällen auf 'PARENT_FIRST' gesetzt und müsste daher geändert werden:
Um dieses Problem zu umgehen, öffnen Sie in dem EAR-Projekt, in dem das Portletprojekt enthalten ist, die Datei 'application.xml', und öffnen Sie die Registerkarte "Implementierung". Suchen Sie im Abschnitt "Anwendung" die Baumstruktur, in der das EAR- und das Portletprojekt angezeigt werden. Wählen Sie das Portletprojekt aus, und ändern Sie bei "Modus für Klassenladeprogramm" die Angabe "PARENT_FIRST" in "PARENT_LAST". Unter Umständen muss die Anwendung erneut publiziert werden, damit die Änderungen auf dem Zielserver in Kraft treten.
- wenn das Portlet von Rational Developer Version 7 implementiert wird
- wenn das Portlet zuerst mit EAR in WebSphere Application Server und dann mit dem Befehl 'xmlAccess' in WebSphere Portal konfiguriert wird.
Wenn das Portlet mit der WAR-Datei direkt in WebSphere Portal installiert wurde und die Installation über die Seite für die WebSphere Portal-Verwaltung oder mit dem Befehl 'xmlAccess' ausgeführt wurde, ist als Modus für das Klassenladeprogramm bereits 'PARENT_LAST' definiert. In diesem Fall funktioniert das Portlet ordnungsgemäß ohne jegliche Problemumgehungsmaßnahme.
Wenn ein Portalprojekt 5.1.0.1, das mit Rational Developer 6.x erstellt wurde, mit der Projektaustauschfunktion in einen Arbeitsbereich mit Rational Developer 7.0 importiert wird, schlägt möglicherweise die Ausführung auf der Testumgebung von WebSphere Portal v5.1 fehl.
Problemumgehung: Ändern Sie den Inhalt der Datei '.portalsettings' wie folgt:
1. Öffnen Sie 'Fenster > Perspektive öffnen > Andere...' .
2. Wählen Sie 'Ressource' aus, und klicken Sie im Dialog 'Perspektive öffnen' auf 'OK'.
3. Erweitern Sie in der Navigatorsicht das Portalprojekt.
4. Wählen Sie die Datei '.portalsettings' aus, und öffnen Sie sich mit dem Texteditor.
5. Fügen Sie Folgendes ein:
<?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>
Die Funktionalität "Webentwickler (erweitert)" muss aktiviert sein, damit der Assistent 'Portal importieren' sowie die Portal- und Portletbeispiele (aus der Beispielsammlung) angezeigt werden können. Aktivieren Sie diese Funktion, indem Sie zu 'Hilfe > Willkommen' wechseln. Klicken Sie in 'Willkommen' in der Anzeigenecke auf die Schaltfläche "Aufgabenbereiche aktivieren". Wählen Sie anschließend den Aufgabenbereich "Webentwickler (erweitert)" aus, um ihn zu aktivieren. Starten Sie den Assistenten oder die Beispielsammlung erneut, damit die Änderungen in Kraft treten.