It’s been a while since the last installment of ADF BC Tuning, but it’s time to start it up again. I’ve already posted tips for tuning entity objects, associations, view objects (in three parts), and view links, so now, let’s turn our attention to the last of the major business components: application modules.
Like the poltergeists, I’m baaack. I’m back to my usual health, and while I’m still pretty horribly snowed under, I think that enough of the worst of it is over that I can generally commit to my “Updates Mondays” schedule again. This has been a *long* hiatus (over 6 motnths), and I’m very glad to be back among the lang of the living. I’ve missed this blog and the ADF community generally.
Although I plan to get back to the ADF BC Tuning series soon, I want to use this post to announce two things: The first piece of software I’m releasing on this site and my public (that is, not just as an audience member) at ODTUG Kaleidoscope, which will be next week in Monterey, CA.
First, the software. This is actually related to one of the talks I’ll be giving at ODTUG, and tangentially related to another. But even if you aren’t going to the conference, I hope you’ll find it useful. It’s an extension of the ADF BC framework that allows you to create the following 100% declaratively:
- Entity object definitions (including support for optimistic or pessimistic locking and Refresh After… settings) that use Package APIs instead of DML
- View object definitions (whether entity-based or not, and including support for query parameters) that use Package APIs instead of SELECT statements
- Associations and view link definitions involving the above
You can get the framework here.
At ODTUG, I’ll be participating in the following:
- Tuesday, 10:30-12:00, in Regency Ballroom I: I’ll be delivering the paper, “Package-Based ADF.”
- Tuesday, 2:45-3:45, in Grove: I’ll be delivering the paper, “Extreme Reusability for Oracle JDeveloper and ADF.”
- Tuesday, 5:15-1:15, in Windjammer II, III & IV: I’ll be participating in the Sundown Session- Middleware and SOA.
- Wednesday, 1:30-5:15, in Cyprus III: I’ll be on a panel, “A Guide to Fusion Web Development with JDeveloper 11g,” with Peter Koletzke and Duncan Mills.
Hope to see you there!
This is going to be a shortish post, because most aspects of tuning view links are similar to tuning associations. For example, in addition to affecting how new rows appear in view object instance result sets, view link consistency affects how new rows appear in view link accessor-returned rowsets, and you can use similar techniques to manipulate these accessors that I told you about for manipulating association accessors. And view links, like associations, can maintain accessor rowsets, with the same advantages and disadvantages of doing so.
But there’s one serious issue that comes up for view links that doesn’t come up for associations: Controlling view link query execution time. This can have such an amazing affect on dealing with bottlenecks in application performance that I’m surprised it isn’t discussed more frequently.
Continuing on from the last post, we’re looking at ways to tune ADF view objects for optimal performance and resource management.
In most applications, the user needs to be able to scroll through data both forwards and backwards–to return to a previous row in addition to simply being able to scroll forward, or to find rows an earlier view row after finding a later one. Because of this, by default, once rows from a view object’s query result are read into the view cache, they stay there. If your JDBC fetch size is 18, then initially, only 18 rows will be in the view cache, but when request rows outside the first 18, that number goes up to 36, then 54, then 72, and so on.
Now that we’ve looked at tuning entity objects and associations, we’ll turn to talking about tuning your ADF view objects for good performance and memory management. There’s a lot to say about tuning view objects (more than for any other business component, in my opinion), so I’m going to break this topic up over two posts. This week, we’ll discover the reasons for and against basing read-only view objects on entity objects, learn how to control how much data is fetched into the middle tier at one time (and how to optimize this for your particular case), and talk about what passivation of view objects is and how to control whether and how much of it happens. Next week, we’ll talk about query-level range paging, forward-only mode, and the spill-to-disk feature for handling very large caches.