Posts Tagged Static Code Analysis

#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?


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 ( 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.


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

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!


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


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: