WebCenter

Aus XmasWiki
Wechseln zu: Navigation, Suche

Entwicklung der Komponenten im JDeveloper

Allgemein

Standards & Kürzel

  • Portlet - Ein Portlet wird als IFrame gerendert. Fehlermeldungen und Popups müssen entsprechend innerhalb dieses IFrames angezeigt werden.
  • Taskflow - Ein Taskflow ist eine Applikation innerhalb von WebCenter die eine eigene Navigation, Transaktionssteuerung und Logik besitzt. Es wird damit ein Prozess abgebildet. Ein Taskflow ist bei der Anzeige nicht auf den Bereich eingeschränkt dem er zugeordnet ist. Meldungen und Informationen können auf der ganzen Seite angezeigt werden. Ein Taskflow hat im Prinzip nur Vorteile, bis auf die nicht mögliche Personalisierung.
  • JSR 168 - Dieser Java Standard definiert die Kommunikation zwischen Portlet und Portal.
  • JSR 286 - Dieser Java Standard definiert die Kommunikation zwischen zwei Portlets.

JDeveloper

Mögliche Komponenten im JDeveloper

  • Generic Application -Projekt oder Komponenten, die weder an ADF noch an Webcenter gebunden sind
  • Fusion Web Application (ADF) - bestehend aus Model & ViewController
  • Portlet Producer Application - standard JSR 286 basierende Portlets, welche auf Basis JSF, JSP und Java servlets basieren
  • WebCenter Portal Application - Applikation für welche direkt als WebCenter

Partial Trigger

  • Element welches den Inhalt erhalten soll muss mit der ID der Aktion verknüpft werden. Dies geschieht im Format (cb1 = ID der Quelle):

:cb1

Task Flow

Erstellung

  • Fusion Web Application (ADF) erstellen
  • jsf Seite oder jsff (JSF Fragment) hinzufügen (JSF Seite kann man einzeln ausführen und testen, jsff geht nicht)
  • rechtsklick auf ViewController -> Project Properties -> Java EE Application -> Pfad verkürzen
  • rechtsklick auf ViewController -> Project Properties -> Deployment -> Neu -> ADF Library JAR File
  • rechtsklick auf ViewController -> Deploy -> zu JAR exportieren

Hinzufügen zur WebCenter Application

  • Exportierte *.jar Datei zuerst in das entsprechende Projekt kopieren
    • Ordner: \application\Portal\lib
  • Bei IDE Connection eine neue File Connection erstellen
    • Bei mir wäre das D:\JDeveloper\mywork\application\Portal\lib
  • Filesystemstruktur aufklappen bis die Task Flow Definition auswählbar ist (File Connection\TestTaskFlow.jar\ADF Task Flows\test-task-flow-definition)
    • rechtsklick auf die Definition und Add to project
  • 2 Wege den Task Flow zu benutzen
    • Verwendung des Task Flow direkt auf einer Seite. Der TaskFlow wird dann direkt im JDeveloper auf einer JSPX Seite hinzufügt
    • Verwendung des Task Flow über den Ressource Catalog. Der Task Flow kann dann zur Laufzeit (über den Composer im Browser) hinzugefügt werden.
      • Hierzu muss zuerst der Eintrag im Default Catalog (default-catalog.xml) oder dem entsprechend aktiven Catalog hinzufügt werden.
        • In der Projektansicht folgenden Ordner aufsuchen Projekt\Web Content\oracle\portalapp\catalogs und die default-catalog.xml öffnen.
        • In der Source-Ansicht folgende Stelle recht weit unten suchen:

       </url>
     </contents>
   </folder>
 </contents>

        • rechtsklick auf die Task Flow Definition (im Bereich der IDE Connection) und "Show Catalog Reference" klicken.
        • Code kopieren <resource id=..... /> und diesen folgendermaßen einfügen und danach Speichern:

       </url>
     </contents>
   </folder>
   <resource id="imap-task-flow-definition"
         repository="application.classpath"
         path="ImapTaskFlow.jar/ADF_TaskFlow/WEB-INF+imap-task-flow-definition.xml#imap-task-flow-definition"/>
 </contents>

      • Jetzt muss noch die Berechtigung innerhalb des Projekts für die bestimmten Rollen angepasst werden. Dazu muss die jazn-data.xml angepasst werden
        • Application Resources -> Descriptors\META-INF\jazn-data.xml öffnen und Resource grants Tab anklicken.
        • Bei Resource Type Task Flow auswählen und im rechten Bereich die untere Checkbox (Show task flows from ADF libraries) anklicken
        • Unten den neuen Taskflow suchen und auswählen und in der Mitte die Berechtigung am besten über die Application Role setzen. Der Task Flow muss mindestens in der Spalte Actions bei view ein Haken haben.

Portlet

Erstellen

  • Portlet Producer Application erstellen.
  • Komponenten auswählen: Portlet View beim Projekt auswählen (ADF Faces, Webcenter Portlet Creation Service & JSF wird automatisch mit gesetzt).
  • rechtsklick auf Projekt -> New -> Web Tier / Portlets -> Standards-based Java Portlet (JSR 286). Dabei wird nun eine view.jspx (und falls auch editiert werden darf eine edit.jspx) erstellt.
  • Um nun einfachen Javacode darin aufzurufen im Bereich Application Source eine neue Klasse erstellen
    • ViewController -> New -> General-> Java Class (Wrapper)
    • In dieser Klasse sollten nun alle Attribute die man durch Eingaben oder als Parameter verändern kann als Klassenparameter erstellt werden und danach mittels rechtsklick -> generate Accessors die getter & setter erzeugt werden.
    • Nun gibts 2 Möglichkeiten. Entweder man erzeugt eine DataControl oder man erzeugt ein Managed Bean
      • DataControl
        • Für die DataControl Variante: Jetzt rechtsklick auf die Klasse und Create Datacontrol klicken.
        • Danach hat man im Bereich DataControl die Methoden, Rückgabewerte und Parameter zur Auswahl und kann diese auf die jeweilige Seite (*.jspx) ziehen
      • Managed Bean
        • Für die Managed Bean Variante im Projekt -> Web Content -> WEB-INF -> die faces-config.xml auswählen und dort in der Mitte auf Overview klicken.
        • Nun bei Managed Bean auf das + klicken und die Javaklasse die als Wrapper angelegt wurde auswählen
        • Danach die view.jspx öffnen und dort von den ADF Komponenten ein input Text oder ähnliches reinziehen. Doppelklick auf das Feld und dann die entsprechende Managed Bean auswählen. Den Methodennamen erstmal drin lassen und danach aus der *.java Klasse wieder entfernen.
        • Weiter sollte man dann im Item den Validator.
        • Nun als Value den Namen der Managed Bean mit der jeweiligen Variable der Klasse aufrufen, zu welcher getter und setter existieren: #{Bean.username}
    • Nun kann man noch die Label anpassen und auf Run (auf der jspx Seite) diese ausführen
    • Zur Einfachheit kann man am besten unter Project Properties bei Java EE Application den Application Name und den Context Root setzen (Name=Name und Root= name).

Deployen

Hat man nun ein Portlet fertiggstellt, muss man es noch auf den entsprechenden Server installieren (deployen). Hierfür gibt es verschiedene Möglichkeiten die im einzelnen hier erwähnt werden:

  • Portlet lokal deployen und Remote nutzen
  • Portlet lokal deployen und lokal nutzen
  • Portlet remote deployen und Remote nutzen
  • Portlet remote deployen und lokal nutzen

Lokal sollte man am besten die JSPX Datei direkt mittels "run" ausführen und das Deployment wird übernommen.

Remote sollte man folgende Schritte beachten:

  • Dafür zuerst unter Project Properties (beim Viewcontroller auf Deployment klicken und entsprechend ein neues Profil anlegen.
    • ViewController -> Project Properties -> Deployment -> Name auswählen oder New
    • General -> "Specify Java EE Web Context Root" auf eine Kurzbezeichnung umstellen
    • ViewController -> Project Properties -> Java EE Application -> Java EE Application Name und Java EE Web Context Root auf Kurzbezeichnung ändern
    • beides mit Klick auf Ok abschließen und oben auf alles Speichern

Als nächstes muss eine Server Connection eingerichtet werden.

  • rechts im JDeveloper bei IDE Connections
    • Application Server -> New Application Server
    • Name und Version auswählen
    • Authentication -> weblogic und Passwort eingeben
    • Configuration -> Hostname, Port (7001), SSL (7002) und Domain (owc11g) eingeben
    • Test -> einmal Testen
    • Abschließen mit Ok

Deployment über JDeveloper

Nach den Vorbereitungen wird nun das Portlet Deployed

  • rechtsklick auf ViewController -> Deploy
    • Deploy to Application Server
    • Server auswählen (IntegratedWebLogicServer ist der lokale im JDeveloper, also den anderen wählen)
    • Weblogic Options -> WC_Portlet auswählen und "Deploy as a standalone Application" unten lassen
      • wichtig: hierbei muss der WC_Portlet Container laufen ansonsten geht dies nicht.
    • Finish dann abschließen

Nun läuft in der unteren Tab im JDeveloper der Prozess ab und beginnt mit der Meldung:

----  Deployment started.  ----
Target platform is  (Weblogic 10.3).
Running dependency analysis...
Building...
Deploying profile...
Wrote Web Application Module to D:\JDeveloper\mywork\Deploy2\ViewController\deploy\Deploy2.war
Wrote Enterprise Application Module to D:\JDeveloper\mywork\Deploy2\ViewController\deploy\Deploy2.ear
Deploying Application...
Operation 'deploy' on application 'Deploy2' is initializing on 'WC_Portlet'
Operation 'deploy' on application 'Deploy2' is in progress on 'WC_Portlet'
Operation 'deploy' on application 'Deploy2' has succeeded on 'WC_Portlet'
Application Deployed Successfully.
The following URL context root(s) were defined and can be used as a starting point to test your application:
http://10.10.10.10:8889/Deploy2
Elapsed time for deployment:  43 seconds
----  Deployment finished.  ----

Deployment über Browser / Enterprise Manager

  • Im Browser dafür den Enterprise Manager aufrufen: http://server:7001/em
  • Dort dann unten Webcenter -> Webcenter Spaces -> Instanzname auswählen
  • Dann mittig oben auf das Webcenter Drop-Down drücken und Producer registrieren auswählen.
  • Da dann den Namen und die WSDL eintragen: http://10.10.10.10:8889/Deploy2/portlets/wsrp2?WSDL Diese Adresse muss auch schon im Browser funktionieren und sollte vom Server (wo der Portlet Producer läuft aufrufbar sein (darauf achten, dass kein localhost als Adresse verwendet wird)

Mögliche Fehler

Jetzt sollte man die Adresse (obiges Beispiel: http://10.10.10.10:8889/Deploy2) aufrufen können. Dabei auf folgende Sachen achten:

  • Das Portlet wurde nicht im richtigen Container deployed. richtig wäre=WC_Portlet
  • Der Portlet Container ist nicht hochgefahren. Um das zu überprüfen den Enterprise Manager (http://server:7001/em aufrufen und überprüfen ob der WC_Portlet Container hochgefahren ist.
  • Die Adresse 10.10.10.10 muss ggf. durch die korrekte Adresse ersetzt werden
  • Bekommt man bei der Adresse http://10.10.10.10:8889/Deploy2 ein 403-Forbidden hat man die JSPX Seite nicht korrekt als Portlet based JSR 286. Nur mit dieser Mechanik wird eine WSDL Syntax erstellt und man bekommt die Seite welche die WSRP v2 WSDL bereitstellt.
  • Falls man über JDeveloper deployed und folgende Nachricht bekommt

The task cannot be processed further until the current edit session is activated...
oder in Deutsch
Fusion Middleware Control kann mit dieser Bereitstellung nicht fortfahren...

dann kann dies mehere Gründe haben.

  • Entweder ist ein voriger Deployment Prozess auf dem Server fehlgeschlagen und blockiert das Deployment weiterer Anwendungen.
    • Dies kann man sehen wenn man sich in der Adminkonsole anmeldet (http://server:7001/console) und oben links bei Change Center, die Möglichkeit hat Änderungen zurückzuführen bzw. einen Neustart auszuführen. Bei mir reichte die Rückführung.
  • Oder der Server ist einfach voll ausgelastet. Dafür über RemoteControl auf den Server und im Task Manager mal gucken wie viel Ram verbraucht ist.

Portlet (Producer) registrieren

Um nun dieses Portlet in WebCenter nutzen zu können muss dies "registriert" werden. Dies kann man auf zwei Wege durchführen.

Deployment über Enterprise Manager

Enterprise Manager http://server:7001/em

  • WebCenter -> WebCenter Spaces -> webcenter(11.1.1.4.0) (WC_Spaces)
  • Nun sollte das Portlet auch unter dem Namen bei Inhalt hinzufügen auswählbar sein.
Deployment über Webcenter (Portlet Producer)
  • In Webcenter einloggen http://server:8888/webcenter
  • Eigene Seite erstellen bzw. bearbeiten. Oder in der Vorlage eine Seite damit erstellen
    • Im Composer auf "Inhalt hinzufügen" -> Portlet -> Portlet-Administration -> Producer-Registrierung -> Hinzufügen
    • schließen und ggf. warten (je nachdem wie der Server ausgelastet ist)
  • Jetzt im Portlet Producer auf Registrieren
  • Nun sollte das Portlet auch unter dem Namen bei Inhalt hinzufügen auswählbar sein.

Beispielentwicklung anhand des Buchs "Solutions with Webcenter 11g"

Innerhalb des Buches "Solutions with Webcenter 11g" wird anhand eines Beispiels (Chapter 4), ein Webservice erstellt, darauf basierend ein Portlet, was den Webservice anfragt und eine Webcenter Application kapselt das Portlet. Wie oben erwähnt wird mit dem JDeveloper entwickelt. Der Webservice Für den Webservice erstellt man eine "New Application" -> Generic Application und fügt dieser die entsprechenden Techniken hinzu (hier Webservice und Java). Danach wird eine neue Javaklasse dem Projekt hinzugefügt (rechtsklick Projekt -> New -> General -> Java Class).In dieser wird eine Methode sayHello implementiert. Danach wird für diese Methode ein Webservice erstellt (rechtsklick auf *.java -> Create Web Service -> Java EE 1.5 with support for JAX-WS Annotations). Danach kann man die WSDL anzeigen lassen (rechtsklick auf *.java -> Show WSDL for Web Service Annotations.

Nun muss das Deployment noch erstellt werden, damit die Applikation auch auf dem Server installiert wird. (rechtsklick auf Projektnamen -> Project Properties -> Deployment -> WebSErvices (WAR File). Danach (General -> Specify Java EE WEb Context Root -> HelloWorldWS) und den Server dann starten (Run -> Start Server instance). Jetzt kann man das Deployment durchführen (rechtsklick Projekt -> Deploy -> WebService -> to -> IntegratedWLSConnection).Unter der Adresse http://localhost:7101/HelloWorldWS/HelloWorldPort ist der Webservice nun erreichbar. Die WSDL unter http://localhost:7101/HelloWorldWS/HelloWorldPort?wsdl

JDeveloper Tricks

Edit/Bearbeiten Modus der Seite

  • Beschreibung verschiedener Elemente einer Seite http://download.oracle.com/docs/cd/E15523_01/webcenter.1111/e10273/page.htm#BABCEBEE (Step 5 beschreibt den Edit Link)
  • Im JDeveloper unter Component Palette muss man Oracle Composer als Typ auswählen.
    • Die Komponente "Change Mode Link" beinhaltet die Verlinkung bzw. den Wechsel zwischen Bearbeiten und Ansicht einer Seite.
    • Wenn die Komponente hinzugefügt ist, sollte man noch aktivieren, dass die Bearbeitung über den Security Context aufgelöst wird, damit nur Leute die Seite bearbeiten können, die auch die Berechtigung haben.
    • Im Property Inspector (wenn das changeModeLink Objekt ausgewählt ist) unten auf Common klicken und dort in der Zeile rendered mit dem Expression Builder folgenden Eintrag erstellen: #{composerContext.securityContext.editAuthorized} (Unter JSF Managed Beans -> composerContext -> securityContext -> editAuthorized auswählen)

Aufruf von Javaklassen

Um in ADF/JDeveloper innerhalb einer Anwendung Java direkt aufzurufen kann man auch in die JSPX Seite bei einem Element folgenden Code bei value="" reinschreiben: #package.class.getText Der Standardweg wäre zu einer Java-Klasse ein Datacontrol zu erstellen und dies dann aus dem Bereich Datacontrol auf die JSPX Seite zu ziehen.
Dabei werden für die Parameter Eingabefelder erzeugt und zum auslösen der Funktion ein Button angelegt. Den Ausgabewert kann man dann auch separat auf die Seite ziehen.

Instanzlinks

Weitere standards

  • TrustStore: C:\oracle\Middleware\wlserver_10.3\server\lib\DemoTrust.jks
  • Standardpasswort: DemoTrustKeyStorePassPhrase

Benutzerverwaltung

erstellen / Create User

  • Einloggen in die Webcenter console => http://server:7001/console
  • Sicherheits-Realm -> myrealm (vorhandene Realm auswählen) -> Benutzer und Gruppen -> Neu
  • Standarduser ist meistens weblogic

Benutzer mit Adminrechten versehen

  • Einloggen unter http://server:8888/webcenter
  • Administration -> Sicherheit
  • Dort bei Auswählen auf Benutzer einstellen und den Usernamen eingeben und hinten Rolle einstellen. Danach auf Zugriffsberechtigungen klicken

Selfregistration aktivieren

Exchange Anbindung

  • Stand Februar 2011 ist eine direkte Verbindung zu Exchange nur für Exchange 2007 und 2003 möglich. Infos zur Anbindung unter:

Webcenter Installation

Bücher

Oracle Fusion Developer Guide - Buildung Rich Internet Applications with Oracle ADF Business Coponenents and Oracle ADF Faces

Chapter 1 - The Quick Learner's Guide to Oracle Fusion Web Application Development

  • Einstieg über eine kurze Erklärung der ADF Bestandteile
  • Zusammensetzung des Fusion Application Workspaces in JDeveloper
  • Erstellung eines Business Component Models (Datenbank Verbindung)
  • Assoziations, Compositions, View Objects (ViewObjectImpl, ViewDefImpl, ViewRowImpl)
  • Application Modules (ApplicationModuleImpl, ApplicationModuleDefImpl (Custom))
  • 2 Arten von Layer: data controls & bindings

Videos

WebCenter Proficiency 11gPS1 Feature Overview Part I & II (Stand PS 1)

Framework

Composer

  • role-based Business Dictionary/Resource Catalog (Taskflows/Portlets...)
  • Personalization in View Mode
  • Customization in Edit Mode

Services

  • Discussions, Announcements, Wiki, Blog, Tags, Socaial Bookmarks, Links, Documents/Content, Mail, Worklist, Search, RSS, Recent Activity, Instant Messaging & Presence

Products

  • Ensemble - Schnittstelle zwischen Portlets & Rest Services
  • Analytics - Informationen über Zugriffe auf Portlets (ähnlich Google Analytics)
  • Application Accelerator for .Net
  • Console for Sharepoint

Spaces

  • Personal Spaces, Group Spaces, Community Spaces, Social Networking, Business Role Pages, Profile, Favorites, Group Events, Lists, Notes, Skins, Template/Chrome, ADF Taskflow (as library or as Standards based Portlet)
  • native iPhone App

People Connection

  • Verknüpfungen wie bei Facebook
  • Activity Stream/Graph (über Tomcat?? darstellen und per Portlet)

WebCenter Security Framework

  • Identity Management (LDAP) and Policy Management (WebCenter/Oracle Wallet)
  • SSO => WLS SAML, OSSO, Oracle Access Manager, Windows Native Authentication (?)