Zusätzliches Web Service API im BI Publisher 10.1.3.4c
Im aktuellen Release 10.1.3.4 des Oracle BI Publisher gibt es mit dem Patchset c ein zweites Web Service API (siehe Web Services im BI Publisher 10.1.3.4).
Die WSDL der neuen Web Services lautet:
http://<host>:<port>/xmlpserver/services/PublicReportService_v11?wsdl
So enthält die Methode zum Aufruf von Berichten runReport() einen komplexen Datentyp dynamicDataSource, die eine JDBC Datasource oder eine File Data Source sein kann.
Damit lassen sich beim Berichtsaufruf eine gültige JDBC Datenquelle oder der Name einer XML-Datei übergeben.
<JM>
Windows im JDeveloper 11.1.1.x
Im Eifer der Arbeit kann es passieren, dass die gewohnte Ordnung der vielen Windows (Structure Pane, Log Window, Property Inspector, Component Palette etc.) im JDeveloper 11.1.1.x verlorengeht. Oft ist es dann sehr mühevoll oder fast unmöglich, das gewohnte Bild wiederherzustellen.
Die aktuelle Anordnung der Windows wird in der Datei <JDeveloper_Home>/system11.1.1.0.31.xx/o.ide/windowinglayout.xml gespeichert. Löscht man diese Datei vor dem Start des JDeveloper, wird das ursprüngliche Layout wie nach der Installation verwendet.
<JM>
Web Services im BI Publisher 10.1.3.4
Nachdem die neue Version des BI Publisher 10.1.3.4 verfügbar ist, wollte ich einen bestehenden Web Service-Aufruf aus einer Forms-Applikation testen. Der Aufruf konnte ohne Fehler ausgeführt werden, der erzeugte Report aber war leer.
Was war hier los?
Nähere Untersuchungen zeigten, dass der BI Publisher Server eine out-Datei mit den richtigen Ergebnissen erzeugt hatte, aber die PDF-Datei aus 0 Byte bestand.
Des Rätsels Lösung ist ein neuer Parameter SizeOfDataChunkDownload, der dem Request-Objekt mit setSizeOfDataChunkDownload() hinzugefügt werden muss. Der Parameter gibt an, in welchen Portionen die out-Datei in die PDF-Datei gestreamt wird. Fehlt der Parameter, wird die out-Datei nicht übertragen. Gibt man für den Parameter -1 an, wird die gesamte out-Datei in einem Stück übertragen.
Das aktualisierte Papier zum Aufruf von BI Publisher Web Services 10.1.3.4 aus Oracle Forms findet man hier.
Übrigens gibt es mit der Version 10.1.3.4 wieder eine zusammengefasste aktuelle Dokumentation der Web Services, die auch die neu hinzugekommenen Methodenaufrufe enthält.
<JM>
Persistente Referenzen in Forms erzeugen
Ein Kunde berichtete, dass er innerhalb eines Forms-Programmes ein neues Java-Objekt mit:
obj := myclass.new();
erzeugt habe.
Während der erste Aufruf einer Methode mit diesem Objekt noch funktionierte, bekam er beim zweiten Aufruf die Fehlermeldung “Unable to call out to Java, Invalid object type for argument 1”.
Bei näherer Betrachtung stellte sich schnell heraus, dass das Objekt offensichtlich nach dem ersten Aufruf nicht mehr existierte. In der Dokumentation heißt es dazu, dass die Lebensdauer des Objektes auf die Laufzeit der Programmeinhzeit bzw. des Triggers beschränkt ist.
Forms bietet hier die Möglichkeit, durch eine persistente Referenz das Objekt am Leben zu erhalten:
mypkg.instobj := ORA_JAVA.NEW_GLOBAL_REF(obj);
Jetzt kann das Objekt aus verschiedenen Programmeinheiten bzw. Triggern referenziert werden.
Zum Schluss sollte man nicht vergessen, diese Referenz wieder mit DELETE_GLOBAL_REF() zu entfernen.
<JM>
Manuelle Installation des Oracle BI Publisher auf WebLogic Server 10.3
Der folgende Artikel beschreibt schrittweise die manuelle Installation (Deployment) des Oracle BI Publisher 10.1.3.4 auf einem WebLogic Server 10.3. Die offizielle Beschreibung befindet sich im Installation Guide.
Voraussetzungen
- Installation der Software (WebLogic Server 10.3)
- Verzeichnis frei wählbar, z.B. C:\WLS103 - Anlegen einer Domain mittels des Configuration Managers
- Name frei wählbar, z.B. base_domain
- Verzeichnis frei wählbar, z.B. C:\WLS103\user_projects\domains\base_domain
- Angabe des Passworts für den Administrator
- Auswahl des JDK: Auswahl zwischen JRockit SDK und SUN SDK
Es sollte das SDK von SUN verwendet werden, siehe auch:
Note 578882.1 Error Installing BI Publisher In Web Logic 9.2
- Möglichkeit der Anpassung von Einstellungen im letzten Schritt (u.a. Port-Nummer) - Starten des Admin Servers
- Aufruf des Scripts startWebLogic.cmd bzw. startWebLogic.sh im Verzeichnis der Domain - Aufruf der Console mit http://<host>:<port>/console/
- beim ersten Aufruf wird die Console-Applikation deployed
- Anmeldung als Administrator mit dem gewählten Passwort
Schritte
- Aktuelle BI Publisher Software in einem temporären Verzeichnis entpacken
- für die manuelle Installation ist es unerheblich, für welches Betriebssystem die Software heruntergeladen wird
- für die manuelle Installation wird nur der Inhalt des Verzeichnisses ..\Oracle_Business_Intelligence_Publisher_Standalone\manual
benötigt - Auspacken des Archivs ..\manual\generic\xmlpserver.war in ein Verzeichnis xmlpserver.war
(z.B. C:\WLS1013\xmlpserver.war)
- Anlegen eines Verzeichnisses xmlpserver.war: mkdir xmlpserver.war
- Navigieren in das angelegte Verzeichnis: cd \xmlpserver.war
- Auspacken des Archivs: xmlpserver.war jar xvf \manual\generic\xmlpserver.war - Kopieren des BI Publisher-Repository aus dem Verzeichnis ..\manual\XMLP in ein Verzeichnis
(z.B. C:\XMLP1013) - Editieren der Datei ..\xmlpserver.war\WEB-INF\xmlp-server-config.xml
- FILE PATH anpassen, so dass er auf das im Schritt 3 angelegte Repository des BI Publisher zeigt
<?xml version=“1.0″ encoding=“UTF-8″?>
<xmlpConfig xmlns=“http://xmlns.oracle.com/oxp/xmlp“>
<resource>
<file path=“C:\XMLP1013\“/>
</resource>
</xmlpConfig> - Aufruf der Administration Console des WebLogic Servers
http://<host>:<port>/console/ - Deployment der Applikation xmlpserver aus dem angelegten Verzeichnis xmlpserver.war
- Auswahl von <domain_name>/Deployments im linken Menübaum der Console

- Klick auf Install Button im rechten Fenster
- Auswahl des Verzeichnisses ..\xmlpserver.war

- Option: Install this deployment as an application
- Option: Source Accessibilty – „I will make the deployment accessible from the following location“
- weitere Optionen: Defaults (u.a. Application Name – xmlpserver)
- Finish - Starten der Applikation
- Auswahl von <domain_name>/Deployments im linken Menübaum der Console
- Auswahl der Appliaktion xmlpserver im rechten Teil der Console
- Markieren der Applikation und Starten - Aufruf der Applikation mit http://<host>:<port>/xmlpserver/
- User: Administrator/Administrator - Kopieren der Fonts aus dem Verzeichnis ..\manual\fonts in das Verzeichnis ..\jdk\jre\lib\fonts
Hinweise
- Die Applikation xmlpserver lässt sich in der Version 10.1.3.4 nur erfolgreich installieren und starten, wenn
- die Datenbank-Connection für den Scheduler noch nicht konfiguriert ist (Neuinstallation) oder
- die Datenbank-Connection in der Datei ..\Admin\Scheduler\database-config.xml korrekt eingetragen ist und funktioniert (Upgrade).
Dies bedeutet, dass bei einem Upgrade des BI Publisher und beim Start des WebLogic Servers das DB-Schema des Schedulers erreichbar sein muss !
Evtl. ändert sich dies noch in einer künftigen Version. - Falls die Präferenz Automatically Acquire Lock and Activate Changes im WebLogic Server deaktiviert ist, muss vor den Konfigurationsänderungen im Change Center der Button Lock & Edit betätigt werden. Nach erfolgten Änderungen werden diese mit dem Button Release Configuration bestätigt.

<JM>
Wie für eine Forms-Applikation der Titel des Browser-Fensters bzw. -Tabs gesetzt werden kann
Wird eine Oracle Forms-Applikation im Web Browser ausgeführt, erscheint normalerweise „Oracle Application Server Forms Services“ als Titel im Browser-Fenster des Internet Explorer 6 oder als Titel des aktiven Tabs im Internet Explorer 7 oder Mozilla Firefox.
Der Titel kann in der Konfigurationsdatei formsweb.cfg geändert werden, er bleibt allerdings ein Stück statischer Text.
Was aber, wenn man als Titel aussagekräftigere Informationen wie z.B. den Modulnamen, den Namen des Benutzers oder Ähnliches anzeigen möchte ?
Hier die Schritte, um den Titel entsprechend anzupassen:
- Modifizieren des verwendeten Basis-Templates (zum Beispiel: basejini.html) durch Hinzufügen einer JavaScript-Funktion:
<script>
function change_pagetitle(title)
{
document.title=title;
}
</script> - In jedem Forms-Modul muss ein Trigger (PRE-FORM oder WHEN-NEW-FORM-INSTANCE) definiert werden, der nach dem Start der Form folgenden Programmcode ausführt:
web.show_document(‘javascript:change_pagetitle(‘||’“‘ || get_application_property(current_form_name) || ‘“‘||’) ‘ ,’_self’)
In diesem Beispiel wird der Name der laufenden Form als Titel angezeigt. Natürlich können auch beliebige andere Informationen in den Titel aufgenommen werden.
Mit der Version Oracle Forms 11g wird es eventuell eine noch elegantere Lösung für diese Anforderung geben, die das angekündigte JavaScript API verwendet. Lassen wir uns überraschen. <JM>
Manuelle Installation/Upgrade des Oracle BI Publisher
Gelegentlich kommt es unter meinen Kollegen zu einem Disput, welche Methode bei der Installation des Oracle BI Publisher zu bevorzugen sei:
- die automatische Installation mit Hilfe des Oracle Universal Installer
- die manuelle Installation.
Ich bevorzuge eindeutig den manuellen Prozess, da ich damit eine größere Kontrolle über die Installation habe und ein späteres Upgrade auf eine aktuelle Version einfach und schnell möglich ist.
Aus diesem Grund möchte ich an dieser Stelle die einzelnen Schritte der manuellen Installation erläutern. Ich habe diese Schritte bereits bei vielen Installationen und Updates ausgeführt und bin positiv überrascht, dass es niemals ein Problem mit inkompatiblen Berichten oder Templates während eines Upgrades gab.
Voraussetzungen
- Ein installierter J2EE Server OC4J (Oracle Containers for J2EE)
Weitere Informationen dazu finden sich unter http://www.oracle.com/technology/tech/java/oc4j/index.html - Die aktuelle Version der BI Publisher Software
Die Software kann von folgender Adresse heruntergeladen werden
http://www.oracle.com/technology/products/xml-publisher/index.html
Für die manuelle Installation/Upgrade ist die Auswahl des Betriebssystems beim Download unerheblich.
Schritte
-
Auspacken der heruntergeladenen Archiv-Datei in ein temporäres Verzeichnis. Aus der gesamten Struktur wird nur noch das Unterverzeichnis ../manual benötigt, dass alle notwendigen Dateien für die manuelle Installation enthält.
-
Kopieren der Fonts aus dem Verzeichnis ../manual/fonts in das Font-Verzeichnis der Java Runtime-Umgebung (<JAVA_HOME>/lib/fonts). Die Java Runtime-Umgebung wird durch die Einstellung JAVA_HOME des OC4J festgelegt. Bei einem Upgrade muss man lediglich überprüfen, ob mit der aktuellen Version des BI Publisher zusätzliche Fonts ausgeliefert wurden.
-
Der BI Publisher Enterprise Edition ist eine J2EE-Applikation mit einem zugehörigen Repository für die Berichte, Templates und Konfigurationseinstellungen. Deshalb muss in diesem Schritt die Datei ..manual/oc4j/xmlpserver.ear im OC4J deployed werden. Es gibt mehrere Vorgehensweisen, um eine Applikation im OC4J zu deployen bzw. zu redeployen:
- Manuelles Deployment/Redeployment mit Hilfe des Oracle Application Server Control (web interface)
- Auto-Deployment durch das Hinzufügen der folgenden Zeilen in der Datei OC4J_Home/j2ee/home/config/server.xml:
check-for-updates=“adminClientOnly“
application-auto-deploy-directory=“../applications_autodeploy“
deployment-directory=“../application-deployments“
connector-directory=“../connectors“Das Verzeichnis OC4J_Home/j2ee/home/applications_autodeploy muss angelegt werden. Der Name ist frei wählbar, muss aber mit der Eintragung in der Datei server.xml übereinstimmen. Jetzt kopiert man einfach die Datei xmlpserver.ear in das Verzeichnis und der OC4J erkennt die neue bzw. aktualisierte Applikation im laufenden Betrieb oder beim nächsten Start.
Bei einem Upgrade des BI Publisher werden die Vorteile der manuellen Installation klar erkennbar. Einfach die aktuelle Datei xmlpserver.ear in das Verzeichnis kopieren, den Rest erledigt der OC4J (bis auf eine kleine Ausnahme, siehe 4. Punkt).
-
Während des Deployment/Redeployment des BI Publisher wird die zentrale Konfigurations-Datei OC4J_Home/j2ee/home/applications_autodeploy/xmlpserver/xmlpserver/WEB-INF/xmlp-server-config.xml überschrieben.
Deshalb ist es notwendig, nach dem Deployment den OC4J zu stoppen und in dieser Datei die Referenz auf das Repository des BI Publisher zu editieren:
<resource>
<file path=“C:\XMLP“/>
</resource> -
Installiert man den BI Publisher zum erstenmal muss das komplette Repository mit den Beispiel-Berichten und Konfigurationsdateien aus dem Verzeichnis ../manual/XMLP in das angegeben Verzeichnis (im Beispiel: C:\XMLP) kopiert werden.
Bei einem Upgrade ziehe ich es vor, das im Verzeichnis ../manual/XMLP ausgelieferte Repository mit meinem existierenden Repository abzugleichen, indem ich neue Muster-Berichte hinzufüge und die Konfigurationsdateien auf relevante Änderungen überprüfe. -
Jetzt ist es Zeit, den OC4J erneut zu starten und im Login-Window zu überprüfen, dass die aktuelle Version der Applikation auch tatsächlich installiert wurde.
-
Wird auf dem Arbeitsplatz auch der BI Publisher Desktop (Word Plug-In) benutzt, darf man nicht vergessen, auch hier die aktuelle Version einzuspielen. Die Software ist im Verzeichnis ../manual/XMLP/Tools zu finden. Wurde der BI Publisher Desktop bereits einmal installiert, sollte vorab die alte Version über das MS Windows Control Panel deinstalliert werden.
Nach diesem Exkurs kann jeder selbst entscheiden, ob er den manuellen Weg oder den Oracle Universal Installer bei der Installation des BI Publisher bevorzugt. <JM>
Entfernen von Plug-Ins aus dem Oracle JDeveloper 10g
Der Oracle JDeveloper benutzt ein Plug-In API, um zusätzliche Funktionalität in die Entwicklungsumgebung (IDE) zu integrieren. Im JDeveloper 10.1.3 werden diese Erweiterungen (Extensions) im Verzeichnis <JDev_Home>/jdev/extensions gespeichert. In bestimmten Fällen kann es notwendig sein, Erweiterungen aus dem JDeveloper zu entfernen. Da es keine explizite Funktion zum Deinstallieren dieser Erweiterungen im JDeveloper gibt, sollte man die folgenden manuellen Schritte kennen:
- Zunächst sollte man sich einen Überblick verschaffen, welche Erweiterungen (Extensions) im JDeveloper genutzt werden. Dies findet man heraus:
- durch den Aufruf der Menü-Option: Help => About (tab Extensions)
- durch den Aufruf der Menü-Option Tools => Preferences => Extensions
Das Deaktivieren einer Erweiterung bewirkt hier aber nur, dass diese beim Start des JDeveloper nicht geladen wird.
- Unerwünschte Erweiterungen werden entfernt, indem die zugehörige jar-Datei und in manchen Fällen ein zugehöriges Unterverzeichnis unter <JDev_Home>/jdev/extensions gelöscht werden. Die Dateien und das Unterverzeichnis sind meistens durch den Namen der Erweiterung zu erkennen.
Das aber reicht noch nicht aus! Bei jedem Start des JDeveloper werden alle Erweiterungen aus dem Verzeichnis <JDev_Home>/jdev/tmp/update erneut installiert. Deshalb müssen die unerwünschten Erweiterungen (normalerweise eine zip-Datei) auch aus diesem Verzeichnis gelöscht werden. <JM>
Eine kurze Historie der Web Services des BI Publisher
Der Oracle BI Publisher ist eine sehr leistungsfähige und schlanke Lösung, um Berichte und Dokumente mit hohen Anforderungen an das Layout zu erzeugen.
Bis zur Version 10.1.3.3.0 gab es ein nicht veröffentlichtes Web Service API, das beispielsweise zur Ausführung eines Berichtes durch den Aufruf der Methode getReportData() genutzt werden konnte. Das Product Management von Oracle hatte jedoch darauf hingewiesen, dass dieses API nicht öffentlich sei und damit Veränderungen unterworfen sein könnte.
Mit der Version 10.1.3.3.1 des Oracle BI Publisher wurde das Web Service API erstmals publiziert. Eine der sichtbaren Veränderungen gegenüber der Vorgängerversion ist beispielsweise der Aufruf eines Berichtes durch die Methode
runReport().
Die Web Services des BI Publisher wurden auf Basis von Apache Axis implementiert.
Die WSDL lautet:
http://<machine>:<port>/<your_appname>/services/PublicReportService?wsdl
(Der Standardwert für <your_appname> ist xmlpserver)
Eine komplette Beschreibung der WSDL ist im New Features Guide der Dokumentation enthalten:
http://download.oracle.com/docs/cd/E12844_01/doc/bip.1013/e10416/bip_webservice_101331.htm#BABHEHEJ.
Eine Beschreibung des veröffentlichten Web Service API kann ebenfalls in der Dokumentation nachgelesen werden:
http://download.oracle.com/docs/cd/E12844_01/doc/bip.1013/e10416/bip_webservice_101331.htm
Eine Übersicht der Erweiterungen des API in der aktuellen Version 10.1.3.4 findet man in Tim Dexter’s Blog.
Wer sich dafür interessiert, wie Web Service des BI Publisher aus Oracle Forms aufgerufen werden können, findet eine Beschreibung hier. <JM>
Aufruf eines Web Service aus einer Forms-Anwendung
OK, für einen OO-erfahrenen Entwickler scheint dies eine klare Sache zu sein. Aber manchmal trägt es zum Verständnis bei, die Dinge etwas zu sortieren.
Soll ein Web Service aus einer Oracle Forms-Anwendung aufgerufen werden, sind ein oder mehrere Java-Klassen des Web Service-Client in das Forms-Modul zu importieren.
Dabei können verschiedene Fälle auftreten:
- Wenn die Klasse static ist, enthält die Signatur der importierten Methoden in den meisten Fällen nur einfache Datentypen wie in diesem Beispiel:
FUNCTION <method>(
a0 VARCHAR2,
a1 VARCHAR2,
a2 VARCHAR2) RETURN BOOLEAN;
Diese Methode kann auf einfache Weise innerhalb der Forms-Applikation aufgerufen werden, indem die entsprechenden Werte übergeben werden. - Wenn die Klasse nicht vom Typ static ist, d.h. es werden Instanzen dieser Klasse zur Laufzeit erzeugt, findet man in der Signatur der generierten PL/SQL-Methode ein Objekt:
FUNCTION <method>(
obj ORA_JAVA.JOBJECT,
a0 VARCHAR2,
a1 VARCHAR2) RETURN ORA_JAVA.JOBJECT;
In diesem Fall muss beim Aufruf ein initialisiertes Objekt dieser Klasse übergeben werden. Dieses Objekt kann durch die Methode new() innerhalb des PL/SQL-Codes erzeugt werden:
obj := <class>.new(); - Wenn die Klasse nicht vom Typ static ist und ein zusätzliches Objekt als Parameter benötigt, sieht die Signatur der PL/SQL-Methode folgendermaßen aus:
FUNCTION <method>(
obj ORA_JAVA.JOBJECT,
a0 ORA_JAVA.JOBJECT,
a1 VARCHAR2,
a2 VARCHAR2) RETURN ORA_JAVA.JOBJECT;
In diesem Fall muss wie im zweiten Fall ein initialisiertes Objekt für diese Klasse mittels der Methode new() im PL/SQL-Code erzeugt werden:
obj := <class>.new();
Zusätzlich muss ein Objekt für den Parameter übergeben werden, indem die entsprechende Klasse (des Parameter-Objektes) in das Forms-Modul importiert und eine neue Instanz dieser Klasse erzeugt wird:
a0: = <additional_class>.new();
<JM>