Dive into Oracle ADF

Send me a mail
 Dive into Oracle ADF   Click to see the XML version of this web page.   (Updated: 2/3/2008; 8:13:02 PM.)
Tips and tricks from Steve Muench on Oracle ADF Framework and JDeveloper IDE

Search blog with Google:
 

Search BC4J JavaDoc:
 

July 2003
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Jun   Aug

Get Firefox!

Wednesday, July 23, 2003

JDeveloper 9.0.3.2 Now Available on OTN

You can consult the list of bugs fixed by this maintenance release, and visit the JDeveloper download page to get the software.


9:14:24 PM    



"Do you know of a good JSTL Quick Reference?"

Since JDeveloper 9.0.5 supports JSTL, the JSP Standard Tag Library, I've been playing more and more with it. JSTL takes a number of good ideas that originally emerged in other tag libraries as well as some XML technologies like XSLT, and brings a standard set of tags to the JSP developer to accomplish routine tasks. I fiddled with some of the looping and conditional tags to produce a less-than-awe-inspiring sample page like:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<html>
  <body>
    <form action="untitled.jsp">
      <c:choose>
        <c:when test="${not empty paramValues.id}">
          <c:forEach var="x" items="${paramValues.id}">
            <c:choose>
              <c:when test="${x == param.sel}">
                <input checked type=Radio name="test" value="<c:out value='${x}'/>">
              </c:when>
              <c:otherwise>
                <input type=Radio name="test" value="<c:out value='${x}'/>">
              </c:otherwise>
            </c:choose>
            <c:out value="${x}"/><br>
          </c:forEach>
        </c:when>
        <c:otherwise>You didn't supply any id parameter values.</c:otherwise>
      </c:choose>
      <input type="submit" value="Send">
    </form>
  </body>
</html>

Given a URL like untitled1.jsp?id=5&id=6&id=10&sel=6 this would produce a dynamic radio group like:

( ) 5
(*) 6
( ) 10

by iterating over the String[]-value of the id parameter {"5","6","10"} with the radio button selected if its value equals the value of the sel parameter. If no id parameter is passed, a conditional message appears saying so.

Since for a few years I was a member of the W3C XSL working group, it's nice to see that features like <xsl:for-each> and <xsl:choose> struck folks as useful enough to be emulated when designing JSTL.

In my experimentation with it, I'm finding this JSTL Quick Reference a handy reminder for the new syntax. Thought folks might want to bookmark it, in case it might come in handy in the future. I haven't read any JSTL books yet, in particular the one from which this quick reference was taken, but in the interim I'm happy they decided to make this appendix available as a resource on the web.


6:30:01 PM    


"Is the BC4J persistence layer replaced by TopLink in JDeveloper 9.0.5?"

No, we actually opted for a different strategy that we think will make the broadest number of developers happy, without changing what already works well in the BC4J core. The work we've done for 9.0.5 will make it easier to include TopLink-based business services as part of an end-to-end application, something that's not possible in JDeveloper 9.0.3 or 9.0.4. 

The focus of our Oracle ADF work for JDeveloper 9.0.5 has been on refactoring our existing frameworks to be more flexible and pluggable. There were two driving reasons for this:

  1. In existing JDev releases we have Swing clients, JSP clients, and UIX clients all using different data binding "plumbing" and different design time experiences (even while they were all talking to the same underlying BC4J application module component).
  2. We've had a number of customers ask us if it was possible to couple our data binding and controller technologies with existing business services they've implemented (using a number of different solutions for persistence, including TopLink, but not exclusive to that).

What we've done for JDeveloper 9.0.5 is:

  • Unified the data binding infrustructure so all client types can operate in a consistent way and share a consistent design time experience, independent of the backend business services that provide the data they are binding to
  • Opened up the choices for implementing your business services "back end".

Making these changes allows customers to choose what technologies they prefer for implementing their backend business services. We believe this choice will allow an even wider audience of Java developers to take advantage of Oracle's J2EE framework because it will now be possible to mix and match framework added-value features with existing decisions and/or technology preferences their companies/teams might have already formulated.

The typical customer who loves TopLink is one that has already invented (or in any event prefers to write) their own in-house solution for implementing an overall application infrastructure and who basically is looking for help for just the persistence aspect. TopLink gives them an advanced persistence architecture for their in-house application infrastructure. The Oracle TopLink mapping workbench team has worked hard to integrate their functionality into the JDeveloper environment for the 9.0.5 release, so customers building apps with Oracle ADF and TopLink can do so with a single tool.

On the other hand, the typical BC4J developer is looking to avoid having to design, implement, debug, test, and maintain their own J2EE application infrastructure. They want to make maximal use of all application-building features that we can supply them with. This is the category that now more than 1500 internal Oracle Applications developers in the E-Business Suite division fall into. The fact that in the many years that Oracle Applications has been using BC4J we haven't built up a long list of additional O/R mapping functionality that their applications require, tells me that the BC4J persistence layer has hit the 80/20 (or 90/10) sweet spot for business application developers who want to exploit the power of SQL pretty well.

In 9.0.5, we can now accommodate many permutations of technology choices with a single tool and a common data-binding and design time environment for the user interface layer. The development environment even can tailor itself around the technology choices that you prefer. We think that's pretty cool.

Net net, customers will have improved productivity, with choice. We will keep doing our best to make sure that we continually improve our more declarative building blocks like ADF Business Components, without forcing people to use them if they want to plug in alternative solutions into their end-to-end application.


5:47:21 PM    


Would appreciate user feedback on this issue...

You can send me your thoughts on this at steve.muench@oracle.com

One key decision we have to make before production of JDeveloper 9.0.5 later this year is -- now that we have the new WYSIWYG visual JSP editors, and an enhanced "data binding" palette that lets you drag and drop tables, input forms, and individual bound controls to your pages -- what the role of the existing "Complete Application" wizards and their corresponding "Page at a Time" wizards.

Briefly, these are the wizards that crank out JSP/uiXML pages with browse, insert, update, delete, search functionality based on the view objects in your application modules. We currently offer a version to create a "Complete Application", as well as narrower-focus wizards that create just a browse page, a browse-and-edit page, etc.

I know that people use these pages to generate a sample app to study, but realistically, do you use these wizards as part of your daily development routine? Or do you mostly build up your pages a page at a time using the JSP editor, leveraging the component palettes and the tag insight -- and presumably the ever-handy copy/paste operation where applicable -- to build your pages?

Thanks for any comments on what real-world use of these "Complete Application" and "Page at a Time" wizards you use.


9:27:27 AM    


© Copyright 2008 Steve Muench.