Oracle Fusion Middleware Blog

Deutsche Informationen rund um Oracle Fusion Middleware

Archive for April 2012

Positionierung von Pop-Ups

leave a comment »

Hier eine Übersicht über die Positionierung von Popus in der <af:showPopupBehaviour> Komponente,
Property=Align

afterEnd
image
afterStart
image
beforeEnd
image
beforeStart
image
endAfter
image
endBefore
image
startAfter
image
startBefore
image

<DM>

Advertisements

Written by fmtechteam

30/04/2012 at 11:42

WebCenter Performance Tuning

leave a comment »

Das Oracle A-Team, eine Gruppe von Experten rund um Softwarearchitekturen, hat diverse Hinweise zum Performance Tuning für WebCenter Anwendungen in einem Blog veröffentlicht. Diese sind sehr sehenswert.

Die meisten dieser Hinweise beziehen sich auch auf reine ADF Anwendungen.

<DM>

Written by fmtechteam

18/04/2012 at 13:51

Mehrsprachige Seitennavigation in WebCenter Portal Framework Anwendungen

leave a comment »

Eine Mehrsprachigkeit wird auch in WebCenter Anwendungen grundsätzlich über Resource Bundles (im Folgenden mit RB abgekürzt) erreicht. Immer dann, wenn der Entwickler auf Code- oder Propertiesebene unterwegs ist, kann er in den meisten Fällen die jeweiligen Key-Value Pairs aus dem RB adressieren. Wie man eine Anwendung mit einem RB versieht, kann man der ADF Dokumentation bzw. entsprechenden Tutorials oder Blogs entnehmen. Das soll also nicht Gegenstand dieses Blogeintrages sein. Die Behandlung von Mehrsprachigkeit wird dann schwieriger, wenn in der Anwendung systemseitig, also durch die Software oder durch das Framework mitgebracht, Weboberflächen eingebunden oder bestimme UI Elemente gekapselt sind, auf die der Entwickler keinen oder nur indirekten Zugriff hat. In einer WebCenter Portal Framework Anwendung sind dies bspw. der Page Service und die Administrationsoberfläche. Die Adminoberfläche ist Bestandteil der WebCenter Software und demnach inhaltlich fixiert. Diese UI ist bereits in >20 Sprachen übersetzt worden (siehe dazu WebCenter Dokumentation). Das Hauptaugenmerk möchte ich auf den Pageservice richten, der einerseits ein Feature der WebCenter Software ist, andererseits aber – im Gegensatz zur Adminoberfläche – vom Entwickler oder Anwender als Quasi-Entwicklungsbaustein verwendet wird. Nur zur Erinnerung, der Pageservice ist die Funktionalität von WebCenter, die einer Webanwendung eine Seitenstruktur (ähnlich einer Website) mitgibt und auch zur Laufzeit ADF Seiten erstellen lässt. Jede Seite erhält einen Namen, der an vielen Stellen der Webanwendung auftauchen kann – sei es als Pagelabel, Navigationslink, oder Breadcrumb. Demnach sollte eine Pagestruktur auch mehrsprachig gestaltet sein, um die o.g. Elemente auch in der jeweiligen Sprache anzeigen zu können.

image

image

Die Bilder sind einer WebCenter Tippspielanwendung zur Europameisterschaft 2012 entnommen, die hier als Beispiel dienen soll. Man sieht hier hier die Navigationsleiste mit den jeweiligen Seitenlinks auf englisch und deutsch, darunter den Seitennamen als Orientierungshilfe. Diese Angaben müssen natürlich übersetzt werden. Unter http://www.youtube.com/watch?v=ha6FzOkVc24 gibt es von Bob Frazer aus dem Product Management eine Beschreibung, wie er die Navigation mehrsprachig gestalten würde. Zusammengefasst  wird mit seinem Lösungsansatz das Navigationsmodell (siehe dazu Webcenter Dokumentation) über ein RB übersetzt. Der Nachteil dieser Methode liegt darin, dass das Navigationsmodell von der Definition der Page Hierarchy (pages.xml) entkoppelt wird. Das heißt konkret, dass es in der default-navigation.xml keinen Verweis mehr auf die Pagehierarchy gibt, sondern an dieser Stelle die Seiten direkt referenziert werden. Es müssen also alle Seiten hier nocheinmal eingetragen werden, obwohl sie in der pages.xml schon definiert wurden. Eigentlich ist die pages.xml. der “Sinlge point of truth” in Sachen Sitestruktur und die Navigation sollte sich danach richten. Dieser Lösungsansatz wird dann in der Handhabung immer komplizierter, wenn z.B. zur Laufzeit neue Portalseiten über den Page Service erstellt werden. Diese müssten nämlich dann auch noch redundant im Navigationsmodell eingetragen werden, um darauf zugreifen zukönnen.

image

Das obige Bild zeigt den Normalfall, bei dem im Navigationmodell auf die Pagehierarchy verwiesen wird. Das sollte so bleiben, damit weitere Seiten, die zur Laufzeit hinzugefügt werden, auch automatisch im Navigationsbaum enthalten sind. Also sollte die Übersetzung der Seiten in der pages.xml ansetzen. Dort wird neben der Page ID auch der Seitentitel angegeben, der in der Navigation dargestellt werden soll.

image

Das Problem hier ist aber, dass man keine RB Keys im Titel eintragen kann. Das heisst, man kann hier nicht direkt eine Mehrsprachigkeit einbauen, wie zum Beispiel im Navigationsmodell lt. o.g. Lösungsansatz. Also muss man das auf anderem Weg erreichen. Hier die Lösung:

Schritt 1: RB in der WebCenter App aktivieren, meinetwegen wie im o.g. Lösungsansatz bereits gezeigt

Schritt 2: Definition der Page Hierarchy, wie gewünscht, im Feld ‘Title’ jedoch den RB Key verwenden, wie hier gezeigt.

image

Schritt 3: Eintragen der Keys in die Portal RB, wie hier gezeigt

image

Schritt 4: Verwenden der RB Keys im Page Template an den notwendigen Stellen, wie hier am Beispiel Navigationslink gezeigt

image

Das ist alles. Somit behält man die pages.xml als besagten ‘Single point of truth’ und hat gleichzeitig alle nachfolgenden Ergänzungen der Seitenstruktur zur Laufzeit in die Navigation aufgenommen. Die Frage, die sich hier zwangsläufig anschließt, ist, wie man RB zur Laufzeit ergänzen kann im Falle auch neue Seiten zur Laufzeit hinzugefügt werden und man deren Titel selbstverständlich auch wieder übersetzen muss. Das wird in einem der folgenden WebCenter Blogeinträge beschrieben.

<DM>

Written by fmtechteam

17/04/2012 at 13:02

Veröffentlicht in ADF, Detlef Müller, Development, WebCenter

Java Klassen in JAR Dateien suchen

leave a comment »

Die Suche nach einer Java Klasse, von der man weiß, daß sie sich in einer JAR Datei auf einem Rechner befindet, wird von der Utility JarScan unterstützt.

Diese Utility kann unter der folgenden Adresse heruntergeladen werden :

http://www.inetfeedback.com/jarscan/

Als Input Parameter wird eine Klasse oder ein Package gewählt. Ausgehend von einem Startverzeichnis werden alle darunter liegenden Verzeichnisse nach jar Dateien durchsucht und diese wiederum nach der Klasse oder dem Package.

Beispiel : Suche nach der Klasse IBPMContext ausgehend vom Verzeichnis /home/oracle

java -jar jarscan.jar -dir /home/oracle -class IBPMContext

Angezeigt werden zuerst alle gefundenen jar Dateien (dies können sehr viele sein) :
4749) scripts.jar [/oracle/fmwhome/utils/ccr/inventory/pending/scripts.jar]
4750) core.jar [/oracle/fmwhome/utils/ccr/inventory/pending/core.jar]
4751) engines.jar [/oracle/fmwhome/utils/ccr/inventory/pending/engines.jar]
4752) installer.jar [/oracle/fmwhome/utils/uninstall/WebLogic_Platform_10.3.5.0/installer.jar]
4753) wcf.jar [/oracle/fmwhome/utils/uninstall/WebLogic_Platform_10.3.5.0/wcf.jar]
4754) uninstall.jar [/oracle/fmwhome/utils/uninstall/uninstall.jar]

Dann kommt eine Liste mit den jar Dateien, in denen die Klasse gefunden wurde. Die Einträge haben das folgende Format :
===============================================
Found: IBPMContext
Class: oracle.bpel.services.bpm.common.IBPMContext
Package: oracle.bpel.services.bpm.common
Library Name: bpm-services.jar
Library Path: /oracle/fmwhome/Oracle_SOA1/.patch_storage/12413651_Sep_16_2011_07_27_11/original_patch/files/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar
===============================================

Bei der Suche nach einer Klasse muss nicht der vollständige Name angegeben werden. Gibt man in unserem Beispiel statt IBPMContext nur IBPM als Suchbegriff mit, dann werden alle Klassen herausgesucht, in denen dieser String vorkommt.

Der Befehl zur Suche nach einem Package sieht folgendermassen aus :

java -jar jarscan.jar -dir /home/oracle -package oracle.bpel.services.bpm.common

<Gert Schüßler>

Written by fmtechteam

04/04/2012 at 15:29

Veröffentlicht in ADF, Gert Schüßler, JDeveloper

Java Klassen in den JDeveloper Libraries suchen

leave a comment »

Wer hat im JDeveloper nicht schon öfter die Meldung bekommen, daß eine Java Klasse nicht gefunden werden kann. Es ist nicht immer einfach, herauszufinden, wo diese Klasse zu finden ist. Es gibt einen einfachen Weg, um herauszufinden, ob sich diese Klasse in den Libraries des JDevelopers befindet.  Das Projekt im JDeveloper wird markiert und über das Menu der rechten Maustaste werden die Projekt Properties geöffnet.

Unter den Properties wird ‚Libraries and Classpath’ markiert. Über den Button ‚Add Library’ wird der Dialog zum Hizufügen einer JDeveloper Library geöffnet :

Im oberen Suchfeld wird der Name der gesuchten Klasse eingegeben und dann auf den Button ‚Start search’ gedrückt :

Die Libraries des JDevelopers werden durchsucht und anschliessend wird das Ergebnis der Suche angezeigt :

Jetzt muß nur noch eine der gefundenen Libraries ausgewählt und zum Classpath hinzugefügt werden.

Vor dem Starten der Suche sollte noch überprüft werden, ob die Sucheinstellung auf ‚Class name‘, ‚Jar name‘ oder ‚Library name‘ gesetzt ist :

<Gert Schüßler>

Written by fmtechteam

04/04/2012 at 14:49

Veröffentlicht in Gert Schüßler, JDeveloper

EMail Body als HTML in BPM Suite 11g PS5 (11.1.1.6)

leave a comment »

In der BPM Suite 11g werden Informationen z.B. als Mail Notification an die Anwender verschickt. Der Inhalt kann als einfacher Text ohne Formatierung oder formatiert als HTML Output dargestellt werden. Dazu ist es in diesem Release notwendig, bei den Properties der Mail Notification im Attachments Tabreiter folgenden Eintrag vorzunehmen :

Im Tabreiter Content trägt man den HTML Code ein, z.B. :

concat(‚Der Urlaubsantrag für ‚,'<font color=“#ff0000″>‘,bpmn:getDataObject(‚benutzer‘),'</font>‘,‘ wurde ‚,'<font color=“#ff0000″>‘,’abgelehnt‘,'</font>)

Damit wird im Body der Mail der Benutzername und das Wort abgelehnt rot formatiert angezeigt :

Der Urlaubsantrag für jcooper wurde abgelehnt

<Gert Schüßler>

Written by fmtechteam

03/04/2012 at 16:00

Veröffentlicht in BPEL, BPM, Gert Schüßler, SOA

Side by Side Deployment von BPM Formularen (Webapplikationen)

leave a comment »

In einer BPM Suite 11g Roadshow kam die Frage auf, wie können mehrere Applikationsversionen von BPM Formularen nebeneinander existieren. Neue Clientanfragen sollen mit der neusten Version von Formularen und derzeit laufende Anfragen mit der existierenden (vorherigen) Version arbeiten. Im WebLogic Server gibt es schon seit vielen, vielen Jahren die Möglichkeit eine solche Koexistenz mit dem Feature „Side by Side Deployment“ zu erreichen. Was muss gemacht werden, damit die Applikation diese Funktionalität nutzen kann?

Als erstes muss im Manifest.mf File der Applikation (liegt im EAR File) ein Eintrag für die Versionierung vorgenommen werden: WebLogic-Application-Version: v1, wobei v1 irgendeine Versionsbezeichnung ist. Im JDeveloper wird über den Menüpunkt File->New->General->File  eine neue Datei mit irgendeinem Namen (hier im Beispiel MANIFEST.mf) welches die Endung mf haben muss, angelegt. Wichtig: beim Speichern der Manifestdatei muss der Cursor in einer neuen Zeile und nicht direkt hinter v1 stehen, ansonsten wird der letzte Eintrag nicht übernommen.

Im JDeveloper muss nun für die Formularapplikation ein Deployment Profile für ein EAR File angelegt werden. Dieses ist in der Regel vorhanden.

Nun wird das zuvor erzeugte Manifestfile dem EAR File hinzugefügt, indem das EAR File editiert wird.

Damit bei einem Redeploy der Applikation die vorherige, aktive Session nicht gelöscht wird, muss in der weblogic.xml Datei der Parameter save-sessions-enabled auf true gesetzt werden:

Nun kann die Applikation über den Menüpunkt Application->Deploy auf den WLS verteilt werden. In der WLS Console ist zu erkennen, dass die Applikation versioniert ist.

Nach dem erneuten Deployment der geänderten Applikationsversion können nun mehrere Versionen dieser Applikation (Formulare) nebeneinander existieren. Bestehende Sessions arbeiten mit der alten Version weiter, neue Anfragen bekommen  die neue Version präsentiert. Hier die Anwendung der Version 1. Es ist zu erkennen, dass hier unten links das Feld Produktname fehlt:Anwendungsversion 2 zeigt den Produktnamen, d.h. alle neuen Clientrequests bekommen diese neue Version angezeigt:

In der WLS Console ist schön zu erkennen, dass die alte Version 1 im Moment noch aktiv ist, da eine aktuelle Session noch offen ist, d.h. das alte Formular ist noch in Bearbeitung.

Wenn die Session beendet wird und es sind keine weiteren Formulare mit der Version 1 in Bearbeitung, dann wird die Version 1 inaktiv und auf Retired gesetzt.

<Kersten Mebus>

Written by fmtechteam

03/04/2012 at 12:41

Veröffentlicht in ADF, Appserver, BPM, JDeveloper, Kersten Mebus, SOA