Oracle Fusion Middleware Blog

Deutsche Informationen rund um Oracle Fusion Middleware

Archive for the ‘JDeveloper’ Category

Generierung von REST Clients mit verschiedenen IDEs (JDeveloper, Eclipse, NetBeans)

leave a comment »

In der Welt mobiler Anwendungen erfolgt der Zugriff auf Daten und Funktionen im Backend zumeist über RESTful Services, die die Nachrichten im kompakten JSON-Format austauschen. Im Gegensatz zu SOAP-Services, bei denen sich die WSDL-Beschreibung als Standard durchgesetzt hat, gibt es für RESTful Services mit JSON noch keinen etablierten Standard. Erste Ansätze existieren mit WADL (Web Application Description Language) und RAML (RESTful API Modeling Language).
Wie können nun die verschiedenen IDEs im Oracle-Umfeld mit existierenden REST/JSON-Services umgehen und aus den zur Verfügung stehenden Informationen einen REST-Client generieren, der beispielsweise anschließend in einer mobilen Anwendung verwendet werden kann, um mit dem REST Service zu kommunizieren. Für die Entwicklung der mobilen Anwendungen soll das Oracle Mobile Application Framework (MAF) eingesetzt werden.

Oracle JDeveloper 12.1.3

Sofern der REST Service die Nachrichten im XML-Format austauscht und dafür ein XSD Schema existiert, kann der Web Service Data Control Wizard im JDeveloper verwendet werden, um ein Data Control für den Web Service zu generieren. Sollen die Daten dagegen im JSON-Format ausgetauscht werden, muss der Client unter Verwendung des REST Service Adapters manuell in Java programmiert werden. Anschließend kann aus dem Service Object ein POJO Data Control generiert werden. Dieses Vorgehen ist ausführlich in einem Tutorial auf OTN beschrieben.

Oracle Enterprise Pack for Eclipse 12.1.3.4 (OEPE)

Alternativ zum Oracle JDeveloper kann auch OEPE eingesetzt werden, um mobile Applikationen auf Basis des Oracle Mobile Application Frameworks (MAF) zu entwickeln. In OEPE gibt es einen REST Service Editor, der auch für REST-JSON Services die notwendigen Artefakte automatisch generiert, ohne dass es eine Beschreibung des RESTful Services gibt.
Dazu praktiziert der Wizard einen interessanten Ansatz:

  • Im ersten Schritt (Tab REST Client) wird zunächst der Service „erforscht“, indem der Service wiederholt unter Angabe der URL, von Header-Informationen und Query Parametern aufgerufen wird und die Ergebnisse angeschaut werden. In dieser Phase werden keine Ergebnisse gespeichert.
  • Hat man die Struktur verstanden, kann mit Hilfe der Funktion „Import the REST Client Information“ eine erste Beschreibung des Service im XMI-Format (XML Model Interchange) erstellt werden. Diese wird im Tab REST API sicht- und editierbar. Alle Änderungen werden unmittelbar in der XMI-Beschreibung persistiert.
  • Im letzten Schritt „Artifact Generation“ wird aus der XMI-Beschreibung des Service ein Java Client generiert.
    Aus dem Service Object kann anschließend wie im JDeveloper ein POJO Data Control erzeugt werden.
OEPE REST Service Editor

OEPE REST Service Editor

Dieses Vorgehen ist in zwei Blog Posts ausführlich beschrieben:
https://blogs.oracle.com/oepe/entry/introduction_to_rest_service_editor
https://blogs.oracle.com/oepe/entry/introduction_to_the_rest_service

NetBeans 8.0.2

Im Unterschied zu den zwei vorhergehenden IDEs können mit NetBeans keine mobilen Applikationen auf Basis von Oracle MAF erstellt werden. Trotzdem war es interessant, die Möglichkeiten von NetBeans zu erkunden.
Wurden die REST Services mit NetBeans z.B. als annotierte Java-Klassen erstellt, kann ein REST Service Client dafür generiert werden. NetBeans bietet nach der Installation eine Reihe populärer Services (von Amazon, Delicious, Flickr, Google, ..) an, die jeweils durch eine WADL-Datei beschrieben sind.

NetBeans - Services

NetBeans – Services

Hier können eigene Services (SOAP oder REST) hinzugefügt werden, zu denen eine WSDL- oder WADL-Datei angegeben werden muss. Ist eine WADL-Datei für den Service hinterlegt kann anschließend mit Hilfe des RESTful Java Client Wizard der client-seitige Code generiert werden.
Das Vorgehen ist in diesem Tutorial und in diesem Video beschrieben.
Fehlt eine WADL-Beschreibung des Service müsste man diese vorab erstellen. Dieses Wiki beschreibt einige mögliche Ansätze und Werkzeuge zur Generierung einer WADL-Datei.

<JM>

Written by fmtechteam

13/04/2015 at 15:00

Probleme beim Deployment von MAF Anwendungen auf iOS

leave a comment »

Beim Deployment von MAF bzw. ADF Mobile Anwendungen wird bekanntermaßen auf XCode im Hintergund zurückgegriffen. Das heißt der Buildprozess im JDeveloper stellt aus der mobilen Applikation alle notwendigen Artefakte zu einem XCode Projekt zusammen und startet dann XCode per commmand line, um das entsprechende Target zu beliefern (entweder Installationspaket, iOS Simulator oder iOS Device).

Ein wesentliches Problem hierbei ist, dass MAF bzw JDeveloper stark von den Releasezyklen für XCode und iOS abhängt, die durch Apple vorgegeben werden. Außerdem ist die Releasefestigkeit von Apple sehr schwach, das heißt Apple nimmt zum Teil deutliche Veränderungen zwischen den Releases von XCode vor. Das erschwert natürlich alle Entwicklungspartner von Apple, ihre entsprechenden Systeme an die Apple Anwendungswelt anzupassen. Oracle ist natürlich bemüht, diese zum Teil extreme Dynamik von Apple abzufangen und MAF an die neuen Voraussetzungen schnellstens anzupassen. Dennoch kann es immer wieder zu Fehlern führen, wenn man im Buildprozess über den JDeveloper ein Deployment über XCode programmatisch auslösen möchte. Eine Möglichkeit der Lösung besteht darin, das über den JDeveloper erstellte Projekt in XCode direkt zu verarbeiten und zum Target zu liefern. Dazu sind folgende Schritte durchzuführen.

  1. Deployen der Anwendung im JDeveloper als „Distribution Package
  2. Im Filesystem Doppelklick auf das Archiv Oracle_ADFmc_Container_Template.xcodeproj im Ordner <MyApp>/deploy/iOS1/temporary_xcode_project. Xcode wird dadurch gestartet
  3. In Xcode wähle Product > Destination und dann iOS Device
  4. In Xcode wähle Product > Archive. Dadurch wird eine Archivdatei erstellt und der Organizer mit diesem Archiv aktiviert gestartet
  5. Im Organizer wähle Distribute
  6. Wähle Save for Enterprise or Ad Hoc Deployment und klicke auf Next
  7. Wähle das entsprechende Provisioning Profile, welches wahrscheinlich schon als Standard aktiviert ist, und klicke auf Export
  8. Gib den Namen und den Speicherort der IPA Datei an

Fertig!

Nun kann das Archiv entweder über iTunes oder andere Werkzeuge auf den Geräten installiert werden.

<DM>

Written by fmtechteam

28/10/2014 at 12:10

Veröffentlicht in ADF Mobile, Detlef Müller, JDeveloper, MAF, Mobile

Derby DB lässt sich nicht starten (Socket Permission on Port 1527)

with 2 comments

In einigen Oracle-Produkten wird die Derby DB intern zur Speicherung von Informationen genutzt. Sie ist zum Beispiel im JDeveloper 12c und in der BI Publisher Trial Edition 11.1.1.x enthalten. Normalerweise wird diese Datenbank auf dem Port 1527 gestartet. Es ist klar, dass zwei gleichzeitig aktive Produkte nicht jeweils eine Derby DB auf demselben Port starten können. Im BI Publisher lässt sich die Port-Nummer ändern, im JDeveloper (noch) nicht. Aber das ist ein anderes Thema.

In diesem Beitrag geht es vor allem darum, dass mit Java7 Update 51 die Sicherheitseinstellungen verschärft wurden und der Zugriff auf Ports zwischen 1025 und 49151 explizit erlaubt werden muss. Ohne diesen expliziten Grant lässt sich die Derby DB nicht mehr starten. Entsprechende Hinweise auf ein Problem findet man in der Datei derby.log bzw. in der Console des JDevelopers, da bestimmte Data Sources (MDS, OWSM, ..) nicht mehr erreicht werden können.

Was ist zu tun?
In der Datei <jdk_location>/jre/lib/security/java.policy muss folgender Eintrag hinzugefügt werden:

grant {
permission java.net.SocketPermission "localhost:1527", "listen";
};

<JM>

Written by fmtechteam

26/02/2014 at 12:56

Veröffentlicht in BI Publisher, Java, Jürgen Menge, JDeveloper

ADF – Nested Collections als WebService Response individuell darstellen

leave a comment »

Problem:
Wie behandelt man eine Master Detail Beziehung außerhalb der Standard MD UI Komponenten (Master Form/Table –> Detail Form/Table), zum Beispiel in einem Panel Accordion, wenn die Daten statt über ADF BC aus einem Web Service Request bereitgestellt werden und die Datenobjekte geschachtelte Collections sind? Genauer gesagt sollten die showDetailItems des panelAccordion über die Master Daten und commandNavigationItems über die Detail Daten iterieren. Die Darstellung soll in etwa so aussehen:

Master 1 image
    Detail 1.1- Link
    Detail 1.2- Link
Master 2 image
    Detail 2.1- Link
    Detail 2.2- Link
    Detail 2.3- Link
Master 3 image
Master 4 image
Master n image

Lösung

Gehen wir also von folgender Datentyp Definition aus als Ergebnis der Aufbereitung der Datentypen unseres WS Requests:

DetailsType
int linkId;
String linkTitel;
String linkUrl;
. . .

MasterType
int masterId;
String masterTitel;
List<DetailsType> details;
. . .

MDListType
List<MasterType> mdList;

Eine Methode (getMDdata()) in einer Pojo (MDSample) liefert eine Rückgabe vom Typ MDListType. Somit sieht das Data Control in der DC Palette wie folgt aus

image

Als erstes wollen wir den Iterator über die Master Collection aufbauen. Dazu platzieren wir das panelAccordion auf die JSF und darin ein forEach Element. Es wird dabei ein showDetailItem automatisch eingefügt. Bitte die Anordnung derart verändern, dass das showDetailItem als Kindelement zum forEach Element wird. Wir wollen ja pro Master Datensatz ein showDetailItem erhalten.

image

Nun müssen wir ein tree Binding in der PageDefinition anlegen, auf das wir die forEach Komponente binden. Dabei wird als Root Data Source die mdList Collection ausgewählt, dann auf Add Rule geklickt und es wird der MasterType angewählt. Hier bitte den Detail Type hinzufügen und auf beiden Typen die gewünschten Attribute zur Darstellung hinzufügen. Das Binding sollte dann in etwa so aussehen.

image

Jetzt können wir die forEach Komponenten des Masters binden und dem Binding einen Variablennamen vergeben.

<af:forEach items=“#{bindings.mdList.children}“ var=“masterVar“>

Als nächstes wird eine zweite forEach Komponente auf das showDetailItem gezogen und wie folgt gebunden.

<af:forEach items=“#{masterVar.children}“ var=“detailsVar“/>

Die Variable detailsVar ist nun die Basis für alles weitere Binding der Details, z.B. commandNavigationItem oder ähnliches. Der Source Code der Seite sieht dann in etwa so aus

<af:panelAccordion id=“pa1″>
<af:forEach items=“#{bindings.mdList.children}“ var=“masterVar“>
<af:showDetailItem text=“showDetailItem 1″ id=“sdi1″>
<af:navigationPane id=“np1″>
<af:forEach items=“#{masterVar.children}“ var=“detailsVar“>
<af:commandNavigationItem text=“#{detailsVar.linkTitel}“ id=“cni1″/>
</af:forEach>
</af:navigationPane>
</af:showDetailItem>
</af:forEach>
</af:panelAccordion>

Man kann nun die Action des Navigation Items mit dem Attribut detailsVar.linkUrl assoziieren.

<DM>

Written by fmtechteam

16/10/2012 at 11:18

Kostenlose Version von ADF veröffentlicht – ADF Essentials

leave a comment »

Seit dem 24.September 2012 gibt es eine kostenlose Version von ADF – ADF Essentials genannt. Der genaue Wortlaut der Ankündigung ist hier zu finden. Weitere Details darüber, was genau enthalten ist und was nicht, kann man dem FAQ Dokument entnehmen. Hier eine kurze Zusammenfassung:

In ADF Essentials enthalten sind:

  • Oracle ADF Faces Rich Client Components
  • Oracle ADF Controller
  • Oracle ADF Model
  • Oracle ADF Business Components

Nicht enthalten sind :

  • Oracle ADF Mobile
  • Oracle ADF Desktop Integration
  • Oracle ADF Security
  • Oracle ADF Web service data control
  • Oracle ADF remote taskflows
  • Oracle ADF Business Component’s Service Interfaces
  • Oracle ADF Data Controls for BI
  • Essbase und BAM
  • Integration mit Oracle Fusion Middleware Features, wie MDS, OPSS, OWSM, Enterprise Manager und MBeans, High Availability und Clustering

Das heißt nun nicht, dass ADF Essentials zu Open Source wird. Ein Support wird auch nur im Rahmen des Community Supports geleistet. Will man also Product Support in Anspruch nehmen, geht das logischerweise nur über eine gültige ADF Lizenz bzw. man kann Support für ADF Essentials erwerben. Als Zielplatform fürs Deployment werden Weblogic 11g, Glassfish 3.1 und WebSphere 7 supportet. Aus Lizenzsicht gibt es aber keine Restriktionen für andere JEE Server.

Die Veröffentlichung von ADF Essentials ist ein weiterer Beleg dafür, dass ADF Oracles strategische Entwicklungsplatform ist und bleibt.

Weitere Informationen, Downloads sowie Dokumentationen sind auf der entsprechenden OTN Seite zu finden.

<DM>

Written by fmtechteam

26/09/2012 at 11:14

Veröffentlicht in ADF, Detlef Müller, JDeveloper

Tagged with

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>

Written by fmtechteam

30/04/2012 at 11:42

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