Posts Tagged 11g

“#PL/SQL: Therefore, whoever binds forever: automate your tests” – I’m a speaker at #DOAG2017


Today my presentation is confirmed: “Therefore, whoever binds forever: automate your tests”. Maybe the German pun will be the better understood: “PL/SQL: Drum test-automatisiere, wer sich sich ewig bindet!”

I will speak over my experiences with following

  • several PL/SQL testing tools like at least
  • I will give you a demo of this tools and compare their capabilities for
    • architecture
    • branching
    • continuous integration
    • code coverage

If you speak german and you are interested in some of this, you should come and attend DOAG 20157.

, , , , , , , , , , , , , , ,

Leave a comment

Virtual Development Server: Provide Docker images in docker registry for Oracle XE Database and others

For later creation of containers as needed in the deployment process we have first to build docker images whenever we do not find suitable one in docker hub.

For most of my development I need a oracle database. On the internet you can find a lot of Dockerfile’s for this, but no ready image. This is because for running a database you have to accept a license and this happens when you download the installation software. For private testing this license often is free.

The basic cycle for all of this images is the same on my side:

  1. Find a Docker image
  2. If not found download required Software and build a Docker image
  3. Build the Docker image
  4. Push the images to private docker registry or the public registry DockerHub

Fortunately Oracle provides recently on GitHub a lot of working Dockerfile’s for building different product images. The creator Gerald Venzl desribes in this blog how to create an Oracle EE image.

Following you find an example for building Oracle XE Image.

First you have to clone the git repository to a directory of you choice, I choose C:\shared\scmlocal\docker-images.
Put the downloaded installation source in the subdirectory C:\shared\scmlocal\docker-images\OracleDatabase\dockerfiles\ as described in GitHub.
Next we have to map this directory to our virtualbox via following vagrant instructions. Additional we prepare port forwarding for accessing later the database from our host system.

  # Port Forwardings for:
  # - Oracle database port "forwarded_port", guest: 1521, host: 1521
  # Oracle Application Express (APEX) "forwarded_port", guest: 8080, host: 8080
  # map Oracle Docker Images installation path
  config.vm.synced_folder "C:\\shared\\scmlocal\\docker-images", "/docker-images", :mount_options => ["dmode=777","fmode=777"]

After that restart the virtualbox and connect to it via

vagrant halt
vagrant up
vagrant ssh

In the output you can see this mapping.

    default: 1521 (guest) => 1521 (host) (adapter 1)
    default: 5000 (guest) => 5000 (host) (adapter 1)
    default: 8080 (guest) => 8080 (host) (adapter 1)
    default: /docker-images => C:/shared/scmlocal/docker-images

Now you create build the image with the Oracle XE (-x) database version (-v) via the provided scripts from oracle. -i skips the MD5 checksum check, as the checksums are not checked in as UNIX text format and so does not work in our vagrant on windows / oel virtualbox combination.

cd /docker-images/OracleDatabase/dockerfiles
./ -v -x -i

Now you have to wait some time. When the process is ready, you get at the time of this writing an image with the binaries installed.

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
oracle/database         624d78c89ccb        About a minute ago   1.203 GB
registry            latest              c6c14b3960bd        5 weeks ago          33.28 MB
oraclelinux         latest              1988eb5b3fc6        6 weeks ago          278.2 MB

Next we tag this image for pushing to the local docker repository, which we have created in the first blog of this series and is up with every vagrant up of our virtualbox. After that we push it to the registry.

docker tag oracle/database: localhost:5000/oracle/database:
docker push localhost:5000/oracle/database:

In the output we see the succesful push.

The push refers to a repository [localhost:5000/oracle/database]
345dfbce8859: Pushed
dd4b46d40894: Pushed
11327e04fac0: Pushed digest: sha256:82058ca2c5c201ff46471a8db4d9569da9869d420727595884050f94dad0ec85 size: 955

Now we will check, if we can create a Docker container from our image in the registry and the database is working in it. Therefore at first we delete the oracle/database and oraclelinux images from our virtualbox. Then we create the container.

docker rmi 624d78c89ccb -f
docker rmi 1988eb5b3fc6
sudo docker run --shm-size=1g -p 1521:1521 -p 8080:8080 --name="db11.2.0.2-xe" --restart unless-stopped localhost:5000/oracle/database:

In line 3 we pull the image from the local registry, start a container, open the ports 1521 and 8080 to the virtualbox and give the container a name.

Unable to find image 'localhost:5000/oracle/database:' locally Pulling from oracle/database

10ec637c060c: Pull complete
1902f66bc90b: Pull complete
dd8942200fe1: Pull complete
Digest: sha256:41ce1015c8f68ce063e855e7afa96000ededeef1e197e2181bc04c9577d73a1b
Status: Downloaded newer image for localhost:5000/oracle/database:

Oracle Database 11g Express Edition Configuration
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <Enter> to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

SQL*Plus: Release Production on Tue Sep 6 09:41:22 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Express Edition Release - 64bit Production

PL/SQL procedure successfully completed.

SQL> Disconnected from Oracle Database 11g Express Edition Release - 64bit Production
db_recovery_file_dest_size of 10240 MB is 0.98% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Starting background process CJQ0
Tue Sep 06 09:41:19 2016
CJQ0 started with pid=26, OS id=759
Tue Sep 06 09:41:24 2016
XDB installed.
XDB initialized.

In line 9 you can see the autogenerated passwords.
When line 46 appears, you can connect to the database.
With following command you can change the passwords of SYS and SYSTEM:

sudo docker exec db11.2.0.2-xe /u01/app/oracle/ LetsDocker

You see following output:

SQL*Plus: Release Production on Tue Sep 6 15:49:34 2016
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release - 64bit Production
User altered.
User altered.

As long as you not remove or manually stop the container, it restarts with the virtualbox now via:

vagrant halt
vagrant up

At the moment you cannot make your database instance data persistent for this container, I have opened an issue for this, but Gerald Venzl has promised to to implement this later.

Here you find the source code for this blog.

Here you find more about the topic “Virtual Development Server”.

That’s it.


, , , , , , , , , , , ,

1 Comment

Oracle TranslationHub neither supported for 12c Database, 12c Forms/Reports or 64 bit!

If you need TranslationHub (Windows only) for your forms and reports development and plan to move to one of the following

  • 12c Database for your TranslationHub repository
  • 12c Forms/Reports (only available for 64 bit Windows)
  • higher version of 64 bit 11g Forms/Reports

then please immediately stop! None of this combination works with TranslationHub!

For the last point I had created enhancement request 14155931 back in June 2012!

For the first point I had created a service request last week I and get following answer:

Unfortunately, OTH is no longer supported or being developed. Customers can continue to use OTH as-is.
About the errors, based on today’s standards, OTH has several limitations: 

  1. It is a 32bit product and expects to co-exist with a 32bit DB and optional Forms/Reports installation. 64bit installations will not work.
  2. Likely OTH will not work correctly on newer operating systems like Windows 8.1 or newer. It likely will also not be stable on Windows 7-x64 either, although it may generally seem to function.
  3. It may be possible to use a version 12 database as the target database for OTH projects, however this has never been certified and therefore shouldn’t be supported if issues arise.

Although Oracle currently do not have replacement for OTH, the Forms team is working on a possible alternative that may be available in the future. If customers require the use of OTH immediately, they should consider installing and using it in an environment that was previously certified for its use.
The Oracle Technology Network Forums should be considered (for the customer) if there are questions about OTH.

Product Management is aware of the importance of this situation.
Any news regarding OTH will be published on Forms’s OTN page, however, for the moment, unfortunately, there is not much we can help with, in Support.

As 11g Database and 11g Forms will run out of support soon in my opinion Oracle has immediately to provide a working 64bit TranslationHub for 12c Database and Forms as long you has no replacement for this tool.

What do you think?

Update: See the according discussion on the forms forum.

, , , , , , ,

Leave a comment

SLES shell script to check required os packages according to documentation before starting oracle forms & reports installation


If you try to install oracle forms & reports on SLES 11.3 than despite all installer checks are passed maybe you get a message like:

Error in invoking target ‘install’ of makefile ‘<FR_HOME>/sqlplus/lib/’.

The reuirement check of the installer shows only missing openmotif classes which are not really required on SLES (see Doc ID 1567715.1), but no problems with a compiler or something similar.

Checking for binutils-2.19-11.28; found binutils-2.23.1-0.23.15-x86_64. Passed
Checking for gcc-4.3-62.198; found gcc-4.3-62.200.2-x86_64. Passed
Checking for gcc-c++-4.3-62.198; found gcc-c++-4.3-62.200.2-x86_64. Passed
Checking for glibc-2.9-13.2; found glibc-2.11.3-17.87.3-x86_64. Passed
Checking for glibc-32bit-2.9-13.2; found glibc-32bit-2.11.3-17.87.3-x86_64. Passed
Checking for glibc-devel-2.9; found glibc-devel-2.11.3-17.87.3-x86_64. Passed
Checking for glibc-devel-32bit-2.9-13.2; found glibc-devel-32bit-2.11.3-17.87.3-x86_64. Passed
Checking for libaio-0.3.104-140.22; found libaio-0.3.109-0.1.46-x86_64. Passed
Checking for libaio-devel-0.3.104-140.22; found libaio-devel-0.3.109-0.1.46-x86_64. Passed
Checking for libgcc43-4.3.3_20081022; found libgcc43-4.6.9-0.13.22-x86_64. Passed
Checking for libstdc++43-4.3.3_20081022-11.18; found libstdc++43-4.6.9-0.13.22-x86_64. Passed
Checking for libstdc++43-devel-4.3.3_20081022-11.18; found libstdc++43-devel-4.3.4_20091019-0.37.30-x86_64. Passed
Checking for make-3.81; found make-3.81-128.20-x86_64. Passed
Checking for sysstat-8.1.5-7.8; found sysstat-8.1.5-7.47.1-x86_64. Passed
Checking for openmotif22-2.2.3; Not found. Failed <<<<
Checking for openmotif-2.2.3; found openmotif-2.3.1-3.15.1-x86_64. Passed
Check complete. The overall result of this check is: Failed <<<<

The problem here is, that sometime not all checks for os packages are really implemented in the installer. I have a SR to open a bug for this.

In the meantime I have implemented a bash shell script to check against the required os packages in the documentation. For my problem these are listed here. You can simple copy the required packages at the top of the script in the array sections.

The magic contains some bash substring modifications an using the version compare option of zipper.



while [[ $i -lt $len ]]; do 

  installed_package_version="`rpm -q ${required_package_name} --queryformat %{version}-%{release}`"
  if [ $RETCODE -eq 0 ]; then
    compare="`zypper --terse versioncmp ${required_package_version} ${installed_package_version}`"
    if [ $compare -eq 1 ]; then
      echo [$result1] $required_package_name Reqired : $required_package_version Installed: $installed_package_version
      echo [$result1] $required_package_name Reqired : $required_package_version Installed: $installed_package_version
    echo [fail] $installed_package_version
  let i++; 

If you run this script you can see the failing packages on your platform:

[pass] binutils Reqired : 2.19-11.28 Installed: 2.23.1-0.23.15
[pass] gcc Reqired : 4.3-62.198 Installed: 4.3-62.200.2
[pass] gcc-c++ Reqired : 4.3-62.198 Installed: 4.3-62.200.2
[fail] package gcc-32bit is not installed
[pass] glibc Reqired : 2.9-13.2 Installed: 2.11.3-17.84.1
[pass] glibc-32bit Reqired : 2.9-13.2 Installed: 2.11.3-17.84.1
[pass] glibc-devel Reqired : 2.9 Installed: 2.11.3-17.84.1
[pass] glibc-devel-32bit Reqired : 2.9-13.2 Installed: 2.11.3-17.87.3
[pass] ksh Reqired : 93t Installed: 93u-0.26.1
[pass] libaio Reqired : 0.3.104-140.22 Installed: 0.3.109-0.1.46
[pass] libaio-devel Reqired : 0.3.104-140.22 Installed: 0.3.109-0.1.46
[pass] libaio-32bit Reqired : 0.3.104 Installed: 0.3.109-0.1.46
[fail] package libaio-devel-32bit is not installed
[pass] libgcc43 Reqired : 4.3.3_20081022 Installed: 4.6.9-0.13.22
[pass] libstdc++43 Reqired : 4.3.3_20081022-11.18 Installed: 4.6.9-0.13.22
[pass] libstdc++43-devel Reqired : 4.3.3_20081022-11.18 Installed: 4.3.4_20091019-0.37.30
[pass] libstdc++33 Reqired : 3.3.3 Installed: 3.3.3-11.9
[pass] libstdc++33-32bit Reqired : 3.3.3 Installed: 3.3.3-11.9
[pass] libstdc++43-32bit Reqired : 4.3.3_20081022 Installed: 4.6.9-0.13.22
[fail] package libstdc++43-devel-32bit is not installed
[pass] libstdc++-devel Reqired : 4.3 Installed: 4.3-62.200.2
[pass] make Reqired : 3.81 Installed: 3.81-128.20
[pass] openmotif Reqired : 2.3.1-3.13 Installed: 2.3.1-3.15.1
[fail] package openmotif-devel-32bit is not installed
[fail] package openmotif22-libs-32bit is not installed
[pass] openmotif-libs Reqired : 2.3.1-3.13 Installed: 2.3.1-3.15.1
[pass] openmotif-devel Reqired : 2.3.1-3.13 Installed: 2.3.1-3.15.1
[fail] package openmotif-libs-32bit is not installed
[fail] package openmotif21-libs-32bit is not installed
[pass] openmotif22-libs Reqired : 2.2.4-138.17 Installed: 2.2.4-193.1
[pass] sysstat Reqired : 8.1.5-7.8 Installed: 8.1.5-7.47.1

The route cause for the error message in the installer are line 4 and 13, where 32bit Compiler are required for making sql plus despite this forms and reports installation is 64bit version.

Maybe you can use this script with little modification in other environments.

That’s it.

, , , , ,

Leave a comment

“Bob the Builder: Build/Deploy of #ADF enterprise applications” – I’m a speaker at #DOAG2015:


Today my presentation is confirmed:  “Bob the Builder: Build/Deploy of ADF enterprise applications”.

I will speak over our experiences with following

  • build tools
  • deployment tools
  • architecture
  • versioning & branching
  • continuous integration
  • hot deployment in development
  • compile & runtime dependencies

If you speak german and you are interested in some of this, you should come and attend DOAG 2015.

, , , , , , , , , ,

Leave a comment

Slides for my german presentation “Quality Assurance for ADF projects” available

I have presented today on DOAG Development 2014 in Dusseldorf. For all non DOAG members – you can find the german presentation on slideshare too.


, , , , , , , , , , , , , , , , , ,

Leave a comment

Quality Assurance for ADF projects

If you speak german and you are interested in quality assurance for your ADF projects you should come and attend my presentation at DOAG Development on 06/04/2014 in Dusseldorf.

I will show you, how you can implement in the JDeveloper IDE and in Continous Integration server Jenkins:

  • static code analysis with PMD, FindBugs and Checkstyle
  • Task’s
  • Commit tests with JUnit, Mockito and Powermock for Mockito
  • Code coverage for commit tests with JaCoCo
  • Acceptance tests with JUnit and Selenium

See you!


, , , , , , , , , , , , , , , , , ,


Have released PMD Jdeveloper Extension 5.0.5

I have finished now my work on integrating last PMD version 5.0.5 into JDeveloper.

This is available now for JDeveloper upwards, 11.1.2.x. and 12.1.2. There is no new functionality, as the most work intensive part was the rewriting for PMD 5. There has changed a lot of api functionality.

Please give it a try, you can download it via the standard update center “Open Source and Partners Extensions” in JDveloper itself


or directly from the PMD Project Page.

, , , , ,

Leave a comment

Write ADF static code analysis rules with PMD and running these in JDeveloper

Do you know, that PMD can analyse XML files since version 5? Many of ADF files are XML configuration files – wouldn’t it be a good idea to create some static code analysis rules for ADF too?

Unfortunatly oracle configuration files in most times create references to dtd’s, which are not exist anywhere in the path. Till PMD 5.0.1 such files results in errors, as PMD tries to validate this doctype. I have switched of this validation in PMD release 5.0.2.

Following article requires configuration of PMD as described in my blog PMD Integration with JDeveloper through Ant External Tools.

You can download all requried files from here.

Let’s start from the beginning.

  1. At the moment PMD only provide XML check’s against files with the extension *.xml, there is a feature request to change this behaviour. So at the moment, we have to change the code by ourself to reach the result. Load the the 5.0.4 source code.
  2. Look for the file src\main\java\net\sourceforge\pmd\lang\ and replace the line
    XML(“XML”, null, “xml”, XmlRuleChainVisitor.class, “xml”);
    XML(“XML”, null, “xml”, XmlRuleChainVisitor.class, “xml”, “jws”, “jpr”, “cpx”, “xcfg”, “dcx”, “jpx”);
  3. Change to directory pmd-src-5.0.4
  4. set JAVA_HOME, e.g. to your 1.6 JDeveloper jdk
  5. run “mvn clean package”, I have succesfully used maven 2.2.1 from <JDev-Home>\jdeveloper\apache-maven-2.2.1\bin
  6. If you don’t need further extensions, you can instead running steps 2 till 5 the resulting pmd-5.0.4.jar from my side.
  7. Replace the file pmd-5.0.4.jar in pmd-bin-5.0.4\lib (see my previous blog) with the downloaded file or the file from pmd-src-5.0.4\target
  8. Now is the time to create the first adf static code analysis rule. In the adf architecture course I attend, there was a rule, that the taskflow behaviour “No controller transaction”
    should not be mixed with the other option of this selection list

    In the sourcecode this property is described through the absence of the node adfc-config/task-flow-definition/transaction, the other options create this node and additional child nodes, here e.g. for the option “Always create new transaction”
  9. In PMD you can create two kind of rules: Java and XPath. For our xml Files XPath should be the efficient option. We have to put our configuraration e.g. in file my_pmd_rules.xml in the same directory as pmd.xml in the last blog. For the above rule the XPath query in line 14 find nodes, which does not contain the transaction node
    <?xml version="1.0"?>
    <ruleset name="Oracle ADF rules" xmlns=""
    <description>This ruleset checks Oracle ADF code for bad stuff</description>
    <!-- ADF Rules ############################################################################################### -->
    <rule name="OracleAdfTaskflowShouldNotHaveNoControllerTransaktion" since="5.0" language="xml"
    message='ADF tasklows should normally not contain transaktion behavior "No Controller Transaction"'
    <property name="xpath">
  10. Now we have to change the configuration file pmd.xml from the last blog in the marked lines to call our new configuration and run this on files with defined Extensions
    <?xml version="1.0" encoding="windows-1252" ?>
    <project xmlns="" name="Project1" default="all" basedir=".">
    <path id="classpathForPMD">
    <fileset dir="pmd-bin-5.0.4\lib">
    <include name="**/**.jar"/>
    <taskdef name="pmd" classpathref="classpathForPMD" classname="net.sourceforge.pmd.ant.PMDTask"/>
    <target name="pmdAll">
    <echo message="PMD is running on directory ${dir}" level="info"/>
    <pmd rulesetfiles="my_pmd_rules.xml" failOnRuleViolation="true" minimumPriority="1">
    <fileset dir="${dir}">
    <include name="**/*.java"/>
    <include name="**/*.xml"/>
    <include name="**/*.jws"/>
    <include name="**/*.jpr"/>
    <include name="**/*.cpx"/>
    <include name="**/*.xcfg"/>
    <include name="**/*.dcx"/>
    <include name="**/*.jpx"/>
  11. Now call again pmd from the Fusion Order Demo Application StoreFrontModule
  12. You can see the results for xml in the message pane. Unfortunatly the direct jump to violated files does not work at the moment as pmd delivers for every xml violation -1 as line, but I have created an bug for this

That’s it.

Maybe somebody has an idea, where we can build an extension exchange for ADF rules, e.g. for creating rules for ADF Code Guidelines v1.00 or ADF Naming and Project Layout Guidelines v2.00?

Remember: you are not restricted to ADF files, e.g. we do checks to for JDeveloper application (*.jws) and project files (*.jpr) as well, as this are xml files too. The configuration you see already in step 2.

Chrysanth WebStory Published by WebStory

, , , , ,

Leave a comment

PMD Integration with JDeveloper through Ant External Tools

In the past I read following blogs from Shay Shmeltzer:

Now (after little code change in pmd) this integration is possible. I use here JDeveloper, with other versions this should be very similar. Now let’s start:

1. Create a new folder
2. Download PMD 5.0.4
3. Extract the zip file into the created folder
4. Create a file pmd.xml into the created folder
5. Enter following code into the file pmd.xml:

<?xml version="1.0" encoding="windows-1252" ?>
<project xmlns="" name="Project1" default="all" basedir=".">
    <path id="classpathForPMD">
        <fileset dir="pmd-bin-5.0.4\lib">
            <include name="**/**.jar"/>
    <taskdef name="pmd" classpathref="classpathForPMD" classname="net.sourceforge.pmd.ant.PMDTask"/>
    <target name="pmdAll">
        <echo message="PMD is running on directory ${dir}" level="info"/>
        <pmd rulesetfiles="rulesets/internal/dogfood.xml" failOnRuleViolation="true" minimumPriority="1">
            <fileset dir="${dir}">
                <include name="**/src/**/*.java"/>
    <target name="pmd">
        <echo message="PMD is running on file ${dir}\${file}" level="info"/>
        <pmd rulesetfiles="rulesets/internal/dogfood.xml" failOnRuleViolation="true">
            <fileset dir="${dir}">
                <include name="${file}"/>

6. Select Tools – Exernal Tools from the JDeveloper menu
7. Press Button New
8. Select Tool Type: Apache Ant
9. Select your created pmd.xml file in Ant Buildfile:

10. Shuttle target pmdAll to SelectedTargets

11. Add Property dir with value ${file.dir}

12. Skip the Options and Process Step to leave the defaults
13. Add the lib directory of pmd as additional classpath entry

14. Enter Caption and Icon as you want

15. Add the tool to the Navigator Context Menu and Main Toolbar and do not forget to set Log Output to Messages Log

16. Press Next and Finish.

Now you can call pmd e.g. from the fusion order demo application

You see the results of the ant process in the message pane and you can click on the link to open the file and jump to the rule violation:

In upcoming blogs I will show you how you can define your own rulesets (replacing the ones in pmd.xml) and how to use it with any kind of xml files, eg. jws, jpr, xcfg etc..

Chrysanth WebStory Published by WebStory

, , , ,

1 Comment

%d bloggers like this: