Friday, July 27, 2007

Build Oracle RAC 10g Release 2 Cluster on Linux and FireWire

Note, before going through this article, you better clear some definition like SAN / NAS / Fibre Channel / FireWire / iSCSI.

One of the most efficient ways to become familiar with Oracle Real Application Clusters (RAC) 10g technology is to have access to an actual Oracle RAC 10g cluster. There's no better way to understand its benefits—including fault tolerance, security, load balancing, and scalability—than to experience them directly.

Find the original article here.

Wednesday, July 25, 2007

The Open Group Architecture Framework

The Open Group Architecture Framework (TOGAF) is a comprehensive architecture framework and methodology from open group which enables the design, evaluation and implementation of the right architecture for an enterprise.

There is an Architecture Review Checklist which you can use for architecture review for your project.

Find out more from here.

Journey of learning and thinking

Recently, i got certified as an enterprise architect from Sun. The Journey of making it happen is really painful and fruitful. Saying it painful is that i burned all my weekend for it and nobody around (people like BA) i can discuss or clarify (what i did in real project), which put me into my own assumption and a bad assumption may lead me to a deadlock state easily. What i did for this case was either to google it from internet or post my questions to some forums, by which i will be in the long-waiting idle state until someone come and share with me (very long waiting time make me sad and frustrated). From the other side, i should say it fruitful as it did build up my logical mindset for viewing, decomposing and architecting an application system.

The whole process took me almost one year, it is truly a journey of learning, thinking, questioning, digesting and accumulating instead of 'hacking' as what i did to be a certified programmer long time ago. For the latter, i have learned all programming skill in school for years, don't wanna repeat the same thing again, but clear it in short time by doing mock exams (my way of hacking). For this SCEA, it is really a new milestone for me and something more exciting. Hacking of it may works for me and take less time, but not good for my own as i wanna self-train toward to a higher stage not for the seek of having one more cert in my profile.



Sunday, July 22, 2007

BPEL4People Specifications Integrate Human Interactions Into Business Process

A group of six technology vendors, including Active Endpoints, Adobe, BEA Systems, IBM, Oracle, and SAP AG, has announced the publication of 'BPEL4People' specifications, which define an approach for integrating human interactions using Web Services Business Process Execution Language (WS-BPEL) 2.0.

BPEL4People extends the capabilities of WS-BPEL to support a broad range of human interaction patterns, allowing for expanded modeling of business processes within the WS-BPEL language.

Specification Extracts

BPEL4People is comprised of two specifications including:

- WS-BPEL Extension for People, which layers features on top of WS-BPEL to describe human tasks as activities that may be incorporated as first-class components in WS-BPEL process definitions.

- Web Services Human Task introduces the definition of stand-alone human tasks, including the properties, behavior and operations used to manipulate them. Capabilities provided by Web Services Human Task may be utilized by Web services-based applications beyond WS-BPEL processes.

The WS-BPEL Extension for People specification introduces a set of elements which extend the standard BPEL elements and enable the modeling of human interactions, which may range from simple approvals to complex scenarios such as separation of duties, and interactions involving ad-hoc data. The specification introduces the people activity as a new type of basic activity which enables the specification of human interaction in processes in a more direct way. The implementation of a people activity could be an inline task or a standalone human task defined in the WS-HumanTask specification.

The WS-HumanTask language introduces a grammar for describing human tasks and notifications. Both design time aspects, such as task properties and notification properties, and runtime aspects, such as task states and events triggering transitions between states are covered by the language. Finally, it introduces a programming interface which can be used by applications involved in the life cycle of a task to query task properties, execute the task, or complete the task. This interface helps to achieve interoperability between these applications and the task infrastructure when they come from different vendors.

Visit original post for more.

New features and enhancements in Java 5.0 & 6.0

Following are the changes and enhancements at the language level for Java 5.0

Generics
This long-awaited enhancement to the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting.

Enhanced for Loop
This new language construct eliminates the drudgery and error-proneness of iterators and index variables when iterating over collections and arrays

Autoboxing/Unboxing
This facility eliminates the drudgery of manual conversion between primitive types (such as int) and wrapper types (such as Integer).

Typesafe Enums
This flexible object-oriented enumerated type facility allows you to create enumerated types with arbitrary methods and fields. It provides all the benefits of the Typesafe Enum pattern ("Effective Java," Item 21) without the verbosity and the error-proneness.

Varargs
This facility eliminates the need for manually boxing up argument lists into an array when invoking methods that accept variable-length argument lists.

Static Import
This facility lets you avoid qualifying static members with class names without the shortcomings of the "Constant Interface antipattern."

Metadata (Annotations)
This language feature lets you avoid writing boilerplate code under many circumstances by enabling tools to generate it from annotations in the source code. This leads to a "declarative" programming style where the programmer says what should be done and tools emit the code to do it. Also it eliminates the need for maintaining "side files" that must be kept up to date with changes in source files. Instead the information can be maintained in the source file.

For more features and enhancements in Java 5.0, visit Sun's official page.

For Java 6.0 (a.k.a Mustang), no significant changes at the language level, but comes with a bunch of enhancements in the other areas like Core, XML and Desktop. Most of the features are applicable both to J2SE and J2EE Platforms. New features and enhancements are encapsulated in the form of a Java Specification Request (JSR). Below is list of features we will use frequently (IMHO) in the near future.

Pluggable Annotation Processing API (JSR 269)
Common Annotations (JSR 250)
Java API for XML Based Web Services - 2.0 (JSR 224)
JAXB 2.0 (JSR 222)
Web Services Metadata (JSR 181)
Streaming API for XML (JSR 173)
JDBC 4.0 (JSR 221)
Scripting in the Java Platform (JSR 223)

For the explanation and example of each, you can go through the article (part 1 and 2) written by Shunmuga Raja. For comprehensive features and enhancements in Java 6.0, visit Sun official page.

Does JavaFX spell the end Of AJAX?

You know all that AJAX code you've been writing and tearing your hair out over as you attempt to get the JavaScript working in both Internet Explorer and Firefox? Yeah, that AJAX code. It's all going to be useless real soon. Find out more from its original post here.

Note, this is not my view. Every language always has its strength and weakness and it is just a matter of application in the right place and at right time.

JavaFX Script

Furthering the promise of “write once, run anywhere”, Sun release a new product family, called Java FX, which is enabling developers to build compelling, rich user interfaces that leverage Java for a wide spectrum of devices. JavaFX initially is comprised of JavaFX Script and JavaFX Mobile







JavaFX Script will run on any JavaSE technology-based platform including all of the upcoming JavaFX software systems for mobile handsets, TVs and other embedded applications from automobiles to game systems.

JavaFX Script is unique in providing close integration with Java components that run on the server or the client, resulting in a richer end-to-end experience. JavaFX Script brings together a simple and intuitive language design, requiring less coding and providing fast development cycles with a ubiquitous runtime platform and an open source program for innovation by developers worldwide.

Sun plans to make JavaFX Script available under an open source license and release the early alpha version of JavaFX Script at openjfx.org on Java.net.

You can check out the demo and tutorial.

(Notes: you may have problem when viewing the demo within oracle network, change it to wifi/public network).

Advanced Queues and Streams in Plain English & How-To

Find the original post here.

As of Oracle release 10.1, AQ is integrated into Oracle Streams, and is called "Oracle Streams AQ".

What is AQ? Advanced Queues, or AQ, is Oracle's messaging solution. AQ provides a persistent (or non-persistent for specialty apps) queue mechanism that can guarantee delivery of a message. It has interfaces to PL/SQL, OCI and Java. It's Oracle's answer to IBM's MQ Series.

A message can be an XML document, a set of fields, an array of data and just about anything else you can think of.

AQ works on a publish/subscribe model. That means that someone (a publisher puts a message on the queue and someone else (a subscriber) takes the message off. A queue can have multiple subscribers. Technically it can have multiple publishers but I haven't worked with that configuration and I'm not sure what the usefulness of that is. I think I would prefer multiple queues, one for each publisher.

What's AQ good for? What does it do?

One example would be replication. In Oracle Advanced Replication, AQ is the mechanism that copies data from one instance to another. The master site (publisher) will receive an update, it puts the update and a before and after image of the data in a queue. The slave sites (Subscribers) pull the data off the queue and apply them to the local database. The before and after images are used by replication to find the correct record and see if there are any update conflicts.

Besides Oracle replication, or your own home-grown replication, there are a lot of other uses for AQ.

You can drop a message on a queue for local usage. Say if you have a transactional system and are getting backed up but don't want to turn away incoming transactions. You can implement a queue. The receiving procedure can drop the transactions on the queue and a local de-queue procedure in the background can pull them off when it has time.

You can use AQ to interface with Java. AQ supports the Java Messaging Specification (JMS) API. Using Java, XML and AQ you can easily implement a SOA (service oriented architecture) web service.

What is Streams? Here's a brief description of streams and what you can use it for.

AQ and Replication both entail data movement. Streams is the current technology enabling that data movement. Streams is kind of like AQ, but with rules applied.

Let's think about AQ. AQ is basically a table and some table maintenance code wrapped around streams. When you enqueue a record, you're using AQ. Streams takes over and moves it to the next database, enqueueing it locally. AQ then takes over again, dequeuing it for consumption.

Streams has some nice features. I think the most important is the rule based transformations. A transformation allows you to modify the payload in flight. A receiving application doesn't need to be aware of the sending applications formats, it just receives what it needs.

Think of the way mainframes send data down to a data warehouse. The mainframe doesn't send entire vsam files down to let the warehouse figure out what pieces it needs. The warehouse group defines the fields it needs, a mainframe programmer writes a Cobol (maybe) program and sends a new, specific file down.

With streams, the receiving application can define what it needs and the sending application can define rules to match. The nice thing with streams is that there can be multiple consumers receiving the same payload but have different rules applied for them. The sender sends one payload and it's transformed many times in different ways for multiple consumers. Rules are also easily defined as opposed to writing a program, scheduling a batch processing window, writing a load routine, etc. With streams, identify the source, define the rules and write a consumer dequeue.

Speaking of data warehouses, another use of streams is in change data capture (CDC). You identify a source object, say your transaction detail table in the oltp system. You can create a rule that says capture all transactions that are approved and billable. Define the billing warehouse as a consumer for that stream. That payload can be applied to a staging table for loading into a warehouse table. The apply to the staging table can be done without coding. With almost 0 lines of code you can move the data you want, i.e. billable items, from your oltp system directly to your warehouse.

Streams is also non-stressful to the source database. Streams reads the redo-logs and gathers information from that as opposed to running queries or DML against the source database's tables.

Ok, get to know what is AQ and stream and wanna setup locally, check it out from YeeThian' post.

Web 2.0? Web 2.86 ... 3.1... and beyond

The explosion of blogs, social networks and user-generated media commonly referred to as Web 2.0.

So what’s next? Web 3.0, or the notion of the semantic web, where the Internet evolves from a catalog of information to a smart network combining artificial intelligence, profiling and search capabilities.

O'Reilly editor Nat Torkington had been in Singapore last week, who were here giving the presentations on Web 2.0 and helping the IDA with their plans to foster startups in the country. As many people asked him about the future of Web 2.0--is it a bubble, when will it be replaced by something new, a recent blog post (The Future of Web 2.0) from him has answered that question in great detail.

In his post, future of web will go through the intersting changes till 2022 and experience the changes from web 2.0, web 286 (sounds like Pentium 286),web 3.0 & 3.1,  Web 95, 98, NT, XP and Vista (Sounds like the revolution of the Microsoft Windows).

"The Future of Web 2.0" is an amusing blog post, whether or not you agree with his predictions about Firefox X, IE 13, WebVista, and other fancy terms, it is good to have some idea.

Enable the exception and stack trace in the OAS 10g 10.1.3

In previous releases of OC4J, the default behavior when an error occurred in a Web application was to display both the exception and the stack trace in the HTML error page returned to the client.

This default behavior has changed in the oracle application server 10g 10.1.3 and these details are no longer displayed by default; instead, a generic error message is displayed in the HTML error page. The exception and stack trace details are sent to the log file of the relevant application.

If you have tests that rely on the display of an exception or stack trace, you can cause the stack trace to be displayed by running the application in developer mode. To run an application in development mode, set the development attribute of the <orion-web-app> element to "true" in the orion-web.xml file. Here is an example:
<?xml version="1.0"?>
<orion-web-app ... jsp-cache-directory="./persistence"
jsp-cache-tlds="standard"
temporary-directory="./temp"
context-root="/DevelopmentThrowException"
schema-major-version="10"
schema-minor-version="0"
development="true">
...
<web-app>
</web-app>
</orion-web-app>

To enable exception and stack track in oracle application server, you need to edit the orion-web.xml in the directory mentioned below once the web application is deployed into OAS 10g 10.1.3.

1.0 Find the orion-web.xml file from directory of <oracle_app_server_home>/j2ee/application-deployments/<instance_name>/<web_application__ear_file_name>/<web_application_war_file_name>/orion-web.xml

2.0 Modify the entry of orion-web-app like:

<orion-web-app
...
development="true"
>
...
</orion-web-app>

Set the development attribute of the <orion-web-app> element to "true".

3.0 Restart the app server and remember that whenever you undeploy and redeploy the same web application, you need to redo this.

Here, i would like to thanks thiam hwa, who has pointed me to the right place of the solution, for his help.

Additional resources:

Oracle Containers for J2EE – Frequently Asked Questions

Exception and Stack Trace No Longer Displayed in HTML Error Page

Desklets for Java

A desklet is a desktop widget written in Java, according to Joshua Marinacci who, along with Robert Cooper, released the first preview of AB5k, their Swing-based desklet toolkit.

Desktop widgets have been popular on OS X for a while, and are becoming familiar fixtures of desktops running Windows Vista. Most desktop widgets to date have been written for a native platform. Widgets written in Java, or "desklets," by contrast, can run on any platform for which a Java 6 runtime is available. The term "desklet" was coined by Joshua Marinacci and Robert Cooper, who recently released a preview of their first desklet toolkit, AB5k.

AB5k is a container for running desklets, word for widgets. Desklets are little programs that run inside the container and do one thing very well. Some common desklets include clocks, calendars, news reports, weather, searchers (like Wikipedia) and useless but fun little playthings.

What is ebXML?

Electronic Business using eXtensible Markup Language, the 'eb' in ebXML stands for electronic business," and you can pronounce the phrase as "electronic business XML," "e-biz XML," "e-business XML," or simply "ee-bee-ex-em-el". ebXML is a family of XML based standards sponsored by OASIS and UN/CEFACT whose mission is to provide an open, XML-based infrastructure that enables the global use of electronic business information in an interoperable, secure and consistent manner by all trading partners.

ebXML was published in 1999 as an initiative of the United Nations Centre for Trade Facilitation and Electronic Business (UN/CEFACT) and the Organization for the Advancement of Structured Information Standards (OASIS). The original project envisioned five layers of data specification, including XML standards for:

-Business processes,
-Collaboration protocol agreements,
-Core data components,
-Messaging, &
-Registries and repositories

High-level overview of ebXML interaction between two companies (source: www.ibm.com, author:David Mertz)


ebXML is not itself a standard, rather, it is a container for several key specification standards administered by UN/CEFACT and OASIS.

Key ebXML standards include ebXML Messaging Services, ebXML Registry, ebXML Business Process Specification Schema and ebXML Collaboration Protocol Profile and Agreement (CPP/CPA).

The International Organization for Standardization (ISO) has approved the following five ebXML specifications as the ISO 15000 standard, under the general title, Electronic business eXtensible markup language:

ISO 15000-1: ebXML Collaborative Partner Profile Agreement
ISO 15000-2: ebXML Messaging Service Specification
ISO 15000-3: ebXML Registry Information Model
ISO 15000-4: ebXML Registry Services Specification
ISO 15000-5: ebXML Core Components Technical Specification, Version 2.01

OASIS technical committees and UN/CEFACT retain the responsibility for maintaining and advancing the above specifications.

The freebXML.org initiative was established to promote development and adoption of ebXML-based open-source software.

I highly suggest you to go through the article called "Understanding ebXML, Untangling the business Web of the future", which can give you a very good idea of how each profile and specification related to each other.

Additional reading:

ebXMl Tutorial
http://www.javapassion.com/webservices/ebXML4.pdf

Integrating Java Content Repository and Spring

Integrating Java Content Repository and Spring is a detailed infoQ article by Costin Leau which first talks about the Java Content Repository (JCR) spec in general, and then shows how the JCR support in Spring Modules provides a number of benefits when working against any repository supporting the JCR standard.

´