27 October 2011

ADF hilft Fusion Bottle & Co Getränkemärkte gegen Freibier

Mein Vortrag von der DOAG Konferenz 2011:

Karten in Java Anwendungen einbinden -  ADF und Oracle Maps

Herausforderung:
"Fusion Bottle & Co" will expandieren... wo sollen die nächsten Getränkemärkte gebaut werden?
Wir wollen das Management der Firma bei der Entscheidung durch aussagekräftiges Kartenmaterial und Marktdaten unterstützen.

Umsetzung:
Ziel soll es sein, mittels JDeveloper und ADF eine Karte in die Anwendung zu zaubern, die auf Oracle Spatial bzw. Oracle Mapviewer/Oracle Maps basiert. Ich werde Marktdaten der GfK Marketing zu Hilfe nehmen. Wir wollen die Bier-/ Wein-Konsumdaten bzw. die dahinter steckende Kaufkraft in Deutschland im Verhältnis zur Bevölkerung bzw. Bevölkerungsdichte anschauen können..., um zu entscheiden, wo wir für Fusion Bottle & Co noch einen Getränkemarkt hinbauen sollten - und endlich unser Freibier bekommen...(;-).

So wird das Ergebnis aussehen:
















1. Welche Komponenten brauchen wir?
- Oracle Datenbank (10g, 11g)
- Oracle Mapviewer, Mapbuilder (optional)
- Oracle Weblogic Server oder Oracle AS (OC4J) mit Quickstart Kit
- Kartendaten bzw. demografische Daten (hier: von GFK Marketing)
- JDeveloper 11g

2. Vorgehensweise

Step 1: Zunächst installiere ich eine Oracle Datenbank 11g - Editon egal, XE tut es auch.

Step 2: Danach besorge ich mir Karten und Marktforschungsdaten von GfK Marketing.

Step 3:
Danach importiere ich die GFK Marketing Demodaten mittels "Load_DE_2010.sql" und gemäß des ReadME.txt

Step 4: Mapviewer - ich download
e den aktuellen Mapviewer, Mapbuilder und das Mapviewer Quickstart Kit (OC4J inkl. Mapviewer installiert) - benötigt wird noch ein aktuelles JDK - recommended JDK 6.

Step 5: Mapviewer Quickstart-Kit
unzippen und mittels start.bat oder start.sh starten, nachdem die Verzeichnisstruktur im start-Batchfile angepasst wurde.
Während des Startvorgangs werden wir aufgefordert, für den Standart-Administrator "OC4JAdmin" ein Passwort zu vergeben.(z.B. Oracle 123).., welches wir uns bitte merken (aufschreiben!!!(;-)

Step 6: Mapviewer konfigurieren
- um das in der Datenbank liegende Kartenmaterial nutzen zu können, muss die Datenbank Connection angepasst werden.
Dazu rufen wir den Mapviewer im Browser auf:
http://localhost:8888/mapviewer (wir werden weitergeleitet zur Startseite).
Auf der Mapviewer Startseite klicken wir oben rechts den Link "ADMIN" und gelangen auf die Login-Seite: User: OC4JAdmin, Passwort: Oracle 123
Linker Hand im Menue: Manage Mapviewer klicken wir auf "Configuration".
Hier erscheint ein Editor für die "mapViewerConfig.xml" - wir scrollen bis zum Ende nach unten...
Dort finden sich die permanenten Einträge für die DB connections:
(möglicherweise auskommentiert - als bitte "scharf schalten" und <--- bzw. --> rausnehmen.

<map_data_source name="MVDEMO"
jdbc_host="localhost"
jdbc_sid="xe"
jdbc_port="1521"
jdbc_user="mvdemo"
jdbc_password="BBZwqpVvIIOAUp6UlVxgBQdri7Z6VvtW"
jdbc_mode="thin"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
/>
Wir kopieren uns am Besten diesen Block und passen ihn an wie folgt:

<map_data_source name="GFK-Daten"
jdbc_host="localhost"
jdbc_sid="xe"
jdbc_port="1521"
jdbc_user="GFK"
jdbc_password="!gfk"
jdbc_mode="thin"
number_of_mappers="3"
allow_jdbc_theme_based_foi="true"
/>

Dann unten: Save & Restart klicken - eine positive Bestätigung sollte oben auf der Seite erscheinen.

Tipp zum Quickstart-Kit: Sollte im nächsten Schritt keine Verbindung zur DB angezeigt werden, bitte Passwort überprüfen/anpassen. Es sind nur "kleingeschriebene" Passwörter zulässig im Quickstart-Kit 10g. - oder Treiber aktualisieren - aber Passwort anpassen auf SQL Ebene geht schneller (SQL-Plus: connect as SYS as SYSDBA, dann
SQL-plus>alter user gfk identified by gfk; ) - bei mir war der GFK Account (=Schema) "gelockt"... dann:
SQL-plus>alter user gfk identified by gfk account unlock;

Wenn wir dann auf "Datasources" klicken erscheinen die Datasources und "GFK-Daten" sollte dabeisein:


Step 7: GFK-Germany Basemap erzeugen
Wir gehen im Mapviewer Admin Menue zu: Manage Map Tile Layers und klicken links Create --> Internal (eine interne, auf unserem Server liegende Karte ; external wäre: WebMapService) --> Continue -->
Name: GfK-Germany
Datasource: GFK
Base-Map: Germany
- alle anderen default Werte können wir so übernehmen; fertig ist die Karte im Mapviewer.
Zum Überprüfen: Wiede im Menue: Manager Map Tile Layer links Manage anklicken.
In der Übersicht erscheint unsere GfK-Germany Karte
--> Checkbox selektieren --> View Map - manage Tiles anklicken.

Es erscheint das Karten Test UI - die Karte erscheint, nachdem wir den Button Show Map anklicken und 2x Doppelklick auf die Karten (zum Vergrössern):


Die Basemap zur Nutzung in ADF/JDeveloper ist fertig.

Step 8 - Anwendung erstellen:


Nach dem JDeveloper Download starten wir den JDeveloper 11g (11.1...)


1. Application anlegen vom Typ: Fusion Web App - Name: FusionMapApp --> alles default --> Finish



Entity Objekte erstellen (Verbindung zu Tabellen/DB):



2. --> "model" --> New --> "Business Tier" --> "ADf Bus. Components" --> "Business Components from Tables"



3. Connection zu DB (XE) User/Passwort gfk/gfk



4. DE_COUNTIES2010 als Tabelle für "Entity Object" und "View Objekt" nutzen



Seite erstellen:



5. --> Viewcontroller --> New --> Webtier --> JSF/Facelets --> Page --> Name anpassen --> Quickstart Layout --> Browse

--> Two Columns --> Layout mit 2 übereinanderliegenden Regionen auswählen.



Karte einbinden:



6. Karte auf "First" (obere Region) ziehen: --> Component Palette --> "ADF Data Visualizations" auswählen --> Map

--> "Geographic Map" auf "first"(obere)-Region ziehen.



7. Karten-Wizard: Name eingeben: "Mapviewer" - url für Mapviewer eingeben (standard: http://localhost:8888/mapviewer)

7a. Mapviewer starten

7b. Authentication: "Basic" auswählen - user: gfk - pwasswort: gfk (muss natürlich mit dem Schema korrespondieren)

7c. Connection Testen : Success! --> OK

7d. "BaseMap" auswählen und durch Doppelklick positionieren bzw. Zoom Level (Schieberegler) einstellen --> OK



8. Layer auf der Karte einbinden: --> "DataControls" (refresh!) --> DECOUNTIES2010View1 auswählen und auf Karte ziehen.

8a. Start "Layer Wizard" --> Layer/Theme Typ "Color Theme" auswählen

8b. ThemeID: (sieht der User!) Name: "Kaufkraft Bier in Euro p/Person" 
--> Map Theme --> Name: DECounties2010 auswählen

--> Location Column: Name Ascii

--> Appearance/Buckets: Werte übernehmen

--> Data: Location "Name Ascii"

---------> Location Label: "Name Ascii"

---------> Location Value: "Nr0121e"

---------> Location Data Label: "Kaufkraft Bier"

Wichtig! --> (x) "Enable Row Selection" anklicken !

--> OK - Layer fertig (sieht man auf Karte nicht - nur im Structure Pane unter "map" (links unten)



9. Details synchron zum Layer in unterer Region anzeigen:

--> DataControls --> DECOUNTIES2010View1 auf die untere (second facelet) ziehen

aus dem Kontext Menü "Create" auswählen: "Form" --> dann: "ADF Read-Only Form"

Der Form Layout Wizard startet --> nur 2 Spalten des Entity Objekts auswählen: "NameAscii" und "Nr.0122e" -

die anderen Spalten löschen --> OK

9a. (optional) Label "Nr.0121e" anklicken und im Property Inspector (rechts unten)

bei "Common" --> Label: umbenennen in: "Kaufkraft für Bier pro Person in Euro:"


Ergebnis im JDeveloper 11g:




















10. Anwendung testen: mit rechte Maustaste auf die Seite klicken --> Kontextmenü --> Run (grüner Pfeil)

Falls der Weblogic Server noch nicht gestartet wurde, startet er jetzt und "deployed" die Anwendung

optional: unten Tab "Deployment" anklicken und Fortschritt beobachten.

wenn Anwendung fertig deployed, öffnet der Default Browser mit der Anwendung - oder man klickt auf den angebotenen Link.



11. Beim Klicken auf die Regionen in der Karte, sollten "Name" und "Nr121e" (Kaufkraft Bier) synchron angezeigt werden.

Edit 28.11.2011:
Ich habe ein kommentiertes Viewlet erstellt zur besseren Illustration und Erklärung der Architektur. 

 




1 comment:

udhaya kumar said...

I got a job by saying this answer in my last interview. thanks for awesome help.
I got more idea about Oracle from Besant Technologies. If anyone wants to get Oracle Training in Chennai visit Besant Technologies.

http://www.oracletraininginchennai.in