© Copyright International Business Machines Corporation 2006. Alle Rechte vorbehalten.
© Copyright IBM Deutschland GmbH 2000, 2006. Alle Rechte vorbehalten.
Beim Importieren eines Beispielportalprojekts oder beim Erstellen eines Portalprojekts mit dem Assistenten "Neues Portalprojekt" aus der Beispielgallerie werden in der Problemsicht Warnungen zu defekten Links angezeigt.
In dieser Version von Rational® Developer unterstützt Portal Designer nur die Anzeigeformate HTML, cHTML und WML. Wenn Sie in einem importierten Projekt für eine Seite oder eine Bezeichnung andere unterstützte Markup-Sprachen angegeben haben, werden diese Markup-Sprachen in Rational Developer angezeigt, können aber nicht bearbeitet werden. Diese Markup-Sprachen werden nicht in der Eigenschaftensicht angezeigt.
Wenn Sie einer Seite keine Farbpalette zuordnen, wird in WebSphere® Portal 6 die Standardfarbpalette verwendet. Wenn dagegen in Portal Designer keine Farbpalette angegeben wird, wird die Farbpalette der davor befindlichen Seite und nicht die Standardfarbpalette verwendet.
Wenn im Assistenten 'Neues Portalprojekt' eine Portalserverversion ausgewählt wird, wird nicht automatisch die Ziellaufzeit aktualisiert. Die Portalserverversion und die Einstellungen für die Ziellaufzeit müssen manuell synchronisiert werden. Sie müssen zum Beispiel die Laufzeit von WebSphere Portal 6.0 für die Portalserverversion 6.0.0.x auswählen, und Sie müssen die Laufzeit von WebSphere Portal 5.1 für die Portalserverversion 5.1.0.x auswählen. Wenn die Ziellaufzeitversion 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 für ein JSR 168 Faces-Portlet eines der folgenden Tools zum Generieren eines Service-Clients in Faces JSP verwenden, funktioniert der generierte Seitencode entweder in WebSphere Portal 6.0 oder 5.1 nicht ordnungsgemäß. Zu den betroffenen Tools gehören:
- 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 Page Designer-Kontextmenü oder im Windows-Menü
- Java-Bean (mit Methodenaufruf)
- Web-Service
- EJB-Session-Bean
Dies wird durch die neue Implementierung der JSR 168 Faces-Portlet-Laufzeit verursacht, die in 'jsf-portletbridge.jar' enthalten ist, was eine Änderung zu vorher darstellt.
In der neuen Implementierung bleiben Seitencode-Beans für Faces JSPs, wenn Sie als vom Anforderungsbereich verwaltete Beans deklariert sind, nicht zwischen der Phase 'Aktion' und der Phase 'Übergeben' des Portlets bestehen. Im Client-Code des generierten Web-Services wird die Seitencode-Bean zum Zwischenspeichern des Ergebnisses des Web-Services während der Phase 'Aktion' verwendet. Da sie sich aber im Anforderungsbereich befindet, wird während der Phase 'Übergeben' eine neue Instanz erstellt. Deswegen kann es vorkommen, dass das zwischengespeicherte Ergebnis verloren geht.
Dieses Problem kann auf die beiden folgenden Arten behoben werden:
- Stellen Sie die Bean in den Sitzungsbereich (dies wird in der Datei 'faces-config.xml' konfiguriert). Dies ist einfach, da nur eine Zeile in der Konfigurationsdatei geändert werden muss.
- Diese Vorgehensweise ist nicht so einfach wie die unter Nummer 1, sie ist aber die bevorzugte Methode zum Implementieren eines Service-Clients in JSR 168-Portlets. Dabei werden die bewährten Verfahren der JSR 168-Portlets-Programmierung beachtet, und die Unterstützung der Schaltfläche 'Zurück' und der Lesezeichen ist deutlich besser.
- Falls es erforderlich ist, den Web-Service während der Phase 'Aktion' aufzurufen, wenn zum Beispiel abhängig vom Serviceergebnis zu einer anderen Zielseite navigiert wird, müssen Sie die Art ändern, auf der das Ergebnis zwischengespeichert wird. Anstatt die lokale Variable in der Seitencode-Bean zu verwenden, verwenden Sie entweder den Übergabeparameter oder die Portletsitzung. Die Verwendung von Übergabeparametern ist die bevorzugte Methode zum Übergeben von Informationen aus der Phase 'Aktion' zur Phase 'Übergeben', obwohl diese Methode nur Zeichenfolgewerte unterstützt. Wenn ein komplexer Typ das Ergebnis ist, müssen Sie stattdessen eine Portletsitzung verwenden.
- Beispielsnippet zum Einstellen der Werte von Übergabeparametern innerhalb der JSF-Aktionsmethode in der Seitencode-Bean:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("resultValue", resultValue);
- Beispielsnippet zum Einstellen der Werte der Portletsitzung innerhalb der JSF-Aktionsmethode in der Seitencode-Bean:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
request.getPortletSession().put("resultValue", resultValue);
- Wenn das Aufrufen des Service während der Phase 'Aktion' nicht erforderlich ist, können Sie alternativ den Serviceaufruf bis zur Getter-Methode für die Web-Service-Ergebnis-Bean verzögern. Stellen Sie in der JSF-Aktionsmethode den Eingabewert in einen Übergabeanforderungsparameter, wenn es sich um eine Zeichenfolge handelt, oder eine Portletsitzung, wenn der Eingabetyp ein komplexer Typ ist. Rufen Sie ihn anschließend von der Getter-Methode für die Web-Service-Ergebnis-Bean ab, um damit den Service aufrufen zu können.
- Beispielsnippet zum Einstellen des Eingabewerts in einem Übergabeparameter innerhalb der JSF-Aktionsmethode in der Seitencode-Bean:
PortletResponse response = (PortletResponse)getFacesContext().getExternalContext().getResponse();
((ActionResponse)response).setRenderParameter("inputValue", inputValue);
- Beispielsnippet zum Abrufen des Eingabewerts innerhalb der Getter-Methode für das Ergebnis:
PortletRequest request = (PortletRequest)getFacesContext().getExternalContext().getRequest();
String inputValue = request.getParameter("inputValue");
- Beachten Sie, dass die Verwendung eines Übergabeparameters zum Übergeben der Informationen an die Phase 'Übergeben' den zusätzlichen Vorteil besitzt, dass die Unterstützung der Schaltfläche 'Zurück' und die Unterstützung der Lesezeichen besser ist.
Wenn Sie ein Portalprojekt importieren, kann es vorkommen, dass die folgende Nachricht angezeigt wird: "Die folgenden Arbeitsbereichsdateien sind mit dem Editor nicht konsistent. Editor mit dem Inhalt des Arbeitsbereichs aktualisieren?". Klicken Sie auf 'Ja'.
Die Portletanwendungs-ID ist zwar gemäß der JSR 168-Spezifikation optional, von Rational® Developer werden Portlets ohne IDs jedoch nicht ordnungsgemäß publiziert. Von Rational Developer werden Portlets ohne diese IDs nicht generiert. 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 eine Portletanwendungs-ID in der Quellenregisterkarte hinzu. Beispiel:
<portlet-app xmlns=... version=... xmlns:xsi=... xsi:schemaLocation=... id="ENTER_YOUR_ID_HERE">
...
</portlet-app>
Wenn als Serverstatus 'Gestoppt' festgestellt wird, obwohl der Server ausgeführt wird, stellen Sie zuerst sicher, dass die Ports des SOAP- bzw. RMI-Connectors korrekt sind und dass die von Ihnen verwendeten WebSphere-Sicherheitsberechtigungsnachweise im Servereditor korrekt sind. Wenn sie nicht korrekt sind, wird als Serverstatus nie 'Gestartet' festgestellt. Wenn sie korrekt sind und als Serverstatus weiterhin 'Gestoppt' festgestellt wird, kann ein Problem vorliegen, das seine Ursache in der Koexistenz von WebSphere Application Server 6.1 und WebSphere Portal 6.0 hat.
In den meisten Fällen ist der WebSphere Application Server 6.1-Server auf der lokalen Maschine installiert, und Sie starten mit einem neuen Arbeitsbereich. In diesem neuen Arbeitsbereich wird eine WebSphere Application Server 6.1-Serverinstanz automatisch erstellt und initialisiert, was wiederum verhindert, dass die Statuserkennung von Portal 6.0 ordnungsgemäß funktioniert. Dies kann auch vorkommen, wenn Sie zuerst einen WebSphere Application Server 6.1-Server und danach einen Portal 6.0-Server erstellen.
Die Lösung ist ein Neustart des Rational-Produkts mit demselben Arbeitsbereich. Die Portal 6.0-Serverinstanz müsste dann ordnungsgemäß funktionieren, so lange der WebSphere Application Server 6.1-Server nicht initialisiert ist, es wird also kein Status und somit auch nicht 'Gestoppt' oder 'Gestartet' angegeben.
Portlets werden nicht auf Seiten angezeigt, nachdem ein 'Mein Portal'-Projekt in Portal 6.0 ausgeführt oder implementiert wurde. Um die Auswirkungen dieses Problems zu minimieren, verwenden Sie eine auf die Konfiguration beschränkte Implementierung, wenn eine vollständige Implementierung nicht erforderlich ist.
Wenn das Problem auftritt, versuchen Sie, eine auf die Konfiguration beschränkte Implementierung des Portalprojekts ohne Implementierung der Portlets auszuführen. Dies ermöglicht dem Portal in der Regel wieder eine ordnungsgemäße Darstellung der Portlets.
Wenn Sie eine neue Geschäftsprozessnachricht erstellen und die WSDL-Datei mit Dokument-Literal dargestellt wird, kann es vorkommen, dass die Namen der Eingabe- und Ausgabenachrichten auf der zweiten Seite des Assistenten nicht angezeigt werden. Sie können sie aber trotzdem auswählen und die Nachrichtendetails auf der rechten Seite des Assistenten anzeigen. Der generierte Code ist korrekt, auch wenn die Nachrichtennamen nicht im Assistenten angezeigt werden.
Wenn Sie mit Hilfe des Kooperationsassistenten Quellen- oder Zielportlets erstellen und im JSR 168-Portlet mehrere Portlettypen wie zum Beispiel ein Basisportlet und ein Struts-Portlet enthalten sind, kann es vorkommen, dass der Standardaktionsparameter im Assistenten nicht korrekt ist.
In Basisportlets und Faces-Portlets muss der Standardaktionsparameter ACTION_NAME_PARAM lauten, der Benutzer kann jedoch einen abweichenden Wert einstellen.
In Struts muss der Aktionsparameter 'spf_strutsAction' lauten.
Die Standardwerte für den eindeutigen Namen in den Taskseitencontainern lauten folgendermaßen:
WebSphere Portal 6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasksWenn Sie in Portal Designer eine andere Seite mit einem anderen Namen als den oben aufgelisteten verwenden, wird die Seite nach der Implementierung in WebSphere Portal nicht als Seite des Taskseitencontainers erkannt.
Problemumgehung: Gehen Sie wie folgt vor, um nach der Implementierung den Wert des Parameters 'TaskPageContainerUniqueName' im Portlet 'Meine Tasks' zu ändern:
1. Wählen Sie 'Verwaltung' > 'Portletverwaltung' > 'Portlets' aus.
2. Klicken Sie für das Portlet 'Meine Tasks' auf die Schaltfläche 'Portlet konfigurieren'.
3. Klicken Sie für den Parameter 'TaskPageContainerUniqueName' auf 'Bearbeiten'.
4. Ändern Sie unter Verwendung der folgenden Werte den Wert in den neuen eindeutigen Namen in Portal Designer:WebSphere Portal v6.0: ibm.portal.MyTasks
WebSphere Portal v5.1: wps.MyTasks
5. Klicken Sie auf 'OK'.
Wenn ein Portalprojekt aus Rational Developer 6.x in einen Arbeitsbereich in Rational Developer 7.0 migriert wurde, kann die Implementierung mit 'NoModuleFileException' fehlschlagen. Wenn dies der Fall ist, führen Sie die unten beschriebene Prozedur zur Behebung des Problems aus.
- Für diese Prozedur wird vorausgesetzt, dass im Verlauf der fehlgeschlagenen 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' ungefähr mit dem Folgenden übereinstimmt:
<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>
- Konkret muss der Inhalt den folgenden Anforderungen entsprechen:
- eine Webmoduldefinition für 'wps.war' mit dem Inhaltsstammverzeichniswert "wps" enthalten.
- nicht mehr als eine Webmoduldefinition mit dem Inhaltsstammverzeichniswert "wps" enthalten.
- eine Webmoduldefinition für 'wps_facade.war' mit dem Inhaltsstammverzeichniswert "/wsrp' enthalten.
- eine EJB-Moduldefinition für 'wp.scheduler.ejb.jar' enthalten.
- Definitionen für Sicherheitsberechtigungsklassen für "Jede Berechtigungsklasse", "Alle Berechtigungsklassen" und "Keine Berechtigungsklasse" enthalten.
- Speichern Sie, und führen Sie wieder eine Publizierung durch.
Aufgrund einer veralteten Version von 'jsf-ibm.jar', die mit WebSphere Portal 6.0 ausgeliefert wurde, werden manche JSF-Komponenten in Portlets nicht ordnungsgemäß dargestellt, wenn als Klassenladeprogrammmodus PARENT_FIRST für das Portlet-Web-Modul eingestellt ist. Ursache: Wenn als Klassenladeprogrammmodus PARENT_FIRST eingestellt wird, wird die Datei 'jsf-ibm.jar' in WebSphere Portal 6.0 anstatt der Kopie verwendet, die im Portlet-Web-Modul enthalten ist.
Dies hat nur Auswirkungen auf die Komponenten in der Datei 'jsf-ibm.jar', die dem Uniform-Resource-Identifier 'http://www.ibm.com/jsf/html_extended' entsprechen. Sowohl IBM Faces-Portlets als auch JSR 168 Faces-Portlets sind betroffen.
Für den Klassenladeprogrammmodus des Portlet-Web-Moduls wird in den folgenden Situationen der Wert PARENT_FIRST eingestellt; in diesen Situationen muss der Modus deswegen geändert werden:
Öffnen Sie zur Umgehung dieses Problems die Datei 'application.xml' in dem EAR-Projekt, in dem das Portletprojekt enthalten ist, und öffnen Sie die Registerkarte "Implementierung". Suchen Sie im Abschnitt "Anwendung" die Baumstruktur, in der das EAR-Projekt und das Portletprojekt angezeigt werden. Wählen Sie das Portletprojekt aus, und ändern Sie den "Klassenladeprogrammmodus" von "PARENT_FIRST" in "PARENT_LAST". Sie müssen die Anwendung wahrscheinlich wieder publizieren, damit die Änderung auf dem Zielserver wirksam wird.
- wenn das Portlet von Rational Developer 7 implementiert wird.
- wenn das Portlet zuerst in WebSphere Application Server mit Hilfe der EAR installiert und anschließend in WebSphere Portal mit Hilfe des Befehls 'xmlAccess' konfiguriert wird.
Wenn das Portlet mit Hilfe der WAR-Datei direkt in WebSphere Portal installiert wurde, entweder auf der Verwaltungsseite von WebSphere Portal oder unter Verwendung des Befehls 'xmlAccess', ist für den Klassenladeprogrammmodus bereits der Wert PARENT_LAST eingestellt. In diesem Fall funktioniert das Portlet ohne Problemumgehung ordnungsgemäß.
Wenn ein Portalprojekt der Version 5.1.0.1, das mit Hilfe von Rational Developer 6.x erstellt wurde, in einen Arbeitsbereich von Rational Developer 7.0 importiert wird, kann es vorkommen, dass "Auf WebSphere Portal 5.1-Testumgebung ausführen" fehlschlägt.
Problemumgehung: Gehen Sie wie folgt vor, um den Inhalt der .portalsettings-Datei zu ändern:
1. Klicken Sie auf 'Fenster' > 'Perspektive öffnen' > 'Andere...'.
2. Wählen Sie 'Ressource' aus, und klicken Sie im Dialog 'Perspektive öffnen' auf 'OK'.
3. Erweitern Sie das Portalprojekt in der Sicht 'Navigator'.
4. Wählen Sie die .portalsettings-Datei aus, und öffnen Sie sie im Texteditor.
5. Fügen Sie das Folgende 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 Berechtigungsklasse "Web Developer (Advanced)" muss aktiviert sein, damit der Assistent 'Portal importieren' sowie die Portal- und Portlet-Beispiele (in der Beispielsammlung) angezeigt werden. Zum Aktivieren der Berechtigungsklasse wechseln Sie in 'Hilfe' > 'Willkommen' und klicken in 'Willkommen' auf die Schaltfläche "Berechtigungsklassen aktivieren", die sich in der Ecke des Bildschirms befindet. Wählen Sie anschließend die Berechtigungsklasse "Web Developer (Advanced)" aus, um sie zu aktivieren. Starten Sie den Assistenten oder die Beispielsammlung erneut, damit die Änderungen wirksam werden.