Skip to main content

· 2 min read

Today I was helping a customer on a deployment issue...

The first question that I have asked is:

"Which version of OC4J are you using ?".

And he has no idea !

So let me give you some tips to know the version of Oracle components that you are using...

· One min read

Web Service Journal just publish an article 'Opening the Black Box of Integration' written by Mike Lehmann OracleAS 10g Product Manager.

Summary:

If you've been working with integration technologies for any length of time, you're well aware of the freight train of standards that has been careening through the industry during the last five years. These standards, particularly in the Web services space, are on the verge of doing to proprietary integration servers what SQL and J2EE standards did to database and middle-tier servers of days gone by.

· One min read

Rob,colleague of mine, pointed me to an article about "Evolvable Systems":

Why something as poorly designed as the Web became The Next Big Thing, and what that means for the future.

First of all this article is very interesting, but the whole site -that I did not know- is full of truth, and fun ! ( I love the one about blogs)

I invite you to bookmark http://www.shirky.com !

Thanks again Rob!

· 4 min read

I have been working on the JavaOne Oracle Demo Ground where I was demonstrating OracleAS Portal 10g. I also attend several sessions (EJB 3.0 & CMP Persistence, J2EE 1.4 Web Services, AOP) and Thomas Kurian and James Gosling keynotes.

Also Tuesday afternoon I have been on duty on the Oracle Pod in the Apple developer conference, where I was demonstrating Oracle RDMS and JDeveloper 10g.

JavaOne

Oracle had a very nice and big demo ground, with the best location: in the front of the main entrance. The main theme was Racing Cars. Oracle organized racing contest using Sony Play Station with Gran Turismo 3.

The 10 stations demonstrated the same application that recall the main theme since user can create easily a new racing team. To summarize, we have developed a J2EE 1.3/1.4 application using ADF and POJO (Toplink) but also we integrated JSF for the view, Web Service call and integration with business process using the new Oracle BPEL Process Manager. (Oracle announced the acquisition of Collaxa).

On the Portal station, the demo showed how easy it is to integrate existing MVC application(Struts, ADF, ...) using the Oracle JPDK. Portal teal also built a nice demonstration that shows the same portlet -business logic and view- developed using proprietary APIs (JPDK) and standard based implementation (WSRP & JSR-168). Lot of people stop by the portal pod, and I was pleased with the quality of the questions:

  • Portlet Standards: Oracle provides a JSR-168/WSRP container but also a Developer Preview of the OracleAS 10g Portal that allows you to register and executes WSRP based portlet.

  • Struts, ADF, ad JSF integration: The Oracle PDK provides a Struts integration based on extension of the Struts Tags and has a specific Portlet Renderer.

  • Web Services & Portal: OmniPortlet and Coded Portlets allow developer to easily integrate Web Services into Portal.. and for example it is easy to create a portlet that will kick-off a Business Process that is running inside the Oracle BPEL Process Manager.

Linda DiMichel's session about EJB 3.0 was a big one, the room was packed. EJB is taking the good path. Simplification of the objects no need to multiply the artifacts and deployment descriptors: EJB 3.0 will use Java annotations. 3.0 will use POJO -Plain Old Java Objects- and allow native SQL. This is just a very short summary of the new spec that looks very very good ! (and similar to what Toplink is doing for years)

AOP was also on of the think I wanted to see during this event. I was really pleased by the AOP Panel of Wednesday afternoon. James Gosling, Graham Hamilton, Cedric Beust and Gregor Kiczales presented and discussed AOP in general and AOP in J2EE/Java in particular. My interpretation of the whole discussion is:

Everybody thinks that AOP is interesting, and will make code cleaner; but we have a lot to do to simplify the development. Like Cedric and James said, I am "conflicted" about AOP, and I think the reason is because we see the benefits of AOP in simple case such as logging... But harder to implement cleanly when the aspects are complex such as authentication/authorization or persistence. The Java community still need to work on this to be sure that developers will develop better code; AOP will give it, just have to find the good way ! I have also watched Alex Vasseur and Jonas Boner's session about AOP and J2EE, mainly focus on AspectWerkz. I really liked the paper with lot of demonstration that show simple and concrete example of AOP within J2EE container.

Like lot of us I will continue to invest into AOP and experiment it within the J2EE world. James Strachan - JSR 241 Lead- session was also a very popular one. This session introduced the Groovy Programming Language that leverage the Java Language but using a concise and object oriented scripting language. I will not detail the content of groovy here, it will be better for you to take a quick look to the Groovy Web Site knowing that you can download the language and start to develop script with it.

Apple WWDC 2004

I was not able to attend any session... not event Steve Job's keynote. But I worked on the Oracle demo pod Tuesday afternoon.

We had 2 dual G5 with 'old' cinema displays -hope that next year we will have the 30 inches display!-, these machines were used to run Oracle 10g database and JDeveloper, currently available to developer, you can download them from OTN.

But the big news is the fact that these products will be production on Mac OS X soon:

  • Oracle 10g server production in fall

  • Oracle 10g JDeveloper production in September

· 2 min read

OmniPortlet provides to page designer an easy and powerful way to publish content from different data sources. One of the data source is a SQL data source that allow you to connect to a relational database using JDBC. Obviously you can enter any SQL statement, but you can also consume a REF CURSOT returned by a procedure.

That is really interesting if you want to add business logic to your data,or have to set some specific code before the execution of the query.

To to it you have to create a procedure that has the first parameter the return a ref cursor: procedure get_employee_for_dept(p_ref_cursor out ref_cursor, p_dept in number);

Here a complete package based on the SCOTT sample schema:

 create or replace package EMPLOYEE_API
as
-- create a ref cursor type that will be return to the consumer
type ref_cursor is ref cursor;

-- return in the p_ref_cursor the list of employees for the department p_dept

procedure get_employee_for_dept(p_ref_cursor out ref_cursor, p_dept in number);
end;
create or replace package body EMPLOYEE_API
as
-- return in the p_ref_cursor the list of employees for the department p_dept
procedure get_employee_for_dept(p_ref_cursor out ref_cursor, p_dept in number)
as
begin
-- open the cusor based on the emp table

OPEN p_ref_cursor FOR
SELECT * from emp WHERE deptno = p_dept;
end;

end;

In the Statement field of the OmniPortlet SQL data source you can now enter:

call EMPLOYEE_API.get_employee_for_dept('10')

Enjoy OmniPortlet !

· 2 min read

Some portlet developers have hard time to set up a correct environment to use invalidation based cache with portlets. The summary is often:
"it is working with the PDK Example provided in Oracle 9iAS but every time that I want to do it myself from Oracle JDeveloper or a stand alone OC4J the portlet is not cached !"

· One min read

I had some questions about the limitation to 5 columns of the OmniPortlet tabular layout. Here is a tip to add more columns to this layout:

  1. backup the current OmniPortlet provider.xml /OC4J_HOME/applications/portalTools/omniPortlet/WEB-INF/providers/omniPortlet

  2. You can now open the file, and look for the tag <dataField

  1. You can add new fields, by copying the existing <dataField> tag and change the value of the <name> and <displayName>
<dataField class="oracle.webdb.reformlet.definition.DataFieldDefinition">
<name>Field6</name>
<displayName>Column6</displayName>
<description>Field6</description>
<text>##column##</text>

<alignment>left</alignment>
<displayAs>hidden</displayAs>
<type>linebreak</type>
<font>Arial.3.Plain.None</font>

<color>#000000</color>
<style>none</style>
<styleType>custom</styleType>
</dataField>

The same logic could be used to add parameters or events to the OmniPortlet.