Monday, July 8, 2019

The change of Static File support in APEX

Over the years the static file handling has been greatly enhanced. Using APEX old APEX versions before 5 you had to handle static files outside of APEX. Many projects handled their static application files together with the APEX internal files in the "i" folder. It was the easiest way because APEX had no integrated file support for custom JavaScript, CSS or Image files. Another problem was the caching and compression. In earlier days the database and the OHS (Oracle HTTP Server) where used together with mod_cache and mod_deflate to support caching and compression.

Since APEX 5 and the introduction into the APEX Listener this technique changed. The APEX Listener which is now called ORDS (Oracle REST Data Service) has now the possibility to handle the static files inside the APEX Workspace or APEX Application in an easy way.
But everyone remembers the first installations of APEX 5 and the APEX Listener. Many times we got problems regarding misconfigurations of the file support and not everyone got the point why we had to configure RESTful Services for an APEX environment for file support.

APEX 5.0: There are issues with the configuration of the Static Files in your environment

Going further to the current version of APEX 19.1 and ORDS 19.1 we now have full support of caching (and cache invalidation) and easy handling of static files inside your Application. If you are still using APEX with static files on the file system here are some disadvantages compared to the files uploaded inside APEX.

  • files on the file system have to be deployed on a seperate way
    • files cannot be deployed without authorization on the file system
    • files can be deployed in the wrong folder
    • files can be deleted or forgotten when moving to a new APEX version
    • files have even to be deployed during development on the server
  • files are cached on client-side, even when they are changed on the server
  • files which are used or even not used are not so easy to identify
  • files are not installed by default when installing a new version of your APEX application
  • files are not exported and saved with your application
Of course some of these problems had been solved during the last years, but overall the best way to handle static files is, by using the integrated support in APEX.

In the next blog posts i will go deeper into that topic and explain how to configure the file settings and how to maintain these files with your favorite editor and APEX nitro.

Tuesday, December 20, 2016

ITTage 2016 - Tag 2 - 14.12.2016

Der zweite Tag startete um 9Uhr mit einer Keynote über Security in Verbindung mit der Cloud. Ein großer Teil des Vortrags bestand darin, klar zu machen, dass Sicherheitsprobleme beim Anschluss an die Cloud nicht unbedingt nur in der Gefahr, dass die Daten in der Cloud geklaut werden, sondern auch dass Angreifer aus der Cloud ins Firmennetz kommen können. Später wurden auch noch Optimierungen im Netzwerk angesprochen, aber insgesamt wirkte der Vortrag inhaltich wie etwas von allem.

Von 10-12 hatte ich dann meine beiden Vorträge. Im ersten Vortrag habe ich vorgestellt wie man dynamisch in größeren Datenmodellen effektiv und zur Laufzeit mittels Metadaten Daten in der Datenbank vergleichen kann. Die Daten werden dabei nicht einfach in einem Report dargestellt, sondern mit Kontextinformationen angereichert, so dass ein Endbenutzer in seiner Anwendung sehen kann wo Daten verändert wurden.
Im zweiten Vortrag gings dann um CI/CD mit Oracle Datenbanken. Mir war von anfang an klar, dass ein 45Minuten Slot kaum dafür ausreichen kann, da ich Schulungen zu dem Thema bei mehreren Firmen gegeben habe, wo man mindestens einen ganzen Workshoptag dafür braucht. Nichtsdestotrotz habe ich die Themen Skripting, Infrastruktur, Versionierung, Abhängigkeitsbehandlung, Prozesse & Jenkins einmal in kürze vorgestellt. Auch wenn hier und da ein paar Details nicht behandelt wurden, so konnten die Teilnehmer sich ein Bild davon machen, was man alles für eine Automatisierungsunterstützung in der Datenbankentwicklung machen kann.

Um 12Uhr gings dann mit dem Thema "Vom Monolithen zu Microservices" weiter. Eingestiegen ist der Vortrag mit einer Analyse eines vorhandenem Monolithen. Interessant war dabei ein Tools namens Structure101 mit dem man eine vorhandene Software analysieren kann und ermitteln, welche Klassen/Objekte vorhanden sind, wie diese verknüpft sind und ob es Code gibt der nicht benötigt wird. So wie es aussieht kann die Software aber nur C/C++ analysieren. Weiter wurde dann ein Framework namens Hysterix vorgestellt, welches zum Testen der Fehlertoleranz eingesetzt werden kann. Das Tool wurde von den Netflix Machern erstellt und ist auf GitHub verfügbar. Der Ansatz ist, dass man eine Anwendung aus Microservices testet und guckt wie diese mit dem Ausfall von Komponenten und Verzögerung bzw. Fehlinformationen umgehen kann. In einer Anwendung bestehend aus Microservices wird versucht so gut wie alles was sich trennen lässt als eigene Dienste laufen zu lassen, selbst die Oberfläche ist entkoppelt vom Rest. So lassen sich die einzelnen Komponenten getrennt mit mehreren Teams entwickeln, aber es kommt zwangsläufig zu Coderedundanzen. Beim "zerschneiden" eines vorhandenen Monolithen ist es dabei sehr schwierig direkt beim ersten Mal die richtigen Schnitte zu machen und so kann eine Umstellung auch schon mal länger dauern bzw. mehreren Anläufe benötigen. Zuletzt wurde noch die "Simian Army" vorgestellt, die eine gesamte Anwendung mit beliebigen Eingaben testet und einzelne Services lahmlegt. Im Prinzip wird so ein Stresstest gegen das Hysterix Framework durchgeführt und man guckt sich in den Logs und an der Anwendung an wie Robust diese läuft.

Nach ein paar Gesprächen zur Mittagspause gings um 14Uhr weiter mit dem Thema Microservices. Diesmal zum Thema Deployment von Microservices. Am Beispiel vom Otto Webshop wurde von Guido Steinacker vorgestellt wie dort die Micrsoservices geschnitten und erstellt wurden. Direkt beim Einstieg wurde unterstrichen, dass pro Tag bis zu 100 Deployments auf der Produktion stattfinden und dies ohne zu lasten der Qualität zu gehen. Interessant dabei ist, dass Anpassungen die so in großer Zahl an einem Tag eingeführt werden mittels "feature Toggle" nur für einen Teil der Endbenutzer aktiviert wurden. So kann man ein Feature einbauen und nur bei 1% der Benutzer die Auswirkung beachten. Ähnlich wie Netflix hat auch Otto eine Menge von Tools geschaffen die auf GitHub zur Verfügung stehen. JLineUp, JSMine, Gatekeeper und JezHumble sind nur ein paar Tools die teils selber entwickelt wurden oder in der Microservice Entwicklung eingesetzt werden.

Nachdem das Hysterix Framework sich interessant anhörte habe ich um 15Uhr dann die Vortrag "Resilience mit Hysterix" angehört. Leider stellte sich schnell heraus, dass das Framework in Java geschrieben ist und nur in Java einsetzbar ist.

Um 16 Uhr hab ich dann zusammen mit Dietmar ein wenig über PL/SQL Installationsskripte und Optimierungen in diesem Bereich geredet bevor es dann wieder weiter ging.

Um 17Uhr gabs dann die zweiten Vortrag von Guido Steinacker zu Microservices. Dabei wurde vor allem genauer beleuchtet wie eine Oberfläche wie der Otto Webshop auch aus einzelnen Microservices erstellt wird. Aus meiner Sicht wirkt es schon etwas verstörrend wie man jede Komponente wie Navigation, Suche, Empfehlungen, Artikeldetails alles in einzelnen Teams entwickeln lässt und trotzdem eine stimmige Gesamtanwendung erhält. Ein guter Ansatz bei einer solch "verteilten" UI war auf jeden Fall wie AJAX einzusetzen um eben Inhalte die getrennt sind auch effektiv nachzuladen. Innerhalb von Otto wird auf Pair Programming gesetzt, was sich aus meiner Sicht gut anhört, aber natürlich die doppelten Ressourcen bindet.

 Im 18Uhr Slot habe ich dann noch ein paar Unterhaltungen geführt  und dann um 19Uhr als abschließenden Vortrag mich Elchen und Elefanten gewidmet. Hier gabs zum Glück auch schon ein Bier zum Vortrag, den nach 10Stunden war man doch schon etwas "durch" im Kopf. Der letzte Vortrag behandelte dabei die Problematik, wie man innerhalb von Firmen mit Problemen umgehen kann die von anderen Personen ausgehen, welche meist 1-2 Gehaltsklassen über einem sind. Hier wurden eine Menge Beispiele geliefert, wie ein solches Problem aussehen kann, und was es für Verluste mit sich bringt, wenn man solche Probleme nicht löst. Der Vortrag war dabei zwar gut vorgetragen, aber brachte nicht so wirklich Lösungen mit sich.

Danach konnte man sich mit Bier und Fingerfood in kleiner Runde gemütlich unterhalten und müde ins Bett fallen.

Thursday, December 15, 2016

ITTage 2016 - Tag 1 - 13.12.2016

Der erste Tag starte bei mir mit InMemory Technologien bei Oracle Datenbanken von Ulrike Schwinn. Hier gings vor allem darum verschiedene Techniken vorzustellen die es nicht nur seit der neuesten Version 12c gibt. Anfangen sollte man immer auf dem Hostsystem bzw. der virtuellen Umgebung und sich ein Bild davon machen wie viel Ram und Plattenplatz die Maschine hat und wie viel bisher für die Umgebung vorgesehen ist. Weiter wurden dann Themen wie AWR Reports, Statspack und der Memory Advisor erwähnt. Auch Parameter wie SGA_TARGET und DB_CACHE_SIZE_MIN sollten geprüft werden damit auch hier keine Engpässe in der DB entstehen. Um einen Überblick zu bekommen wie es mit dem Cache und konkreten Objekten aussieht bietet sich die View v$BH an. Anschließend gings dann noch um das Thema Caching, in wie weit Tabellen im Cache oder per IO nachgeladen werden (SMALL_TABLE_THRESHHOLD) oder das man im Ausführungsplan sehen kann wo der result_cache greift.
Auch wenn ein großer Teil der Themen bekannt ist war es eine gute Übersicht und ein super Einstieg.

Wie von anderen Konferenzen bekannt gibt‘s auch auf der ITTage Konferenz Keynotes und die erste war von einem der MariaDB Gründer Kaj Arnö. Auch wenn man als Oracle Spezialist wohl kein MariaDB einsetzt, war es doch interessant zu wissen wie MariaDB so entstanden ist. Als Abspaltung von MySQL und vom Namen der Tochter „Maria“ des anderen Gründers weiß man nun woher die Datenbank kommt. Richtig interessant ist natürlich, wie schnell sich MariaDB im Vergleich zu MySQL weiterentwickelt hat und wie verbreitet die Datenbank auch in den ganzen Linuxdistributionen ist. Bisher war auch ein Wechsel zwischen MariaDB und MySQL recht schnell möglich, aber ab der kommenden Version geht Oracle mit MySQL explizit von MariaDB weg. Auch bekommt MariaDB in Zukunft mit der BSL eine interessante Lizenzstruktur, welche im Prinzip nur bei sehr großen Umgebungen oder Kunden mit sehr großem Umsatz als Lizenzkosten zum Tragen kommt.

Im nächsten Vortrag gings dann um das Thema Multi Cloud Sourcing. Dies war dein leider ein Herrstellervortrag, der im Gegensatz zu den meisten anderen Vorträgen eher eine Pleite war. Klar ist ein Ansatz eines lokalen Cloudanbieters, der die Daten in Deutschland vorhält und gute Schnittstellen zu den großen Cloudanbietern vorhält auch gut, aber es war dann doch zu sehr eine Werbeveranstaltung.

Im nächsten Slot hab ich dann mal nen Open Source im Industrie 4.0 Bereich besucht der von Heinz Wilming gehalten wurde. Im Gegensatz zu vielen Individuallösungen mit einem möglichst geringen Set an unterschiedlichen Tools, wurde hier ein genau umgekehrter Ansatz vorgestellt. Es wurden recht viele verschiedene Technologien gewählt, welche auch für die Industrie zertifiziert sind, zusätzlich wurde eine „Mica Box“ (sowas wie ein Industrie Rasperry Pie) eingesetzt um eine Flotte von Fahrzeugen zu managen. Ich persönlich kann mir sowas eher nicht vorstellen mit den ganzen Schnittstellen und verschiedenen Tools, aber durch die Standards und ohne Individualentwicklung scheint es dennoch möglich zu sein, sowas im großen Stil zu nutzen.

Nach den doch teils weit von Oracle entfernten Technologien gings dann in einen Multitenant Vortrag von Johannes Ahrends. Hier gab’s dann ein paar interessante Punkte die eine PDB nicht nur als getrennte Datenbanken ansehen lässt sondern noch aufzeigt wie abhängig diese von der einen Instanz sind. So ist in 12.1 kein Flashback nur in einer PDB möglich und man sollte nicht vergessen, dass das ganze Thema auch Lizenzkosten extra kostet und die PDB’s einzeln gepatched werden müssen. Aber in 12.2 ist es zumindest möglich PDB’s mit verschiedenen Charsets in einer CDB laufen zu lassen, wobei man natürlich beachten muss, dass die CDB als AL32UTF8 läuft und die PDB’s mit anderem Charset vorher in einer anderen DB erstellt werden müssen.

Das nächste Thema wurde von Christian Grave vorgestellt und es war „Lizenzverhandlung“. Im ersten Moment hatte ich noch vor dem trockenen Thema zurückgeschreckt, aber von einer Person außerhalb von Oracle selber wollte ichs dann doch mal hören. Der Vortrag war dann doch eine positive Überraschung da die Folien nicht als dröge Textpräsentation aufgemacht war, sondern als nette Geschichte und auf einem echten Fallbeispiel basierte. Interessant wie man mit Verhandlungsgeschick auch eine Lizenzierung auf VMWare hinbekommen kann, ohne jeden Kern zu bezahlen oder was man beachten sollte wenn man externe Hoster einsetzt und diese auf einem die Infrastruktur so ändern, dass die Lizenz überhaupt nicht dazu passt. Zuletzt noch die Einbindung des Oracle Advisory Service als kostenlose Qualitätsüberprüfung zu nutzen hörte sich echt gut an.

Weiter gings mit Randolf Geist und dem Cost Based Optimizer. Auch wenn ich das Gefühl hatte einen Teil des Vortrags schon zu kennen gabs auch hier ein paar interessante Punkte. Wer zum Beispiel den Optimizer komplett alleine arbeiten lässt und einige Caching Mechaniken in seinen Querries nutzt, sollte beachten, dass diese jede Operation so rechnet, als würde sie wirklich ausgeführt werden und eben nicht gecached wird. Auch wenn es mit 12c einige neue coole Features gegeben hat waren doch in 12.1 eine Menge von Features aktiviert, die mit 12.2 wohl wieder per default deaktiviert sind, weil nicht alle so vorteilhaft sind.

Im nächsten Vortrag gings dann zwar um SQL aber nicht nur um Oracle. Markus Winand als Person hinter „use-the-index-luke“ und „modern SQL“ stellte die verschiedenen SQL standards vor und stellte gleich am anfang den Vergleich von WIN 3.1 und SQL92 dar mit der Frage warum manche Abfragen erstellen die aus den 90er stammenJ. Insgesamt bekam man einen guten Überblick welche SQL Server, welche Standards benutzen und dass man mit Oracle ganz gut fährt. Aber auch wenn ich den großteil kannte, war es gut zu wissen, welche SQL Standards genau hinter welchen Features stecken und dass die OFFSET Funktion in SQL eher nicht so clever ist.


Beim letzten Vortrag von Urs Enzler über agile Strukturen gabs dann nochmal nicht Oracle Kost. Aber ein paar interessante Punkte, sind durchaus von agilen Projekten auch in APEX/Oracle gut zu nutzen. Vor allem das Probleme oft von nicht funktionalen Fragen wesentlich mehr getrieben werden als von funktionalen. Sprich die Anwendung muss an sich performant laufen und die Anzahl User müssen gut mit der Anwendung arbeiten können, bevor man klärt was die Anwendung selber machen soll.

Thursday, October 27, 2016

Vorträge des NRW Meetup vom 25.10.2016

Hier die Unterlagen des Meetups von Dienstag, dem 25.10.2016 bei Opitz in Essen
Das nächste Meetup wird im nächsten Jahr stattfinden. Genauere Infos zu den Terminen werden hier im Blog zu lesen sein.

Tuesday, October 18, 2016

Inhalt des nächsten APEX Meetup in NRW am 25.10.2016

Am Dienstag den 25. Oktober findet das nächste APEX Meetup in NRW statt. Zwei der fünf deutschen Redner tragen Vorträge der kommenden Konferenz vor:
  • Eine Sticky Note zu ORDS, Oracle APEX und Weblogic 12c (Vortrag) - Holger Lehmann (XINGTwitter)
  • Ganzheitlicher Ansatz zur Versionierung von APEX-Projekten (Vortrag) - Jan Winkels
  • Migrationserfahrungen zum Universal Theme (Vortrag) - Oliver Lemm (TwitterXING)
Die Treffen sind wie immer kostenfrei, es wird um Anmeldung gebeten (Link).

Datum & Uhrzeit:
Di, 25.10.2016, 17-20Uhr
Ort:
Opitz Consulting, Standort Essen, Lazarettstraße 15, 45127 Essen
Anmeldung:
Ansprechpartner:
Oliver Lemm (TwitterXINGMeetupXING-Gruppe)

Monday, June 6, 2016

Deutsches KScope16 Preview Meetup

Morgen am 7. Juni findet das deutsche Vorab Meetup zur KScope16 statt. Zwei der fünf deutschen Redner tragen Vorträge der kommenden Konferenz vor:
  • Affordable Workflow Options for Your APEX App (Vortrag) - Niels de Bruijn (XINGTwitter)
  • User friendly data diff with APEX (Vortrag) - Oliver Lemm (TwitterXING)
Die Treffen sind wie immer kostenfrei, es wird um Anmeldung gebeten (Link).

Datum & Uhrzeit:
Di, 07.06.2015, 17-20Uhr
Ort:
Oracle, Hamborner Str. 51, 40472 Düsseldorf
Anmeldung:
Ansprechpartner:
Oliver Lemm (TwitterXINGMeetup, XING-Gruppe)

Friday, February 19, 2016

Vorträge des NRW Meetups vom 16.02.2016

Hier die Folien des letzten NRW Meetups vom 16.02.2016
Danke an die Vortragenden.
Das nächste Treffen findet am 07.06.2016 bei Oracle Düsseldorf statt.Wer einen Vortrag halten will oder an einem Thema interessiert ist kann mich gerne kontaktieren.