December 28th, 2008 by Robbrecht van Amerongen
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.
Read the rest of this entry »
Posted by Robbrecht van Amerongen in AMIS, Analysis and Design, General, KC Software Engineering, Project Management, Software Development, Tools | No Comments »
December 24th, 2008 by André Verbeek (Mn Services)
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
Read the rest of this entry »
Posted by André Verbeek (Mn Services) in AMIS, Database, Devel. + PL/SQL tools, General, KC Oracle Development Tools, KC Technical Architecture, Oracle E-Business Suite, Software Development | No Comments »
December 19th, 2008 by Alex Nuijten
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).
Read the rest of this entry »
Posted by Alex Nuijten in Database, Devel. + PL/SQL tools, KC Oracle Development Tools, KC SDPL, Oracle | 3 Comments »
December 14th, 2008 by Alan van Dam
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.
Read the rest of this entry »
Posted by Alan van Dam in J2EE/Java, Java, Software Development, Web | 8 Comments »
December 14th, 2008 by Patrick Barel
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.
Read the rest of this entry »
Posted by Patrick Barel in Devel. + PL/SQL tools, Oracle | No Comments »
December 13th, 2008 by Lucas Jellema
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.

Read the rest of this entry »
Posted by Lucas Jellema in Devel. + PL/SQL tools, General, Java & (10g)AS, Oracle | 1 Comment »
December 12th, 2008 by Lucas Jellema
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.
Read the rest of this entry »
Posted by Lucas Jellema in ADF & JHeadstart, General, J2EE/Java, Java, Java & (10g)AS, Oracle, Web | No Comments »
December 11th, 2008 by Alan van Dam
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 »
Posted by Alan van Dam in Announce, J2EE/Java, Java, Software Development, Web | 1 Comment »
December 11th, 2008 by Wouter van Reeven
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 »
Posted by Wouter van Reeven in General | No Comments »
December 11th, 2008 by Lucas Jellema
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 »
Posted by Lucas Jellema in ADF & JHeadstart, General, Oracle | 4 Comments »
December 10th, 2008 by Lucas Jellema
Here you will find the first demo from my Devoxx 2008 presentation. It shows how you can rapidly create a rich web application based on Java Server Faces and EJB/JPA persistency using JDeveloper 11g and the ADF 11g framework. The presentation included below shows the steps one by one to create a rich web application. The JDeveloper 11g application can be downloaded as well. The end result looks something like:

it includes such features as: master detail tables with synchronization; column sort; run time column manipulation: resize, reposition and hide/show; popup with detailed context data; data driven, synchronized chart; accordion for better page real estate usage.
Read the rest of this entry »
Posted by Lucas Jellema in ADF & JHeadstart, General, J2EE/Java, Java, Oracle, Tools, Web | No Comments »
December 9th, 2008 by Lucas Jellema
Here is my Devoxx 2008 presentation challenge: within 30 minutes, walk an audience through ‘JSF On Rails’ with ADF 11g (the application development framework from Oracle) and JHeadstart - its counterpart to Ruby on Rails and/or Grails plugin that support rapid generation of CRUD++ style applications - into JSF/ADF Faces Rich Client Components. Entice them into trying it out for themselves. By the way: the audience just comes out of the second of two 3 hour-long University sessions.
Tools in action is the name of the track. In 30 minutes presenters get an opportunity to show to an audience what tool combination they think others should see and know about. It calls for a lot of demo and little slide-talk. See the slides at the end of this article.
My story line in summary:
Read the rest of this entry »
Posted by Lucas Jellema in General | No Comments »
December 9th, 2008 by Lucas Jellema
I am currently attending the Devoxx Conference in Antwerp, the largest gathering of Java developers this side of the pond. I was last here in 2005 - a memorable conference for me as in one day I was exposed to JSF and the announcement of the donation by Oracle of Trinidad to Apache MyFaces as well as an introduction to JPA (and EJB 3.0) by Mike Keith. These two sessions helped shaped a lot of what happened in my professional life ever since.
So here I was this morning, expecting another life altering event.
Read the rest of this entry »
Posted by Lucas Jellema in ADF & JHeadstart, J2EE/Java, Java, Java & (10g)AS, Oracle | No Comments »
December 8th, 2008 by Thijs Janssen
The Case
At the customer we use Oracle Incentive Compensation (OIC). OIC is used to compensate external partners. These partners are maintained in CRM foundation. The partners are set up as salesperson. Salespersons can be used inside OIC.
The customer has two operating units. In CRM for each operating unit, the salesperson must be set up. So if you had setup the salesperson in operating unit A, then there’s not yet a salesperson in operating unit B.
The problem in CRM foundation is that it is possible to change information of operating unit B, while you’re using a responsibility that is assigned to operating unit A. If you change information of operating unit B, using the responsibility for operating unit A, the relation in the database will be made with operating unit A. So for example you changed a role that is used in operating unit B this will be related to the salesperson of operating unit A. This causes inexplicable errors. On screen everything seems ok, but somewhere hidden in the database there is a wrong relation.
Read the rest of this entry »
Posted by Thijs Janssen in AMIS, EBS Customizations, General, Oracle E-Business Suite | No Comments »
December 6th, 2008 by Lucas Jellema
As I was preparing for my Devoxx presentation next Monday, I decided to look at the somewhat harder way of integrating a JPA based business tier into a JavaServer Faces web tier. The easy way - when using the ADF 11g framework in JDeveloper 11g is creating a Data Control for the Session Facade Bean. The Web Application can create data bindings for entities, entity collections and operations exposed in the Session Facade Bean that completely hide the injection or lookup details from the web tier developer. It’s the ADF responsibility to find the session bean and manage references to it.
However, if you do not use ADF, you need to establish the link between the Web Application and the JPA Business Service yourself.
The JEE 5 way of achieving this consists of a few simple steps - on top of the JPA entity definitions:
Read the rest of this entry »
Posted by Lucas Jellema in J2EE/Java, Java, Java & (10g)AS, Oracle, Web | No Comments »
December 5th, 2008 by Alex Nuijten
For the last two days the AMIS 7Up Workshop took place in our office in Nieuwegein. The training consists of two SQL and another two days of PL/SQL. During the first two days a lot of SQL subjects are reviewed.
One of them is Subquery Factoring, better known as the "WITH clause". Subquery Factoring lets you assign a name to a subquery block. Let me show you a small example:
SQL> with ordered_emps as
2 (select ename
3 , job
4 , sal
5 , deptno
6 from emp
7 order by ename
8 )
9 select *
10 from ordered_emps
11 ;
Read the rest of this entry »
Posted by Alex Nuijten in Database, Devel. + PL/SQL tools, KC SDPL, Oracle | 2 Comments »
December 4th, 2008 by Lucas Jellema
ADF 11g Rich Client Components have a facility called the Change(d) Indicator. The changed attribute is specified using a Boolean value or expression (typically the latter). When the expression evaluates to true, a visual indication is rendered on the component that signifies to the user that the item’s value has changed. While we can use this indicator in any way we see fit, a logical use case would be to highlight with this indicator any field that has been updated as a result of a partial page request/refresh - the AJAX style immediate update of portion of the page as a response to action by the user.
For example: when the temperature is entered in the Temperature Fahrenheit item (or changed using the Spin Controls), an auto submit is performed that in turn leads to an update of the Temperature Celsius item. Because of the changed attribute, the user can clearly identify the items that were automagically changed. Note: In this case we have used a custom skin that specifies another icon for the changed indicator (you will see the default icon later on in this article).

Read the rest of this entry »
Posted by Lucas Jellema in ADF & JHeadstart, General, J2EE/Java, Java & (10g)AS, Oracle, Web | 1 Comment »
December 3rd, 2008 by Peter Ebell
The other day, I was using the JDeveloper debugger to locally debug some code in an application that uses (and therefore becomes part of) an Oracle Coherence data grid. As it turned out, using step-by-step debugging in a JVM that is part of a Coherence cluster has significant impact on the rest of the grid. The other nodes see the node constantly alternating between being responsive and being frozen, and keep taking measures to ensure the "health" of the grid. As Coherence values "health" or better, "consensus" within the grid over response times, this regularly causes processing on the other nodes to temporarily stop as well.
To remedy this problem, I wanted to alter the "grid initialization" logic in my application to check whether the JVM is running in debug mode or not, and if so, to not do the grid initialization. I checked the java command line with which JDeveloper runs an application in debug mode, and found that there is a JVM argument "-Xdebug" that is indicative of this fact. But as this is not a "custom argument", i.e. it does not follow the "-Dname=value" syntax, you won’t be able to obtain this argument at runtime using System.getProperty().
Read the rest of this entry »
Posted by Peter Ebell in AMIS, J2EE/Java, Java, Java & (10g)AS, KC Technical Architecture, KC Web/Java | 2 Comments »
December 3rd, 2008 by Johan Tuitel
In a project where i am working on, we needed to show an image and the image should be change when a user would like to do that. For that we need to hava an attribute in a table called photo and it has to be a blob. See below:

We have now a photo attribute as a blob, the next thing we need to do, is to make an entity with a photo attribute. The entity is called Person and has a byte[] variable called photo. See below for an example:
Read the rest of this entry »
Posted by Johan Tuitel in Databases, General, J2EE/Java, Java, Java & (10g)AS, Oracle, Web | No Comments »
December 2nd, 2008 by Marco Gralike
For those who are interested, here the presentation and the demo scripts.
During the presentation, I made use of an Oracle version 11.1.0.7.0 database on Windows XP. If using an Windows Vista machine, be aware that you need an extra security update from Microsoft MSDN while using WebDAV. Details are described in the Oracle 11g XMLDB Developers Guide.
The database was created using the Oracle Database Configuration Assistant. The template used in DBCA was the fullblown sample database including all demo schema’s.
Access to internet and/or a local RSS feed from a website was used for the DBUri demonstrations. I wasn’t sure if I had the luck of actually having an internet connection, so I had also created an local wordpress site running on Xampp-lite as a backup.
HTH

PS.: Thanks to those who helped me to fill in some blanks and/or pushed me into finding a solution the XMLDB way, like Dimitri, Anton, Kieth, Laurent and also those giants who allowed me to stand on their shoulders, like Mark and Tom.
Posted by Marco Gralike in General | No Comments »