Set all WebLogic log levels to “Inherit” via WLST

Logging is a very useful feature of WebLogic.

Unfortunately the log levels, which are set after a clean install of WebLogic or some of the Fusion Middleware product creates a lot of noise and therefore it costs I/O performance.

Additional after analyzing an issue with logging often resetting the log level is forgotten.

Here you get a script to reset the log levels at regular intervals or after a trace session.

#!/usr/bin/python
execfile('get_environment.py')
connect(wlUser, wlPassword, wlAdminUrl)
edit()
loggers = listLoggers(target=managedServer, runtime=0)
for key, value in loggers.items():
  if key <> "" and key <> "ADF_PERFORMANCE_MONITOR_DATABASE" and value <> "":
    print "set " + key + " from " + value + " to <Inherited>"
    setLogLevel(target=adfManagedServer, runtime=0, logger=key, level="")
loggers = listLoggers(target=adfManagedServer, runtime=0)
exit()

In line 2 a script is called to initialize your environment variables wlUser, wlPassword, wlAdminUrl and managedServer.
In line 5 you get the list of loggers.
In line 6..9 you iterate over this list.
In line 7 you can add your own restrictions. Here are already filtered all inherited loggers and one special tool logger for performance monitoring of ADF applications.
In line 10 the loggers are shown again for the result, you can remove this.

Now call this script via

$ORACLE_HOME/oracle_common/common/bin/wlst.sh config_loglevel.py

In the output you see similar output:

------------------------------------------------------------------------+-----------------
Logger                                                                  | Level
------------------------------------------------------------------------+-----------------
...
oracle.ods.virtualization.accesslog                                     | ERROR:1
...
set oracle.ods.virtualization.accesslog from ERROR:1 to <Inherited>

------------------------------------------------------------------------+-----------------
Logger                                                                  | Level
------------------------------------------------------------------------+-----------------
...
oracle.ods.virtualization.accesslog                                     | <Inherited>
...

This version of the script change only the persistent logger levels (runtime=0), because we don’t want influence running trace sessions. But as our servers are dayly started, all runtime log levels are resetted at this point to the persistent one’s.

That’s it.

References:

  • Log Configuration Commands
  • , , , , ,

    Leave a comment

    Virtual Development Server: Add swapfile to VirtualBox as requirement for installing Oracle or build Oracle docker images

    As I want later build Oracle docker images, some of this need a swapfile.

    Per default my used Vagrantbox, does not have one, so later steps will fail.

    As in the last blog I use a Vagrant shell provider.

    ...
      # add swapfile to the box
      config.vm.provision :shell, :path => "add_swap.sh"
    ...
    

    This calls the script add_swap.sh in the created VirtualBox machine.
    Make sure, that you create your swapfile on a supported file system.

    #!/bin/sh
    
    # size of swapfile in megabytes
    swapsize=2100
    
    # does the swap file already exist?
    grep -q "swapfile" /etc/fstab
    
    # if not then create it
    if [ $? -ne 0 ]; then
      echo 'swapfile not found. Adding swapfile.'
      # allocate the disk space
      sudo fallocate -l ${swapsize}M /home/swapfile
      # only owner can read and write
      sudo chmod 600 /home/swapfile
      # sets up swap area in the file
      sudo mkswap /home/swapfile
      # enable file for paging and swapping
      # if this comes with "swapon failed: Invalid argument", 
      # check if the filesystem is supported for swap, xfs eg. is not
      sudo swapon /home/swapfile
      # mount the swapfile at boot
      echo '/home/swapfile none swap defaults 0 0' >> /etc/fstab
    else
      echo 'swapfile found. No changes made.'
    fi
    
    # output results to terminal
    df -h /home/swapfile
    cat /proc/swaps
    cat /proc/meminfo | grep Swap
    

    Now you have to recreate the VirtualBox machine via

    vagrant destroy
    vagrant up
    

    In the output you can now see, how the swapfile is added.

    ...
    ==> default: Running provisioner: shell...
        default: Running: C:/Users/torst/AppData/Local/Temp/vagrant-shell20160819-14324-1a10xs8.sh
    ==> default: swapfile not found. Adding swapfile.
    ==> default: Setting up swapspace version 1, size = 2150396 KiB
    ==> default: no label, UUID=20ff8dbf-6282-4ba6-abe4-05c04c74aac8
    ==> default: Filesystem              Size  Used Avail Use% Mounted on
    ==> default: /dev/mapper/linux-home  3.8G  2.4G  1.5G  63% /home
    ==> default: Filename                           Type            Size    Used    Priority
    ==> default: /home/swapfile                          file               2150396 0       -1
    ==> default: SwapCached:            0 kB
    ==> default: SwapTotal:       2150396 kB
    ==> default: SwapFree:        2150396 kB
    ...
    

    Here you find the source code for this blog.

    That’s it.

    References:

  • Increasing swap size.
  • , , , , , , , ,

    Leave a comment

    Virtual Development Server: Add enough ram and disk space to VirtualBox for further server components

    As I want later build docker images and run docker containers I have to provide enough disk space for this.

    Per default the Vagrantboxes have vmdk disks, these have a static size and are to small for my purposes.

    Therefore I convert the disk, which comes with the box, via Vagrant VirtualBox provider from vmdk to vdi, so that it allocate only the used disk space in the host system.
    Additional I add a second big disk:

    ...
      # virtualbox provider
      config.vm.provider "virtualbox" do |vb|
        # name in VirtualBox
        vb.name = "Development Server"
    
        # configure 16 GB memory 
        vb.customize ["modifyvm", :id, "--memory", "16384"]
    
        # clone the original vmdk disk into a dynamic vdi disk, which only allocate the used space on the host
        if ARGV[0] == "up" && ! File.exist?("#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}.vdi")
          # configure the SATA controller for second disk port, for other box you may have another controller
          vb.customize [
            "storagectl", :id, 
            "--name", "SATA", 
            "--controller", "IntelAHCI", 
            "--portcount", "1", 
            "--hostiocache", "on"
          ]
          # clone the original disk, for other box you may have another disk name
          vb.customize [
            "clonehd", "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/box-disk2.vmdk", 
                 "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}.vdi", 
            "--format", "VDI"
          ]
          # attach the cloned disk to the controller
          vb.customize [
            "storageattach", :id, 
            "--storagectl", "SATA", 
            "--port", "0", 
            "--device", "0", 
            "--type", "hdd",
            "--nonrotational", "on",
            "--medium", "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}.vdi" 
          ]
          # delete the original disk to release it's space
          vb.customize [
            "closemedium", "disk", "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/box-disk2.vmdk", 
            "--delete"
          ]
        end
    
        # create addtional big dynamic vdi disk for docker images
        if !File.exist?("#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}_docker.vdi")
          # create addtional big dynamic vdi (200 GB)
          vb.customize [
            "createhd", 
            "--filename", "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}_docker.vdi", 
            "--format", "VDI", 
            "--size", 200 * 1024
          ] 
          # attach the addtional disk to the controller
          vb.customize [
            "storageattach", :id, 
            "--storagectl", "SATA", 
            "--port", "1", 
            "--device", 0, 
            "--type", "hdd",
            "--medium", "#{ENV["HOME"]}/VirtualBox VMs/#{vb.name}/#{vb.name}_docker.vdi"
          ]
        end
      end
    
      # shell provider
      # format the additional disk and add the free space to the box
      config.vm.provision :shell, :path => "add_disk.sh"
      ...
    

    Lines 64..66 adds the additional disk space to a logical volume via a Vagrant shell provider, which calls the script add_disk.sh in the created VirtualBox machine.
    Resizing the first disk does not work, as therefore the machine has to be booted, which cannot be handled with Vagrant.

    # exit immediately if a command exits with a non-zero status.
    set -e
    # activate debugging from here
    set -x
    
    if [ -f /etc/disk_added_date ] ; then
       echo "disk already added so exiting."
       exit 0
    fi
    
    # show diskspace of the logical volume before adding the disk
    df -h /dev/mapper/linux-root
    
    # partitioning the disk
    sudo fdisk -u /dev/sdb <<EOF
    n
    p
    
    
    
    t
    
    8e
    w
    EOF
    
    # initialize the partition for use by logical volume manager
    sudo pvcreate /dev/sdb1
    # add the partition to volume group linux
    sudo vgextend linux /dev/sdb1
    # increase the size of the logical volume /dev/mapper/linux-root
    sudo lvextend --extents +51199 --resizefs /dev/mapper/linux-root
    # mark that the disk was added
    date > /etc/disk_added_date
    
    # show diskspace of the logical volume after adding the disk
    df -h /dev/mapper/linux-root
    

    Now you have to recreate the VirtualBox machine via

    vagrant destroy
    vagrant up
    

    In the output you can now see, how the logical volume grows:

    ==> default: Running provisioner: shell...
        default: Running: C:/Users/torst/AppData/Local/Temp/vagrant-shell20160812-2348-1ln6wrz.sh
    ==> default: ++ '[' -f /etc/disk_added_date ']'
    ==> default: ++ df -h /dev/mapper/linux-root
    ==> default: Filesystem              Size  Used Avail Use% Mounted on
    ==> default: /dev/mapper/linux-root   16G  1.9G   14G  12% /
    ==> default: ++ sudo fdisk -u /dev/sdb
    ==> default: Welcome to fdisk (util-linux 2.23.2).
    ==> default:
    ==> default: Changes will remain in memory only, until you decide to write them.
    ==> default: Be careful before using the write command.
    ==> default:
    ==> default:
    ==> default: Command (m for help): Partition type:
    ==> default:    p   primary (0 primary, 0 extended, 4 free)
    ==> default:    e   extended
    ==> default: Select (default p): Partition number (1-4, default 1): First sector (2048-419430399, default 2048): Using default value 2048
    ==> default: Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): Using default value 419430399
    ==> default: Partition 1 of type Linux and of size 200 GiB is set
    ==> default:
    ==> default: Command (m for help): Selected partition 1
    ==> default: Hex code (type L to list all codes): Hex code (type L to list all codes): Changed type of partition 'Linux' to 'Linux LVM'
    ==> default:
    ==> default: Command (m for help):
    ==> default: Device does not contain a recognized partition table
    ==> default: Building a new DOS disklabel with disk identifier 0xb4c74c64.
    ==> default: The partition table has been altered!
    ==> default:
    ==> default: Calling ioctl() to re-read partition table.
    ==> default: Syncing disks.
    ==> default: ++ sudo pvcreate /dev/sdb1
    ==> default:   Physical volume "/dev/sdb1" successfully created
    ==> default: ++ sudo vgextend linux /dev/sdb1
    ==> default:   Volume group "linux" successfully extended
    ==> default: ++ sudo lvextend --extents +51199 --resizefs /dev/mapper/linux-root
    ==> default:   Size of logical volume linux/root changed from 15.62 GiB (4000 extents) to 215.62 GiB (55199 extents).
    ==> default:   Logical volume root successfully resized.
    ==> default: meta-data=/dev/mapper/linux-root isize=256    agcount=4, agsize=1024000 blks
    ==> default:          =                       sectsz=512   attr=2, projid32bit=1
    ==> default:          =                       crc=0        finobt=0
    ==> default: data     =                       bsize=4096   blocks=4096000, imaxpct=25
    ==> default:          =                       sunit=0      swidth=0 blks
    ==> default: naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
    ==> default: log      =internal               bsize=4096   blocks=2560, version=2
    ==> default:          =                       sectsz=512   sunit=0 blks, lazy-count=1
    ==> default: realtime =none                   extsz=4096   blocks=0, rtextents=0
    ==> default: data blocks changed from 4096000 to 56523776
    ==> default: ++ date
    ==> default: ++ df -h /dev/mapper/linux-root
    ==> default: Filesystem              Size  Used Avail Use% Mounted on
    ==> default: /dev/mapper/linux-root  216G  1.9G  214G   1% /
    

    Here you find the source code for this blog.

    That’s it.

    References:

  • VirtualBox : Extend Virtual Disk and File System
  • Resizing disk space on vagrant box
  • , , , , , , , , ,

    Leave a comment

    Virtual Development Server: Creating Virtualbox machine including docker containers with Vagrant

    As I want to decouple my development server from my computer as much as possible I want to create first a virtual machine with linux.

    Because I have used Oracle Virtualbox in the past successfully, I will use it here too.

    As I want have later a reproducible environment via Infrastructure as code, I give Vagrant a try for this. As source code management system I use GIT, my remote repository is located at GitHub.

    As I don’t want create a new linux from scratch, I have looked for a ready system at Vagrantboxes, which contains a new Oracle Linux version, and find a Oracle Linux 7.1 x86_64 system with Chef and Puppet preinstalled.

    Before I could start, I had to install on my Windows 10 computer Vagrant 1.8.5 and Oracle Virtualbox 5.0.16. Don’t use the 5.1 Version, as at this is not yet supported by vagrant 1.8.5.

    For automatic update of the Oracle VM VirtualBox Extension Pack, which is delivered with the ready box and is required for use of shared folders and more, you should install following plugin as described here:

    vagrant plugin install vagrant vbguest
    

    Next I have created a directory of your choice and init there a Vagrantfile by calling

    vagrant init
    

    Then I changed the Vagrantfile as following, see the inline comments for documentation:

    Vagrant.configure(2) do |config|
    
      # Use the mentioned ready OEL 7 linux box
      config.vm.box = "oraclelinux-7-x86_64.box"
      config.vm.box_url = "http://cloud.terry.im/vagrant/oraclelinux-7-x86_64.box"
    
      # Create a private network
      config.vm.network "private_network", type: "dhcp"
    
      # persistant storage for all docker container
      config.vm.synced_folder "C:\\shared\\virtual_storage", "/virtual_storage", :mount_options => ["dmode=777","fmode=777"]
      
      # virtualbox provider
      config.vm.provider "virtualbox" do |vb|
        # name in VirtualBox
        vb.name = "Development Server"
    	end
    
      # Docker Private Registry container for storing later builded docker images, which are not in the Docker Public Registry at https://hub.docker.com/
      config.vm.provision "docker" do |d|
        d.run "registry", image: "registry", daemonize: true, args: "-d -p 5000:5000 -v /virtual_storage/docker_registry:/var/lib/registry"
      end
    
    end
    

    Run next from the created directory

    vagrant up
    

    Following you see the output

    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Importing base box 'oraclelinux-7-x86_64.box'...
    ==> default: Matching MAC address for NAT networking...
    ==> default: Setting the name of the VM: Development Server
    ==> default: Clearing any previously set network interfaces...
    ==> default: Preparing network interfaces based on configuration...
        default: Adapter 1: nat
        default: Adapter 2: hostonly
    ==> default: Forwarding ports...
        default: 22 (guest) => 2222 (host) (adapter 1)
    ==> default: Booting VM...
    ==> default: Waiting for machine to boot. This may take a few minutes...
        default: SSH address: 127.0.0.1:2222
        default: SSH username: vagrant
        default: SSH auth method: private key
        default: Warning: Remote connection disconnect. Retrying...
        default:
        default: Vagrant insecure key detected. Vagrant will automatically replace
        default: this with a newly generated keypair for better security.
        default:
        default: Inserting generated public key within guest...
        default: Removing insecure key from the guest if it's present...
        default: Key inserted! Disconnecting and reconnecting using new SSH key...
    ==> default: Machine booted and ready!
    [default] GuestAdditions versions on your host (5.0.26) and guest (5.0.12) do not match.
    Loaded plugins: ulninfo
    Package kernel-uek-devel-4.1.12-32.el7uek.x86_64 already installed and latest version
    Package gcc-4.8.5-4.el7.x86_64 already installed and latest version
    Package 1:make-3.82-21.el7.x86_64 already installed and latest version
    Package 4:perl-5.16.3-286.el7.x86_64 already installed and latest version
    Package bzip2-1.0.6-13.el7.x86_64 already installed and latest version
    Nothing to do
    Copy iso file C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
    mount: /dev/loop0 is write-protected, mounting read-only
    Installing Virtualbox Guest Additions 5.0.26 - guest version is 5.0.12
    Verifying archive integrity... All good.
    Uncompressing VirtualBox 5.0.26 Guest Additions for Linux............
    VirtualBox Guest Additions installer
    Removing installed version 5.0.12 of VirtualBox Guest Additions...
    Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
    Copying additional installer modules ...
    Installing additional modules ...
    Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
    Building the VirtualBox Guest Additions kernel modules
    Building the main Guest Additions module[  OK  ]
    Building the shared folder support module[  OK  ]
    Building the shared folder support module[  OK  ]
    Building the graphics driver module[  OK  ]
    Doing non-kernel setup of the Guest Additions[  OK  ]
    You should restart your guest to make sure the new modules are actually used
    
    ==> default: Checking for guest additions in VM...
    ==> default: Configuring and enabling network interfaces...
    ==> default: Mounting shared folders...
        default: /vagrant => C:/shared/scmlocal/blog
        default: /virtual_storage => C:/shared/virtual_storage
    ==> default: Running provisioner: docker...
        default: Installing Docker onto machine...
    ==> default: Starting Docker containers...
    ==> default: -- Container: registry
    

    In lines 1..24 you see the loading of the ready box and booting with the defined network
    In lines 25..50 the version of the VirtualBox GuestAdditions of the box is checked and after that replaced with the actual installed VirtualBox version. This happens only on the first “vagrant up” call.
    In lines 57..58 Docker is installed as a Vagrant Docker provider is called in the Vagrantfile line 20 and it does not exist in the box before.
    In lines 59..60 a Docker Private Registry container is started via loading docker image from the Docker Public Registry. In a later blog we will use this Docker Private Registry container to hold our own created docker images like database and development tools. The pushed images are saved to a mapped host volume of my windows 10 computer.

    You can connect to the virtualbox directly via

    vagrant ssh
    

    The you can see the downloaded Docker Private Registry images and the started container from this image:

    [vagrant@oraclelinux7 ~]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              c6c14b3960bd        13 days ago         33.28 MB
    [vagrant@oraclelinux7 ~]$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    739c1c9926b1        registry            "/entrypoint.sh /etc/"   5 minutes ago       Up 5 minutes        0.0.0.0:5000->5000/tcp   registry
    

    You can now stop the Development Server via

    vagrant halt
    

    If you startup again the server via

    vagrant up
    

    the provision steps are not replayed until you destroy the server or explicitly call the provision again via

    vagrant provision
    

    Here you find the source code for this blog.

    That’s it.

    , , , , , , , ,

    Leave a comment

    Virtual Development Server: The idea

    For long time I had the idea to create a virtual development server for testing some ideas and play with some new and old technologies.

    The several components should be easy replaceable and should influence my computer as little as possible.

    So in the next blogs of this series I will discuss several technologies like vagrant, docker, jenkins and several oracle database and development stacks.

    Please stay tuned!

    Leave a 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.
    https://community.oracle.com/community/development_tools/forms

    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

    #Javaland 2016 conference day 2

     

    This was my second day:

    Michael Tamm (optivo GmbH): Feature Toggles on Steroids

    Very good summary off all topic’s covering feature toggles. Wish I had this summary 2 years before, were we have evaluated this. Unfortunately furthermore no solutions for declarative frameworks like Oracle ADF with it’s wizards and xml configurations, which later generated code. Ironic answer to my question: “Don’t use frameworks – use Java”

    Alexander Casall (Saxonia Systems AG): User Experience for techies

    Now comes someting completely different. As least I had expected. No techniques etc.. There are really german standards “Ergonomics of human-system interaction” in ISO 9241 – 110 (Dialogue principles) and ISO 9241 – 210 (Ergonomics of human-system interaction). I have to read this, if it really would help in development, or the presenter interprets this on its own. Nice and surprising presentation.

    Adam Gowdiak (Security Explorations): Java (in)security (Keynote)

    The presenter is really angry about Oracle and co. and the security in Java. Nevertheless it seems he has specialized only on this topic and earn this money on this. So I doesn’t know, if somebody or another product is better. What about security in OpenJDK? And what are now my alternatives? A little depressing keynote.

    Lars Röwekamp (open knowledge GmbH): Courage to professionalism

    I don’t know, what I had expected here, but this was a nice surprise too. The talk was about to find a common language between customer, analyst, developer and other roles. The patterns “Rich Entities” and “Value Objects” helps to find a way out of the helper, util and manager class hell and seems to improve the readability of the code for all stakeholders. But how will this fit in declarative Frameworks like Oracle ADF and it’s generated classes? Have to think about it. Very good speaker!

    Wolfgang Weigend (Oracle Deutschland): Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts

    Unfortunately the worst presentation comes from Oracle itself. To be fair: this presentation should be held by Bruno Borges, which was prevented to come to Javaland. Tip: Never hold a presentation, which is created by another person, if you don’t know, what he know about the subject. But I’m not sure if I had understood more, if Bruno had held the presentation. I didn’t find a red thread in the slides. And I must add, I didn’t really find an alternative presentation in this time slot.

    Alexander Heusingfeld, Tammo van Lessen (innoQ Deutschland GmbH): When Microservices Meet Real-World Projects: Lessons Learned

    Interesting presentation but the topic was missed. This had little to do with Microservice, more what a consultant or any person has to learn on his way from Junior to Senior: communicate, communicate, communicate. Especially when you want to change something.

    Stephan Kaps (Bundesversicherungsamt): Flyway vs. LiquiBase – Battle of the database migration tools

    I wanted to do this comparison several times before, but had never enough time. Now I’m relative sure that I will start with Liquibase in my next private project before I develop the application. This was the subjective winner of the battle too. I’m overwhelmed by the mass of features of both tools. Very good summary!

    Architecture Kata

    This was a nice workshop to plan the application and technical architecture of a given small set of requirements. Result for me: the many participants from a lot of other companies comes to very similar architecture depending on the assumption they made. In real life you have to communicate again and again with your stakeholders to get answered all of the questions and get quick feedback from them. I have urgently to refresh my knowledge of tools for UML diagramming and graphical presentations. And for structured proceeding maybe I should look for TOGAF training?

    Conclusion

    This was inspiring conference, which gives me a lot of fresh ideas and reminders for some spilled goals for my private and company projects. I think we’ll see us next year!

    That’s it!

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

    Leave a comment

    #Javaland 2016 conference day 1

    This year I have decided to give the Javaland conference a try. I’m not a java professional, but in the program was listed a lot of interesting testing presentations, so my company booked for me.

    The location in Phantasierend Brühl near cologne was very fine. Unfortunately the conference rooms had not enough space this year so for some presentation you have to go to 2 rooms outside of the parc. Additionally it is not understandable, why there is not wlan for such a conference.

    This was my first day:

    Jeremias Rößler (ReTest): Behavioral Diff as new test paradigm

    Why I don’t record a test with all information of my page objects, eliminate all variable parts until it is stable and reproducible and define this a my basic truth. If a code change break this test I check the problems, if these were expected or not. Good idea but – how many data created this and how long does it take to compare all this with previous successful run. I hope this new startup will give us effective tools for this paradigm.

    Simon Maple (ZeroTurnaround): Is Your Profiler Speaking the Same Language as You?

    When I can trust the Profiler, what are the basics of it and how can I ensure that the right data are available for it. Which traps exist, when instrumenting for tracing and logging. Nice insights, but I’m sure I have to reread the presentation to fully understand.

    Exhibition Hall after lunch

    Played around with a Jenkins docker instance and the new Pipeline Plugin (formerly named Workflow Plugin) at the Cloudbees booth. I had a nice short talk with Bernhard Cygan about some other Jenkins topics.

    Tobias Kraft, Ralf Müller (exensio GmbH): Spock and Geb: Clear and comprehensible tests

    This is an interesting combination of frameworks for human readable behavior tests. I’m not sure if it is really enterprise ready (do you use version 0.x?). Will this work with Oracle ADF development too? Have to check this as next opportunity.

    Sven Ruppert (Macros Reply): Practical mutation testing

    This seems to be the long searched key to find the right tests on the corner cases of our applications. I have mandatory to prove the mentioned PIT framework Very charismatic and tough presenter.

    Roel Spilker (TOPdesk), Reinier Zwitserloot (medipc.nl): Lombok: The Boilerplate Buster. It’s a Kind of Magic!

    Is this the way to hide generated and framework required code, like standard getters and setters, from the really interesting code, which implements my requirements? It is implemented as a java compiler plugin. Have to check immediately, if this will work with Oracle JDeveloper too. In Eclipse the structure shows the code of generated class, which contains the generated boilerplates via the lombok framework annotations. And what changes are required to fulfill now my static code analysis rules which work on the source code. Additional this was a very entertaining presentation.

    Bert Jan Schrijver (JPoint): Continuous Performance: Automated Load Testing with Gatling

    As our PoC of JMeter was not really satisfying especially for maintenance of test cases and the load testing should not cost anything at least at the moment, we should definitely this opensource tool a try. Especially the combination of the recorder and the presenter converter scripts to java looks promising. Maybe we could reuse the page object locators from our Selenium tests?

    Hubert Klein Ikkink (JDriven): Writing Documentation with Asciidoctor Is Awesome

    Focus on content instead of formatting in your documentation! With this tool it seem to be possible to really versioning and therefore to diff your documentation between commits. And still you can generate via templates modern output formats e.g. like HTML 5 or PDF. With a clever combination of features you can annotate your code with markers, to reuse this actual code between this markers in your documentation. And via ASCII art you can generate simple diagrams too. I will absolutely try this on my private projects soon.

    Community Hall – Meet the libs

    The motto was: show me your favorite opensource lib and I show your mine:

    Sven Ruppert again – Proxybuilder: Change the behavior of deep code for different purposes of CDI eg. Metrics, Logging or testing. Maybe interesting for my future tests.
    Roland Huß – Jolokia: JMX Bean access via JSON over HTTP, interesting but don’t know if I ever need this
    ? – Asciidoctor again: Jump additional over some of tool integrations
    ? – Keycloak: If I ever need a SSO or IDM solution for my private projects this will the first citizen in my tool chain.
    ? – Wildfly swarm: Interesting but actually I did not touch JBoss or Wildfly in my projects.

    Dinner

    Generally very good food, I had not expected this here. At dinner I meet at my desk with some staff of canoo, which set up the voting machines at Javaland too. Nice and diverting talk, thank you guys!

    That’s it!

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

    Leave a comment

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

    Hi!

    If you try to install oracle forms & reports 11.1.2.2 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/ins_sqlplus.mk’.

    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.

    #!/bin/bash 
    
    array=( 
    binutils-2.19-11.28 
    gcc-4.3-62.198 
    gcc-c++-4.3-62.198 
    gcc-32bit-4.3 
    glibc-2.9-13.2 
    glibc-32bit-2.9-13.2 
    glibc-devel-2.9 
    glibc-devel-32bit-2.9-13.2 
    ksh-93t
    libaio-0.3.104-140.22 
    libaio-devel-0.3.104-140.22 
    libaio-32bit-0.3.104 
    libaio-devel-32bit-0.3.104 
    libgcc43-4.3.3_20081022 
    libstdc++43-4.3.3_20081022-11.18 
    libstdc++43-devel-4.3.3_20081022-11.18 
    libstdc++33-3.3.3 
    libstdc++33-32bit-3.3.3 
    libstdc++43-32bit-4.3.3_20081022 
    libstdc++43-devel-32bit-4.3.3_20081022 
    libstdc++-devel-4.3 
    make-3.81 
    openmotif-2.3.1-3.13 
    openmotif-devel-32bit-2.3.1-3.13 
    openmotif22-libs-32bit-2.2.4-138.17 
    openmotif-libs-2.3.1-3.13 
    openmotif-devel-2.3.1-3.13 
    openmotif-libs-32bit-2.3.1-3.13 
    openmotif21-libs-32bit-2.1.30MLI4-143.2 
    openmotif22-libs-2.2.4-138.17 
    sysstat-8.1.5-7.8
    ) 
    
    len=${#array[*]} 
    i=0 
    line='-------------------------------------------------------------------' 
    while [[ $i -lt $len ]]; do 
    
      package_name_temp_1="${array[$i]%%.*}" 
      required_package_name="${package_name_temp_1%-*}"
      required_package_version="${array[$i]/$required_package_name-/}" 
      
      installed_package_version="`rpm -q ${required_package_name} --queryformat %{version}-%{release}`"
      RETCODE=$?
      if [ $RETCODE -eq 0 ]; then
        compare="`zypper --terse versioncmp ${required_package_version} ${installed_package_version}`"
        if [ $compare -eq 1 ]; then
          result1=fail;
          echo [$result1] $required_package_name Reqired : $required_package_version Installed: $installed_package_version
        else
          result1=pass;
          echo [$result1] $required_package_name Reqired : $required_package_version Installed: $installed_package_version
        fi 
      else
        echo [fail] $installed_package_version
      fi
      
      let i++; 
    done
    

    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:

    csm_2015-Konferenz-Ausstellung-Logo_02_373181671d

    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

    Follow

    Get every new post delivered to your Inbox.

    Join 121 other followers

    %d bloggers like this: