JDeveloper / ADF 11g Production Now Available

(author unknown) | Oct 7, 2008 13:50 -0600

The production release of JDeveloper / ADF 11g (release 11.1.1.0.0 build 5156) is now available on OTN from the JDeveloper OTN Home Page, where you'll also find pointers to other resources like new demos, tutorials, the New Features List, and the production ADF 11g Documentation set.

You'll find important information in the Release Notes, so please don't skip reading them.

A new FAQ document anticipates key questions you might have about the new release.

I've updated the Migrating the SRDemo 10.1.3 Sample to ADF 11g migration whitepaper for the production release.

I've also produced a how-to document which explains a shortcut for Simplified ADF 11g Application Credential and Policy Migration to Standalone WebLogic Servers.

Enjoy the new release. Please report any feedback or issues in the JDeveloper discussion forum on OTN.

ADF Taskflows & BPM & UML

Nathalie Roman | Oct 7, 2008 13:30 -0600
You've read about the ADF Methodology Group that was founded for the masses and the group is still growing and the topics are evolving.

More information regarding the ADF Methodology can be found on the Oracle wiki page.

Today I've added some content regarding a definition on ADF Taskflows, BPM, UML, BPEL, etc. and especially for which purpose these technologies can be used.

On the wiki-page you will find more information regarding when and why I would use these kinds of methodologies and the benefits or drawbacks I find when using them.

Feel free to add comment, add suggestions, add your own approach, etc. Looking forward for new ideas!

That said aside, our Google group is also worth reading in the meantime, you can check it out here.

Overview of JAX-RS 1.0 and Jersey extensions.

Gerard Davison | Oct 7, 2008 09:50 -0600

Good overview of JAX-RS 1.0 and hopefully in a few days one for those extensions that are part of Jersey and not part of the specification yet.

JDeveloper 11 goes production, horrah!

Gerard Davison | Oct 7, 2008 07:30 -0600

Finally you can see what we have been up to all these years in a full production version. It appears that the issues with the download page that were seen earlier today have been fixed.

This version is built on top of the very new Weblogic 10.3 so you get more toys for your money. Collateral for 11 should start to pop up on OTN in due course.

One final point, JDeveloper now comes as an installer. So run the jar file, don't try to unzip it.

JDeveloper 11 production is here - Keep our browsers pointing to OTN

Frank.Nimphius | Oct 7, 2008 07:10 -0600

After more than two years today seems to be when JDeveloper 11 production sees light of day. All OTN staging seems to work okay and the release should appear ready for download by around 9:30 am PST (which is 5:30 pm GMT) on the JDeveloper home page on OTN http://www.oracle.com/technology/products/jdev/index.html.

You have the option to download either an executable or a jar file, both starting off the JDeveloper WLS installer. For those using the JAR file, make sure you have a minimum of JDK 1.6_5 in the path before issuing the

java -jar jdevstudio11110install.jar

The installer will come up shortly after leading you through all the installation steps, finishing with a ready-to-go completely configured JDeveloper 11 / WLS 10.3 environment. The major change in the production release, compared to the Technology previews is that WLS replaces OC4J.

When you hit the run command on a web page, this will start off WLS the same way as you are used to have it with OC4J. To access the WLS configuration console - once the server is started - issue localhost:7101/console in your browser and connect as weblogic/weblogic

Important: Now that we are production, the OTN forum to use for JDeveloper 11 related questions becomes http://forums.oracle.com/forums/forum.jspa?forumID=83, which means we are back to a single forum (one that rules them all ;-) )

Please make sure that you flag your question with the version of JDeveloper you post the question for. This makes it easier for all of us who answer questions.

Frank

IT-eye - JDeveloper 11 is available for download…

Andrej Koelewijn | Oct 7, 2008 05:30 -0600

But due to javascript errors i can’t download it. Not sure what is causing this, maybe some javascript files that don’t get through the firewall? Or maybe some simple javascript coding errors. Is it my browser, is it the page? Try it here: JDeveloper 11g download.

JDeveloper download javascript errors


Permalink | No comments | del.icio.us | Technorati | digg | dzone | StumbleUpon | Oracle, JDeveloper

Using Conditional Exception Breakpoints to Exclude One Exception Subtype

(author unknown) | Oct 7, 2008 05:30 -0600

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.

JDeveloper 11g is production!

Just noticed that the long awaited JDeveloper 11g is now listed on OTN: http://www.oracle.com/technology/software/products/jdev/index.html

identity checks with JavaScript

matthiaswessendorf | Oct 7, 2008 01:10 -0600

Every now and than, somebody asks why I am sometimes using three equal signs (===) instead of two (==), when comparing values.

Simple answer is, that I am interested in the identity (type and value) instead of only the value.

Some code:


alert(2 == "2");
alert(2 === "2");

The first one returns TRUE, because the value is equal. But not their types (number vs. string), therefore the second return FALSE.

      

ADF Code Corner Internet TV is here !

Frank.Nimphius | Oct 6, 2008 10:40 -0600

How to blog about complete end-to-end development processes in JDeveloper without getting lost in writing ?
How to blog about functionality that as a topic is too short to write up ?

The solution is Internet TV, or stream by demand (you name it). In JDeveloper Product Management we use Camtesia for recording our online demos and I think it is a good format to use for the new ADF Code Corner Intern TV as well. So it is not really Internet TV, but the content is narrated and the demos show the flow as good as possible within 5 minutes (which is the max. length I defined for the code corner samples).

The first recording is a demonstration of an OBE I am creating for a partner training that Shaun O’Brian in our team works on. It shows the creation of bookmarkable view activities in an unbounded taskflow.

[Watch It]

Frank

Example of ADF Web App Using ADFBC Component Substitution

(author unknown) | Oct 6, 2008 05:00 -0600

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.)

The Case for Canonicals

Jan Kettenis | Oct 6, 2008 04:00 -0600
You might have heard people talking about a "Canonical Data Model" or CDM for short. You might have even heard the rumour that having a CDM is critical success factor in achieving the true benefits of a Service Oriented Architecture. But in the meantime you still have to encounter the first situation in which it actually is being used. Is a CDM really a must-have or just another buzzword?

First let me try to explain what a CDM actually is, apart from just being one of the integration design patterns. In short you could say that a canonical data model provides a generic view on the structure of data that systems deal with, like for example a generic concept of what a Customer is, what attributes it should have and the data types and formats of those attributes are.

It might surprise you that having a common view of an entity like "Customer" often is far from common practice. Imagine a big organization like a bank having many systems with different purposes, because of merges often from different companies. Such an organization can easily have as many definitions in their data dictionary of "Customer" as they have systems that deal with customers.

Now what if such an organization needs to integrate all these systems with SOA using XLM transformations for that? If there are N systems to integrate, than in principle there are N * (N - 1) mappings possible for each type of Customer. In case of 4 systems that need to exchange customer data, that already means 12 mappings, as you can see in the following picture. But if you define one generic definition and map to and from that definition, than the maximum number of mappings are 2 * N. In case of 4 systems that means only 8.


A larger bank easily has hundreds of applications with dozens of different definitions of "Customer", let's say 30. Then the difference is 870 versus 60! And that is only for Customer, and there are plenty of other entity types that needs to be exchanged as well, like Account, Address, etc. You get the picture?


So the incentive to use the Canonical Data Model design pattern, is to reduce the number of mappings and with that the inter-dependency between systems, the complexity of the overall integration and, last but not least, the maintenance of all that. For larger organizations this can make a huge difference.

Having said all this, it probably never is the case that all systems need to integrate to each other, let alone that this all the time requires a two-way mapping of every entity involved. To know if an entity should have a definition in a CDM, it depends in how many mappings it will be involved in. When there are more than three systems that all need to exchange an entity in a bi-directional way, than a canonical definition of the entity starts to make sense.

The case against canonicals is that in some organizations it might prove to be far from trivial to get a common view of how the generic definition of a specific entity should look like.

JAX-RS / Jersey targeted for the 13th of October?

Gerard Davison | Oct 6, 2008 03:40 -0600

Based on a quote from Paul Sandoz JAX-RS / Jersey goes production on the 13th. As noted in my previous post there are still some work aroundable issues; but it will be nice to have a library that is claimed to be production quality.

Extreme Reusability, Part II

Avrom | Oct 6, 2008 02:00 -0600
Last week, I introduced the ADF development methodology I'm proposing, "Extreme Reusability," articulated its goals, and discussed the techniques that are critical to the methodology. This week, I discuss the actual development cycle prescribed by the methodology.

JDeveloper and SubVersion

Eric Marcoux | Oct 5, 2008 07:20 -0600
I am part of the ADF Methodology group and there are very interesting discussions going on there on their Google Group. One of the things that has recently been discussed, is which version of SubVersion is supported in JDeveloper. Here is what has been said regarding this question that I found interesting to share with the community here :

JDev 11g is an SVN 1.4 client;

JDev 10.1.3.3. is a 1.4 client.

JDev 10.1.3.0.4 is an svn 1.3 client;

Be carefull also; your developers should all use the same version of the SubVersion client, if you try to mix client SubVersion versions (ex.: some developers using version 1.4 and others 1.5), it may cause problems to your repository apparently.

JHeadstart Forms2ADF Generator Online Demos

(author unknown) | Oct 5, 2008 05:00 -0600

The JHeadstart team posted links to new online screencast demos of the Forms2ADF generator functionality. Their downloadable JHeadstart Developer's Guide [pdf] covers the Forms2ADF functionality for more details. The JHeadstart product home page on OTN has been recently updated with links to information on their upcoming 11g release as well. Check it out.

Multiple LOV’s per Attribute in JDeveloper 11g

During OOW 2008 I have attended Steve Muench talk about new features in ADF Business Components available in 11g release - Oracle ADF: New Declarative Validation, LOV, Search, and Services Features. Those features will be available in Production release, announced to appear this month. However, Oracle ACE Directors already have access to production release candidate - JDeveloper 11g Release Candidate for ACE Directors, so I'm able to test those new features.

Very imporant new feature for me - possibility to define multiple LOV's per one attribute. Previously it was possible to have only one LOV defined in Model layer per attribute. In this post I will describe how it works, based on mentioned Steve Muench presentation, and will publish sample application I have developed - LOV_Multiple.zip. You will not be able to run this sample in TP4, only in production when it will be available (I hope very soon).

My sample is based on HR schema, it contains one main View object - EmployeesView and two read-only View objects for LOV's - DepartmentsView and DepartmentsEuropeView. Those two LOV's are based on different SQL statements:


With multiple LOV's per attribute feature, we can use now two or more View objects with different SQL statements for the same attribute. For example, basic SQL statment in DepartmentsView, returns all departments:


And SQL statment in DepartmentsEuropeView, returns departments only from Europe:


Here is a sample screen, where you can see multiple LOV's per attribute defined:


I have defined in this sample, two LOV's for DepartmentId attribute - LOV_Department and LOV_Department_Europe. There is List of Values Switcher attribute defined - lovAttr. This attribute returns LOV name to be used, I have created it as Transient attribute in Employees View object. In its getter method I'm doing a check - if current region is Europe I'm using LOV only with European departments, otherwise default LOV with all departments is used:


On runtime, if employee is based in European department - DepartmentId LOV will use DepartmentsEuropeView and will list only departments from Europe:


In other case, default LOV will be used with all available departments listed:

Lookup Oracle database queue (AQ) with jndi and LDAP

Edwin Biemond | Oct 3, 2008 12:30 -0600

In my previous blog entry I explained how you can register tnsnames entries and database connections in OpenLDAP, this blog entry goes a little further. This blog explains how you can register Oracle database queues (AQ) in ldap and use them with JNDI. I don't use OID because the product takes too many resources. I just want to lookup some queues. So I downloaded openldap and create the oracle ldap schema and add this to openldap. Now I can register oracle object in LDAP and use it in java.

Here you see how my LDAP tree looks like. Click here to get the LDIF file
SCOTT.TEST is a queue called test in the scott oracle schema. SCOTT.TEST_TABLE is the queue table of the test queue.
The LDAP attributes of the queue entry and this queue has a pointer to the queue table (first attribute)
The queue table attributes

The database connection registration which you can use for the connection factory
Here is the plsql code to create the queue and queue table

begin
sys.dbms_aqadm.create_queue_table(
queue_table => 'TEST_TABLE',
queue_payload_type => 'SYS.AQ$_JMS_MESSAGE',
sort_list => 'PRIORITY',
compatible => '10.0.0',
primary_instance => 0,
secondary_instance => 0,
storage_clause => 'tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited )');
end;
/
begin
sys.dbms_aqadm.create_queue(
queue_name => 'TEST',
queue_table => 'TEST_TABLE',
queue_type => sys.dbms_aqadm.normal_queue,
max_retries => 5,
retry_delay => 0,
retention_time => 0);
end;
/

The java code where we do a lookup of the database connection to create the connection factory and do a lookup to create a queue.

package jms2;

import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;

import javax.jms.TextMessage;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

//import oracle.jms.AQjmsOracleDebug;


public class jmsclient2 {

Hashtable env = null;
boolean envSet = false;
private QueueConnection connection = null;
private QueueSession session = null;
private QueueSender sender = null;
private QueueReceiver receiver = null;
private QueueConnectionFactory queueConnectionFact = null;;
private Queue queue = null;;


public void testRegistration() {
// AQjmsOracleDebug.setLogStream(out);
// AQjmsOracleDebug.setTraceLevel(AQjmsOracleDebug.AQ_ORA_TR6);
// AQjmsOracleDebug.setDebug(true);

env = new Hashtable(5, 0.75f);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL , "ldap://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL , "o=sgi,c=us");
env.put(Context.SECURITY_CREDENTIALS , "secret");

DirContext dirContext = null;
try {
dirContext = new InitialDirContext(env);

dirContext=(DirContext)dirContext.lookup("cn=ORCL, cn=OracleContext, ou=Services, o=sgi,c=us");
DirContext destctxCF = (DirContext)dirContext.lookup("cn=oracledbconnections");
DirContext destctxQF = (DirContext)dirContext.lookup("cn=OracleDBQueues");

queueConnectionFact = (QueueConnectionFactory)destctxCF.lookup("cn=SCOTT");
queue = (Queue) destctxQF.lookup("cn=SCOTT.TEST");

connection = queueConnectionFact.createQueueConnection();
session = connection.createQueueSession(true, QueueSession.AUTO_ACKNOWLEDGE);
connection.start();

sender = session.createSender(queue);
String xmlData = "1111";
TextMessage message = session.createTextMessage(xmlData);
sender.send(message);

receiver = session.createReceiver(queue);
TextMessage textMessage = (javax.jms.TextMessage)receiver.receive();
String xmlText = textMessage.getText();
System.out.println(xmlText);


} catch (NamingException ne) {
ne.printStackTrace();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}

public static void main (String[] args) {
jmsclient2 client = new jmsclient2();
client.testRegistration();

}
}


That's all.

(sorta) real-time updates, with Trinidad

matthiaswessendorf | Oct 3, 2008 06:50 -0600

The technology to ensure (sorta) real-time updates on your web app is called, COMET. This is a giant hack, basically. There are three common ways to actually implement it. Polling, Long Polling and Continuous connection, by using the forever frame pattern/trick. All of them of certain issues:

  • Polling: efficient for rarely changing items, but potentially long latency
  • Long Polling: Latency is the amount of time needed to make a new connection (see Jean-Francois Arcand’s blog).  But this is inefficient for extremely fast (multiple times a minute) event rates and  it means a heavy thread load on servers where each request is a thread, non NIO servers (see Jean-Francois Arcand’s blog)
  • Continuous connection (aka HTTP Streaming): Technical issues (including proxy problems). But this approach has the lowest latency. It also has some issues on none NIO servers, as long polling.

That said… So there are (some cases) where polling is OK…

The good news is, that Trinidad actually supports polling out of the box, by its poll component. Specify a certain ping interval, to ask the server for an update… but keep in mind, the more you ping the server, the worse the client and server performance.

At Oracle we support the continuous connection as well, as part of ADF Faces 11g (Rich Client Framework).

      

Oracle Open World - Oracle Forms Modernization - The Case of ZLM

Nathalie Roman | Oct 3, 2008 03:10 -0600
Tuesday I was able to participate in a co-presentation with Grant Ronald regarding Forms Modernization.

The audience was great and we had a lot of feedback regarding best approaches, best practices, ...
It was a great experience, especially my thanks go out to Oracle to make this possible !!!

You can download the presentation from our website.

You can find more information regarding the presentation on grants' blog as well!

For more Information regarding Forms Modernization.
For more information regarding BPEL and Web Services you can download presentations on our website or have a look in OTN.