 |
Tuesday, October 07, 2008 |
Today I was debugging a problem where I wanted to set an exception breakpoint for oracle.jbo.JboException to see what was the first ADFBC-related exception that was occurring. The only problem was that I did not want to stop for the oracle.jbo.NoXMLFileException (subtype of JboException) which the framework will throw when it can't find an optional file like the package XML file in the runtime classpath. Not knowing which subtype of JboException would be thrown, I didn't want to create a ton of different breakpoints for every possible subtype except for NoXMLFileException, so I tried to find a better way. Here's the solution I finally figured out.
I created an exception breakpoint for oracle.jbo.JboException, with a conditional breakpoint expression of:
!( _throw instanceof oracle.jbo.NoXMLFileException )
I got the idea about using the special _throw field because I noticed in the debugger "Data" window that an entry named _throw showed which exception had been thrown. Then I remembered something that a developer on the JDev IDE team told me once, which was "if you can see it in the Data window, you can reference it in a watch expression." So I tried it out, hoping that that maxim also held for the debugger's conditional breakpoint expressions. And it did!
In this way, the debugger avoids stopping if the exception happens to be of the NoXMLFileException subtype, but otherwise will stop for all other subtypes of JboException. I thought it was an interesting trick to share.
1:14:51 PM
|
|
 |
Monday, October 06, 2008 |
I've added example #131 that shows an example of an ADF Web application that is leveraging the ADFBC component factory substitution feature described in section 25.10 Substituting Extended Components In a Delivered Application of the ADF Developer's Guide for Forms/4GL Developers (and which illustrates the workaround to bug 6629321 that you'll need to apply if you try to use the component substitution in a web application.)
12:59:58 PM
|
|
 |
Sunday, October 05, 2008 |
 |
Wednesday, September 24, 2008 |
I've uploaded the slides for the OOW 2008 talk I gave yesterday on Oracle ADF 11g validation, LOV, search, and services features to my Recent Presentations page. If you were there in the room, thanks for coming!
Enjoy.
5:11:27 PM
|
|
 |
Friday, September 19, 2008 |
When I checked my Gmail inbox from the lobby computer at a hotel where I'm staying near Oracle headquarters yesterday, I was surprised to be greeted by the following completely redesigned GMail v2.0 user interface. I took a screenshot and mailed it to myself to capture what it looked like. Subsequent times I've checked my email since then the current look and feel showed up again so it seemed to be either a mistake or some kind of targeted preview that only lasted that one session. I didn't see anything about it on other blogs I follow, so I figured I'd post what I saw here...
UPDATE: Oops. I guess the computer where I was sitting had installed this Firefox "Stylish" extension installed with this user script to restyle Gmail. 
4:37:33 PM
|
|
 |
Saturday, September 13, 2008 |
I've been super-busy helping the rest of the JDeveloper/ADF 11g team get the product in shape for the show, so the blog's been a bit barren, but if you're planning to attend Oracle OpenWorld 2008 in San Francisco, stop by and say hi at one of the following times:
- Monday, September 22nd
- Oracle Demgrounds, JDeveloper/ADF Pod, 15:30 - 18:00
- Tuesday, September 23rd
- Marriot Salon 5, 13:00 - 14:00, "Oracle Application Development Framework 11g: New Declarative Validation, List of Values, Search, and Services Features"
- Oracle Demgrounds, JDeveloper/ADF Pod, 16:00 - 18:00
- Wednesday, September 24th
12:03:27 PM
|
|
 |
Monday, August 18, 2008 |
 |
Wednesday, August 06, 2008 |
Things are real busy around the "shop" with preparations for Oracle OpenWorld, ongoing work to continually improve the quality and polish of the JDeveloper/ADF 11g release, and efforts to help the many internal Oracle Fusion Applications teams working with pre-production releases of the ADF 11g tech stack.
Even so, after receiving numerous requests from external customers and internal teams alike, I finally carved out enough time to upgrade my dynamic JDBC credentials example for the 11g Tech Preview 4 release and have published example # 129 for download with a streamlined implementation that leverages a couple of new-in-11g features in the process.
Enjoy.
8:00:41 PM
|
|
 |
Thursday, June 26, 2008 |
I added a quick screencast to my JDeveloper / ADF Screencasts page that shows a simple example of how using the new AutoRefresh property for a view object in a shared application your application's shared LOV data can be asynchronously refreshed in the shared AM's middle tier cache whenever the database is updated. In the screencast I show performing an INSERT, UPDATE, and DELETE from a SQL*Plus window to underscore how the DB update can really be from any kind of client.
To try out the AutoRefresh feature yourself in the Tech Preview 4 release of JDeveloper/ADF 11g, you need to observe a few of the prerequisites:
- Must be running an Oracle 11g database
- It must have its COMPATIBLE parameter set to 11.1.0
- The DBA must have performed the GRANT CHANGE NOTIFICATION TO YOURACCOUNT
- Use it in the context of a web application
Enjoy.
7:16:37 PM
|
|
 |
Wednesday, June 11, 2008 |
Our curriculum team has published a new tutorial on Examining ADF Business Components New Features.
It steps you through creating model-driven cascading list of values, offers examples of using new calculated attributes and declarative validation features, and shows how to create a named view criteria
12:10:04 PM
|
|
 |
Thursday, June 05, 2008 |
 |
Saturday, May 03, 2008 |
Tim Dexter on the BI Publisher team blogs a glimpse of interesting work they are doing to provide more integrated support for building BI Publisher reports off data from the Oracle ADF 11g Fusion Tech Stack data layer components (in other words, ADF Business Components view objects). They plan to allow your ADF applications to instantly view report results or schedule them to view later.
11:34:27 AM
|
|
 |
Monday, April 28, 2008 |
A question came in today about how to get ADFBC to allow querying for the literal asterisk character. By default, the OracleSQLBuilder implements the CriteriaAdapter interface (involved in translating view criteria into SQL where clause fragments) by replacing any asterisk character in the view criteria operand string with a percent sign so that the end-user can happily use either '*' or '%' as a search wildcard character.
However, if your data happens to have literal asterisks in them and you want to perform a query like '%*%' to find all the rows where a particular field contains that asterisk, then the default implementation is not going to do the job.
To solve the problem, the simplest approach is to:
- Create a custom OracleSQLBuilder subclass that overrides the correctOprandLiteral() method and which returns the argument passed in instead of calling super.
- Configure the application module to use this custom SQLBuilder class instead
The code for the custom SQLBuilder class looks like this:
package project1; import oracle.jbo.server.OracleSQLBuilderImpl; import oracle.jbo.server.SQLBuilder; public class CustomOracleSQLBuilder extends OracleSQLBuilderImpl { protected String correctOprandLiteral(String restVal) { /* super.correctOprandLiteral(restVal) */ return restVal; } public static SQLBuilder getInterface() { return new CustomOracleSQLBuilder(); } }
The property to set in the configuration is named jbo.SQLBuilder and you set its value to the fully-qualified name of the custom SQLBuilder class you want to use.
Problem solved!
12:35:50 PM
|
|
 |
Thursday, April 24, 2008 |
 |
Thursday, April 17, 2008 |
 |
Wednesday, April 16, 2008 |
For the past few months I've been working hard on internal projects related to ADF 11g and our Fusion Applications teams who are early adopters of all the new features in this upcoming major release, so unfortunately I haven't had many cycles for the blog. We're working on fixing a short list of showstopper issues for releasing a Tech Preview 4 release of JDeveloper 11g for OTN, so look forward to that in the coming weeks.
11:58:04 AM
|
|
 |
Thursday, February 21, 2008 |
I've published example# 128 that shows a technique for synchronizing employee details when the user clicks on employee nodes in a Dept/Emp-based tree control.
7:49:53 PM
|
|
 |
Wednesday, February 20, 2008 |
I added example # 127 that shows one approach for tallying the number of changed rows (broken down into inserts, updates, deletes) in the current transaction. Enjoy.
5:46:19 PM
|
|
 |
Monday, February 18, 2008 |
 |
Wednesday, January 30, 2008 |
I just had a play in the 11g Technology Preview 3 release with our new support for TIMESTAMP WITH LOCAL TIMEZONE datatype. I created a table in a database at Oracle HQ in California called MEETINGS with a column named START_TIME of type TIMESTAMP WITH LOCAL TIMEZONE. From the ADF BC Tester running on my laptop in my home office, I inserted a meeting into the table with a start time of "29-JAN-2008 22:00:00" (i.e. 10pm CET). Using remote desktop, I used a machine in California to start a SQL*Plus window and query the table, and verified that the meeting row showed a START_TIME of 13:00:00 (i.e. 1pm PST). No code necessary. Should turn out to be a very useful feature for apps used by end-users in different timezones that need to be sure to correctly interpret time values in their own local timezone. We also now support the TIMESTAMP WITH TIMEZONE type as well, but the local timezone variant was the one I wanted to see to believe!
You can configure your ADF application's META-INF/adf-config.xml file to contain an XML fragment like this:
<user-time-zone-config xmlns="http://xmlns.oracle.com/adf/usertimezone/config"> <user-timezone expression= "YOUR EL EXPRESSION HERE" /> </user-time-zone-config>
And that EL expression will be evaluated to determine the timezone of the current user, otherwise it defaults to the timezone of the JavaVM. Of course, for testing you can provide an EL expression that is a constant timezone name.
12:40:35 AM
|
|
© Copyright 2008 Steve Muench.
|
|