Archive for December, 2008
Agile software development, the principles. Principle 9 : Continuous attention to technical excellence and good design enhances agility
Dec 28th
This is the ninth of 12 posts about the principles of agile software development. Purpose is to go back to the start of the agile manifesto (http://agilemanifesto.org/principles.html) and discuss the implementation of the 12 principles in real life software engineering. Goals of agility are to go deliver software of higher quality, faster, with a higher acceptance to end-users and able to follow the changing business requirements to strive for competitive advantage.
The question is: is this going to work in practice or is this only based on a nice marketing and sales story.
Principle 9: Continuous attention to technical excellence and good design enhances agility.
The first time I looked at this principle I thought: “How is this possible”. Agility focuses on quickly delivering working software (reading: “Quick and dirty”). I experienced this is not true. Attention to technical excellence is making the agile process working better. Technical excellence can make the development process more flexible. In this context I would like to point out that there is a difference between technical excellence / good design compared to complex design and technical complexity. How many developers, designers and architects (the ivory tower / PowerPoint architects) cannot resist creating complex designs, patterns and code with no other purpose than to show off their technical superiority? How many projects have stranded in complex designs and abstract meta-models without creating any business value? These projects are good to be displayed in the Museum Of Modern Software Development but completely useless in the real world.
Smart technology and smart design
Every developer, architect and designer must work with principles of smart design in their minds. In my opinion there are only two principles: 1) the concept must work and 2) other team members understand and are able apply the principle.
Smart technology and good design has its greatest advantage when it is used for the benefit of the whole application and the whole team. Not just for sub-optimal improvements for a single function or a single developer. Good excellent technology and good design has to make coding easy and the application modular, more flexible and adaptable. By using the right frameworks and supporting tools you are able to deliver higher quality software much faster than you where used to. In practice this means using frameworks for common tasks like authorization, persistence and navigation and tools for building, releasing and deploying your application.
In fact all tasks, that are labor intensive and demand a lot of concentration and focus, are likely candidates to be implemented via frameworks and tools.
Oracle Workflow, a brief introduction – Part 2 Building a simple workflow
Dec 24th
In this blog I will show you how easy it is to build a process with Oracle Workflow. This demo consist of an automatic step (plsql function) and a FYI notification. The process will be deployed in the workflow environment described in my previous blog (Part 1).
Workflow Builder
To build a process you need Oracle Workflow Builder 2.6.3.5. The install file can be downloaded from the following url: www.oracle.com/technology/software/products/workflow/index.html
Business Rule: Only One Clerk per Department – 11g Style
Dec 19th
During the 7Up workshop, a workshop geared towards experienced developers who want to get up to speed with everything that happened in Oracle since release 7, one of the “tricks” that passes by is how to implement the Business Rule:
Only one Clerk per Department is Allowed
The way we show how to declaratively implement this Business Rule is by using a Unique Function Based Index. Every now and then someone will comment that the implementation is a hack, “cause an Index is not meant to implement a Business Rule, it’s there to enhance performance.”
I don’t necessarily agree with this, but I do believe that Oracle 11g offers a more elegant solution (be it very similar, but is considered less of a hack).
The Double Checked Locking confusion
Dec 14th
Last Monday I was attending a presentation of Brian Goetz about the Java Memory Model. One of his points was about lazy initialization which concluded with "don’t use the Double Checked Locking idiom". Last Thursdays keynote at Devoxx Joshua Bloch tells the audience that if you really, really need performance you should use the the double checked locking idiom.
Code refactoring…
Dec 14th
Steven Feuerstein wrote an entry on his Toadworld blog where he checks the refactoring capabilities of SQL-Developer.
I am trying the same things in PL/SQL Developer to see if this does do the trick.
Extending the SQL Developer functionality in JDeveloper 11g
Dec 13th
One thing that always draws me in tools, libraries and frameworks: what are the hooks, the backdoors, the extension points, the APIs, the event listener registration facilities etc. Today I came across a blog article by Roel Hartman, about showing Oracle Designer objects in the SQL Developer database navigator. I could not resist looking into the extension mechanism used for this. And of course the best way to understand this, is by doing it yourself. So in this article my brief description of how to extend the Database Navigator in JDeveloper (which is the same thing as in stand alone SQL Developer).
My extension is primitive and pointless in the extreme. It has the navigator show a new node type called Employees. The child nodes are the employees specified in table EMP. The interesting part of course is that you can any information found in the database – either the data dictionary or your own tables and views. This allows you to integrate Business Rules if they are defined in tables. Or Tasks, Issues, Projects and Team Members – if they are in tables. Or the results of calling WebServices – if these results are exposed through Views.
JSF 2.0 and Servlet 3.0 Specifications – (almost) ready for take-off – What is new and exciting in Servlet 3.0?
Dec 12th
2009 will be the year of JEE 6. Important specifications in the JEE 6 platform are Servlet and JavaServer Faces. JEE 6 will contain the Servlet 3.0 specification as well as the JSF 2.0 specification. Both are developed in the JCP. JSF 2.0 as JSR-314 (see: jcp.org/en/jsr/detail) led by Ed Burns (Sun) and Roger Kitain (Sun) with participation from almost every vendor in the Java Web Application space. Servlet 3.0 is JSR-315 headed by Rajiv Mordani (Sun); more detail on the JCP Site for Servlet 3.0.
During his presentation at Devoxx 2008, Martin Marinschek shed a lot of light on the most important features currently being specified in JSR-314 and JSF-315 for Servlet 3.0 and JSF 2.0. A few of the highlights in the Servlet 3.0 spec are discussed in this article; another article will go into JSF 2.0 details.
Devoxx 2008: Does the java language have a future?
Dec 11th
A lot of interesting stuff is going on.
More and more (dynamic typed) languages are appearing and getting more attention. Are they better than the Java language? Read the rest of this entry »
Devoxx 2008: The major announcements
Dec 11th
At the time I’m writing this, Devoxx 2008 is well into it’s second day. Day one was quite interesting, with the major announcement being the release of JavaFX 1.0 last week. Apart from that, IBM presented their RFID technology, which has been incorporated into our access badges. Day two held another major announcement: all of Java will be made modular. That means not only the SDK, but also the JRE and even the JVM. Expected release date of JDK 7: somewhere in 2010…
Read the rest of this entry »
ADF 11g Rich Client Components – programmatically adding a ShowPopupBehavior
Dec 11th
This morning I received an email from a reader of one of my articles on the blog. The challenge in the email: I want to programmatically create an input field. Then I want to add a showpopup behavior to this input field – to have a popup display when the field is hovered over with the mouse. It turns out that the ShowPopupBehavior is not a UIComponent that you can simply add a child to another UIComponent. So could it be done and if so, how?
A little investigation made clear Read the rest of this entry »



