Weblog

InfoWorld: Oracle SOA Suite rates “Excellent”

Today, I read on Oracle.nl the excellent news that the Oracle SOA suite is rated as excellent (average score of 8.7!) in a review by InfoWorld Test Center. This is a quote taken from Oracle.com:

“This is the most comprehensive product on the market for developing and securing most SOAs”

“Oracle SOA Suite meets or exceeds most needs for governance, security, insight, and optimization at a price that’s hard to beat”

“Hands down, the most comprehensive and easy to use product on the market today”

As IT-eye, we are now advising our customers to implement there SOA infrastructure with the Oracle SOA suite. Moreover, we are currently gaining real-life experience with the tools in the Oracle SOA suite in running projects for our customers. In the past, we also worked with 10.1.2 versions of the tools, especially the Oracle BPEL Process Manager. We now see that the new versions of the tools in the Oracle SOA suite are quite more mature than their ancestors. The InfoWorld review confirms what we already now: that we are advising our customers to use the best products to implement their needed SOA environment.

Free on-demand video lectures

This is really cool! Today, I bumped into the YouTube style site Videolectures.net. The goal of this site is to give you as a maven free access to lectures from the world’s leading scientists (I don’t know if they are really world-leading, but I believe them on their word). As far as I can determine, the lectures are mainly focused on mathematical and computer science subjects.

Because, I have an academic background (Master degree in Computer Science from the Utrecht University) and still interested in mathematical and computer science topics, I am really happy with this initiative. I am now able follow free lectures about topics I’m interested in.

How Much Will Your SOA Cost?

One off the elements in SOA projects is estimating the cost. In classical Designer/ Developer projects we use function points to estimate cost (#function points * hours per point). In our current SOA projects we are using our experience from earlier SOA projects and we are using Scrum.  The interesting point off Scrum is that the team makes a relative estimation off storypoints, use cases or requirements. After this relative estimation the storypoint, use case or requirement that is most clear is estimated into hours based on past experience. The rest is than calculed from that reference point.  This method is good emperical approach and is fun because we are using planning poker.

Today I found an interesting article on how much will your SOA cost from David S. Linthicum. His method is a good indication for the total cost. During the realization phase I will use scrum to determine the productivity of the team and to manage the expectations of the client.

Tackling web service security issues in a Oracle SOA environment

Since release 10.1.3, Oracle contains two flavors for tackling webservice security. In this posting, I want to introduce them shortly and explain in which situation they can be used best.

The Oracle SOA suite contains the Oracle webservice manager (OWSM) for managing services and to add policies to the services to enforce, for example, security. OWSM supports different XML security standards for authentication, authorization and XML decryption and encryption. OWSM uses gateways or agents to enforce the policies on the webservices. Agents run at the client or the server-side of the webservice and the gateway acts as a proxy for the webservice. Gateways can be used to enforce policies on webservices deployed outside the enterprise, where no agents can be used. OWSM also contains monitoring functionality to monitor the webservice activities, even alarms can be set to notify the appropriate persons when something is wrong with a managed webservice.

Less famous is the Oracle AS webservice security (OWSS). OWSS is used to enforce security policies on webservices running inside an OC4J container of the Oracle application server. OWSS used a JAX-RPC interceptor handler to intercept webservice requests that are send on the client and received by the webservice. The interceptor adds WS-Security elements for authentication, signing or encryption to the SOAP message and then forwards the message to the receiving web service. An interceptor on the receiving side decrypt, verify signatures and authenticate the web service message. Building webservices that uses OWSS for adding security can easily be done by using the Webservice Assembler tool provided by Oracle AS web services. The tool can be invoked from the command-line or from Ant in JDeveloper. Securing the web services can be done in JDeveloper by using the wizard or from in the AS console. OWSS contains support for many web service XML security standards, like WS-security, X.509 and SAML.

For now, I only have read documentation of both tools and played a little bit with OWSM. For as far as I can make a fair judgment now, I think OWSM is more suitable in large SOA environments where security policies are needed to be applied enterprise wide on services running everywhere. A tool like OWSM is a must in such large and complex SOA environments. In smaller SOA environments where there are running only a few services in a single OC4J instance, OWSS fits more to secure the services. OWSM would probably be a little bit overkill, because it also introduces more manage and monitor activities.

Before you are going to secure services with OWSM or OWSS, you have to ask yourself which parts needed to be secured, why it is needed to secure them, where the services needed to be secured and against who are the services protected. Answering these questions properly will give you a good insight in which tool is more suitable.

Tracking Scrum Project with Trac

Jeff Sutherland has a posting on his blog where he discusses using bug tracking tools to manage scrum projects. One of the bug tracking tools he mentions is Trac, which incidentally is the default bug tracking tool we use on the IT-eye project server virtual appliance. Jeff points to a Trac plugin which can be used to create a Scrum burndown chart in Trac: ScrumBurndownPlugin. He ends his posting mentioning that some significant enhancements will be coming out to the burndown chart plugin in the next 30 days.

On the ScrumBurndownPlugin page i noticed that it uses the TimingAndEstimationPlugin, which also provides fields for billing information. This is not very relevant for how we use scrum on our projects.

There’s another Scrum plugin on trac-hacks called ScrumPlugin. Instead of a burndown chart it provides a burn up chart, but the chart is created using a servlet and jfreecharts, complicating the installation procedure.

I hope we’ll soon have a good Scrum plugin for Trac.

Update:
We are currently using agilo for scrum. It provides a nice scrum dashboard in trac, with an easy way to administer time remaining, but it’s kind of buggy. The caching mechanism doesn’t work very well, so you get different charts with everyreload.

SCA v1.0 first specifications released

The OSOA collaboration released the new specifications of SCA 1.0

A short introduction from the OSOA collaboration:

“SCA and WS-BPEL are complementary with one another. WS-BPEL is a language for defining a business process, which can be invoked by clients and can itself invoke other services. These external interactions, together with the activities that may occur inside the process, provide a business orchestration view of a component. SCA, on the other hand, provides a compositional view of interconnection among service components. SCA does not in itself allow one to define business or application logic. This is left to the implementation languages. SCA does support the aggregation of business services without relying on application states. It models a birds-eye-view of the system that includes WS-BPEL processes and other components with which they interact. This overall view provides a convenient tool to manage the deployment and configuration of a system.”

Khanderao,Architect at Oracle made a nice post to explain a bit more about SCA.

Looking at the specs of SCA 1.0 and WS-BPEL 2.0, i think we can except some nice things in a new release of the Oracle SOA Suite.

Oracle ApplicationExpress 3.0 released!

Oracle released the new APEX 3.0 just few days back. The tool, formely called HTML DB has become a real mature rapid web application development tool. Easy in use and lots of nice new features.

Just a few of all the new features :

  • PDF Printing
  • Flash Charts (no more svg)
  • Drag and Drop item layout
  • Access Migration

To make development with APEX even more productive add-on libraries are being developed. Patrick Wolf is currently developing the ApexLib. The latest release 1.4 is integrating nicely in the new APEX 3.0

On our projects we use APEX not too often. But its good to see that it really helps on the ‘rapid’ part of developing applications. If you don’t want to get stuck on all the java-frameworks and don’t have the java-knowledge in-house, it’s the ideal tool for developing a web-application. With some html/plsql/javascript-knowledge you’re on the right way!

Big Multi Touch Screens

Some innovations seem to completely change the way we work and live. Transistors, pc’s, laptops, mobile phones, the internet. These are all innovations that take years to complete, but then surprisingly quick it’s hard to live without them. Today i hate to leave home without a mobile phone. What if my car breaks down, how do i get help? Same for internet. What do i do without internet? It almost feels like I’m cut off from the world. Where do you find your information without the internet? It has almost reached the point where information that cannot be found on the internet doesn’t exist. Why would you write an article for a magazine, when nobody can find it through google when they need it? An article on paper is useless. Almost…

Anyways, it’s always interesting to try and predict what will be the next technology you’ll be unable to live without in a couple of years. I think one of these is big multitouch displays. Combine the multi touch technology Jeff Han talks about in this video, and Apple is putting in the iPhone, with the ever growing flat displays, and you have something that will seriously impact the way we work. Something like this: Big Multi Touch Screen Video and Multi touch demo from Jeff Han on a Large Display.

It’s well known that group communication in front of a whiteboard is one of the most effective ways to communicate. That’s why scrum task boards and brownpaper session are so useful. Or drawing designs on a whiteboard. Or brainstorm sessions with a whiteboard. It facilitates the group thinking process. You can draw very nice diagrams with drawing tools like visio, but it’s not a good tool for interactive problem solving sessions. Same for ms-project. Good for documentation, but not a very good tool for problem solving.

What we need are tools that facilitate the group problem solving process. Problem solving consists of trying different approaches: sketching, discussing, erasing, redrawing, moving around, etc. So we need user interfaces and components which enable this kind of graphical information creation. You should be able to create some electronic post-its or index cards, move them around, and add some layers of ordering to these cards. One layer would order the cards in a matrix, another could be used to order the cards in a tree, and yet another would show the cards in a flow. The video’s also show some other examples like zooming and panning.

These components need to be able to translate unstructured graphical data to structured data on the fly, like tablet and pda convert handwriting to text. If you look at todays graphical applications like adobe illustrator, or visio, or some uml tools, they don’t feel very sketchy. The interface is too rigid, not aimed at problem solving, but at documenting.

A lot of the talk on user interfaces these days evolves around Ajax. But Ajax is a web ui approach, whereas these kinds of graphical interfaces are usually implemented as desktop applications. But it would be a shame if web applications couldn’t benefit from multitouch displays. So even web interfaces need to become more graphical. You could do it with ajax, but that doesn’t seem to be the most appropriate solution. Flex would be better, or WPF/e. Because of tablet computing microsoft has a lot of experience with touch displays. They probably have a lot of ui innovation in their labs which would be useful for multitouch displays. I’m not too confident about Swing for multitouch displays. Last time i looked Swing had about zero support for tablet pc’s. Although Denim proves java can be used. It might also help that Java has been opensourced. And then of course there’s Apple, which has been working on the interface for iPhone. And some people seem to think that Apple is already looking beyond iPhone: Apple’s multi-touch technology seen spawning “mega-platform”.

As the videos show, most, if not all, of what i’ve mentioned is possible and has already been implemented. It’s just a matter of time before multi touch screen will be on all walls in your office, and you’ll wonder how you ever lived without them. And then it’ll be interesting to see what new possibilities will develop. The first applications will probably just copy what we already know, like whiteboards, taskboards, brownpaper, and combine these with other known applications like videoconferencing. But the second generation will move beyond copying existing concepts. Let’s call it Multi-Touch 2.0…

Generating pdf in Oracle Webforms with plpdf

To generate a pdf file in webforms with the product pldpf (www.plpdf.com) you can use the following routines :

  • webform procedure exec_plpdf_report. Start generating to file, printer or screen.
  • database package plpdf_util.
PROCEDURE EXEC_PLPDF_REPORT
( p_repname varchar2
, p_destype varchar2 default 'CACHE'
, p_parlist plpdf_util.plpdf_parlist
)
IS
l_web_host CONSTANT varchar2(200) := '123.123.123.123:1234/pls/abcde';
l_printer CONSTANT varchar2(100) := 'xdc123';
l_dir CONSTANT varchar2(30) := '/tmp';

l_filename varchar2(500);
l_html_string varchar2(500);
l_output blob;
BEGIN

if p_destype = 'CACHE'
then
--
-- Html string. The parlist is split in maxl 10 parameters.
-- It has to be varchar parameters, because on the URL
-- no parlist kan be used.
--
l_html_string := 'plpdf_util.show_plpdf_output?p_repnaam='||p_repname;
for i in p_parlist.first..least(p_parlist.last, 10)
loop
l_html_string := l_html_string||'&p_par'||i||'='||p_parlist(i);
end loop;
web.show_document('http://'||l_web_host||'/'||l_html_string, '_blank');

elsif p_destype in ( 'PRINTER', 'FILE')
then
--
-- Generate blob en download to file
--
l_filename := plpdf_util.plpdf_report_to_file (p_repname, p_parlist);

if p_destype = 'PRINTER'
then
--
-- Print file
--
host('/usr/bin/lp -d '||l_printer||' '||l_dir||'/'||l_filename);
message('File is printed');

else -- FILE
message('PDF file is gegenerated : '||l_dir||'/'||l_filename );

end if;

end if;

END;
create or replace package plpdf_util
is

type plpdf_parlist is table of varchar2(200) index by binary_integer;

procedure show_plpdf_output ( p_repname in varchar2
, p_par1 in varchar2 default null
, p_par2 in varchar2 default null
, p_par3 in varchar2 default null
, p_par4 in varchar2 default null
, p_par5 in varchar2 default null
, p_par6 in varchar2 default null
, p_par7 in varchar2 default null
, p_par8 in varchar2 default null
, p_par9 in varchar2 default null
, p_par10 in varchar2 default null
);

function plpdf_report_to_file ( p_repname in varchar2
, p_parlist in plpdf_util.plpdf_parlist
)
return varchar2;

function writeblobtofile ( p_blob in blob )
return varchar2;

end;
/

create or replace package body plpdf_util
is

procedure show_plpdf_output ( p_repname in varchar2
, p_par1 in varchar2 default null
, p_par2 in varchar2 default null
, p_par3 in varchar2 default null
, p_par4 in varchar2 default null
, p_par5 in varchar2 default null
, p_par6 in varchar2 default null
, p_par7 in varchar2 default null
, p_par8 in varchar2 default null
, p_par9 in varchar2 default null
, p_par10 in varchar2 default null
)
is
l_output blob;
l_plsql_blok varchar2(1000);
begin

l_plsql_blok := 'begin :l_output := ' || p_repname||
case when p_par1 is not null then '( '''||p_par1||''' ' end ||
case when p_par2 is not null then ', '''||p_par2||''' ' end ||
case when p_par3 is not null then ', '''||p_par3||''' ' end ||
case when p_par4 is not null then ', '''||p_par4||''' ' end ||
case when p_par5 is not null then ', '''||p_par5||''' ' end ||
case when p_par6 is not null then ', '''||p_par6||''' ' end ||
case when p_par7 is not null then ', '''||p_par7||''' ' end ||
case when p_par8 is not null then ', '''||p_par8||''' ' end ||
case when p_par9 is not null then ', '''||p_par9||''' ' end ||
case when p_par10 is not null then ', '''||p_par10||''' ' end ||
case when p_par1 is not null then ')' end ||
'; end;'
;

execute immediate l_plsql_blok using in out l_output;

--
-- generate html output
--
owa_util.mime_header('application/pdf',FALSE);
htp.p('Content-Length: ' || dbms_lob.getlength(l_output));
owa_util.http_header_close;
wpg_docload.download_file(l_output);

end;

function plpdf_report_to_file ( p_repname in varchar2
, p_parlist in plpdf_util.plpdf_parlist
)
return varchar2
is
l_output blob;
l_plsql_blok varchar2(1000);
begin

l_plsql_blok := 'begin :l_output := ' || p_repname;
for i in p_parlist.first..p_parlist.last
loop
if i = 1
then
l_plsql_blok := l_plsql_blok||' ( '''||p_parlist(i)||''' ';
else
l_plsql_blok := l_plsql_blok||' , '''||p_parlist(i)||''' ';
end if;
end loop;

if p_parlist.exists(1)
then
l_plsql_blok := l_plsql_blok||' ) ';
end if;
l_plsql_blok := l_plsql_blok||' ; end;';

--
-- Generate plpdf output
--
execute immediate l_plsql_blok using in out l_output;

--
-- write output to file and return the filename
--
return plpdf_util.writeblobtofile(l_output);

end;

function writeblobtofile ( p_blob in blob )
return varchar2
is
l_blob blob;
l_blob_length integer;
l_out_file utl_file.file_type;
l_blob_position integer := 1;
l_buffer raw(32767);
l_chunk_size binary_integer := 32767;

l_dir CONSTANT varchar2(30) := 'FILE_UPLOAD_DIR';
l_filename CONSTANT varchar2(500) := 'pr_'||to_char(sysdate,'hh24misssss')||
userenv('SESSIONID')||'.pdf';

begin

l_blob := p_blob;

-- retrieve the size of the blob
l_blob_length:=dbms_lob.getlength(l_blob);

-- open a handle to the location where you are going to write the blob to file
-- note: the 'wb' parameter means "write in byte mode"
l_out_file := utl_file.fopen (l_dir, l_filename, 'wb', l_chunk_size);

-- write the blob to file in chunks
while l_blob_position <= l_blob_length
loop
if l_blob_position + l_chunk_size - 1 > l_blob_length
then
l_chunk_size := l_blob_length - l_blob_position + 1;
end if;
dbms_lob.read(l_blob, l_chunk_size, l_blob_position, l_buffer);
utl_file.put_raw(l_out_file, l_buffer, true);
l_blob_position := l_blob_position + l_chunk_size;
end loop;

-- close the file handle
utl_file.fclose (l_out_file);

return l_filename;

end;

end; -- package body

Using facelets with ADF Faces

Create a new application and a new project in Jdeveloper. Download the following libraries:

Unzip the facelets library. I’ve copied the adf facelets jar to the facelets folder, this is not necessary, but keeps things together.

Open project properties of your view project, go to libraries, add a new facelets library. Include the following four jars:

Facelets library

In libraries make sure you have to following four libraries added:
Libraries

Next go to the JSP Tag libraries section and add the tag libraries for ADF Faces components, ADF Faces HTML, JSF Core and JSF HTML.

Tag libraries

Add the following to public_html/WEB-INF/web.xml

<context -param>
  <param -name>oracle.adf.view.faces.ALTERNATE_VIEW_HANDLER</param>
  <param -value>com.sun.facelets.FaceletViewHandler</param>
</context>
<context -param>
  <param -name>javax.faces.DEFAULT_SUFFIX</param>
  <param -value>.xhtml</param>
</context>

Add the following servlet mapping to web.xml, otherwise the url opened in your browser will not be correct when you run the page from jdeveloper.

<servlet -mapping>
  </servlet><servlet -name>Faces Servlet</servlet>
  <url -pattern>*.xhtml</url>

Next, create a xhtml page. If you specify a .xhtml extension in the html wizard, it will not use the correct extension you specify. Instead, jdeveloper will add .html after your file name.

Xhtml file

To solve this you can either rename the file using the file menu of jdeveloper, or you can create general file, instead of an html file.

Next edit page1.xhtml

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:af="http://xmlns.oracle.com/adf/faces"
      xmlns:afh="http://xmlns.oracle.com/adf/faces/html">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></meta>
    <title>untitled1</title>
  </head>
  <body>
    <ui :composition template="/WEB-INF/layout/layout.xhtml">
      </ui><ui :define name="header">
        <h :o utputText value="My header"/>
      </ui>
      <ui :define name="content">
        <af :o utputText value="My content"/>
        <h :o utputText value="My Footer"/>
      </ui>

  </body>
</html>

Finally well create a layout page which can be used to define the overall laypout foryou’re your pages. Add the following to public_html/WEB-INF/layout/layout.xhtml:

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></meta>
    <title>layout</title>
  </head>
  <body>
    <div id="header">
      <ui :insert name="header"/>
    </div>
    <div id="content">
      <ui :insert name="content"/>
    </div>
  </body>
</html>

You can now run your page by selecting the page and rightclick run:
Run xhtml

Technology
Ben jij slim genoeg voor IT-eye