Wednesday, April 16, 2008

Oracle Data Integrator - Some Information

The Oracle Data Integration Suite at-a-glance:

Oracle adds Data Integration Suite to middleware family
Source: http://searchoracle.techtarget.com/news/article/0,289142,sid41_gci1297749,00.html

The suite also combines Oracle's SOA-based Business Process Management and change management capabilities with Oracle-Hyperion's Master Data Management (MDM) capabilities. Oracle acquired Hyperion last March as part of an ongoing, high-profile acquisition spree.

Potential Data Integration Suite buyers also have the option to incorporate Oracle's in-memory data grid technology. Analysts say that storing data in-memory reduces performance overhead and speeds up the process of retrieving data that exists on the virtual or middleware layer.

The new suite, which comes with the Oracle Data Integrator E-LT technology, also incorporates two relatively new products -- Oracle Data Profiling and Oracle Data Quality for Oracle Data Integrator -- which were developed in conjunction with Harte-Hanks Trillium Software.

Oracle says the two products extend the data quality features of Data Integrator to provide added data governance capabilities.

Oracle Data Profiling is a quality monitoring tool that allows users to assess the quality of their data through metrics, to discover or infer rules based on this data, and to monitor the evolution of data quality over time, according to Oracle.

Oracle Data Quality for Data Integrator employs a rules-based engine to help users ensure data quality and conduct name and address cleansing as data integration efforts move forward.

With the new Data Integration Suite, Oracle is sending the message that "no matter what solution you have, no matter where you go, you don't have to worry about where your data is," Wang said. "You can keep a single source of truth with Oracle."


The new Oracle Data Integration Suite includes the following:-
- Oracle Data Integrator
- Oracle BPEL Process Manager
- Oracle Enterprise Service Bus
- Oracle Application Server
- Oracle-Hyperion Data Relationship Manager
- Oracle B2B Engine
- Oracle Business Rule Engine

Optional features are priced separately and include:
- Oracle Data Quality for Data Integrator
- Oracle Data Profiling
- Coherence Data Grid
- Legacy Adapters
- Applications Adapters
- B2B Adapters
- Unstructured Content Adapters

Oracle Data Integrator 10g Suite includes:

Oracle Data Integrator Agent
Oracle Data Integrator Designer
Oracle Data Integrator Operator
Oracle Data Integrator Security Manager
Oracle Data Integrator Topology Manager
Oracle Data Integrator Metadata Navigator
Oracle Data Integrator Lightweight Designer
Oracle Data Integrator Driver for XML
Oracle Data Integrator Driver for LDAP
Oracle Data Integrator Knowledge Modules
Oracle Data Profiling
Oracle Data Quality for Data Integrator

Good to start with:
a. ODI OTN Article: http://www.oracle.com/technology/pub/articles/rittman-odi.html
b. Very useful White paper to understand Data Services and ODI Features -
http://me.jtpollock.us/pubs/
c. Gartner Research -
http://www.gartner.com/DisplayDocument?id=599407&ref=g_sitelink
d. ODI Documentation -
http://www.oracle.com/technology/products/oracle-data-integrator/10.1.3/htdocs/
1013_support.html

e. ODI Main Product Page -
http://www.oracle.com/technology/products/oracle-data-integrator/index.html

Will write more on each of interesting ODI features like CDC, developing Custom Knowledge Modules, Human Workflow integration, and developing BI dashboards, and many more.

Cheers,
Ananthalakshmi

Thursday, April 10, 2008

Purchasing - Advanced Pricing Integration 11.5.10 and R12

Please review the following documents which gives insight on the Advanved Pricing Integration in Purchasing products in Release 11.5.10 and R12.

1. PO Integration with QP Whitepaper.doc - Published in Metalink, note 394490.1 -
Oracle Purchasing Integration with Oracle Advanced Pricing – Release 11.5.10
2. R12 Purchasing User Guide -
http://download.oracle.com/docs/cd/B40089_06/current/html/docset.html
3. Attached Power Point presentation on the R12 Pricing Integration changes.

In overview, in R12 qualifiers can be set based on Contract Purchase Agreements as well as Blanket and Global Blanket Agreements and we support only goods based lines, and the following line types are not supported for the Advanced Pricing Integration.

No. Type Name Value Basis Purchase Basis
1 Rate based Temp Labor Rate Temp Labor
2 Fixed Price Temp Labor Fixed Price Temp Labor
3. Fixed Price Services Fixed Price Temp Labor
4. Amount Based Services Fixed Price Services

Also, Internal requisitions will not be priced against advanced pricing setup.

Please review the PO Integration with QP Whitepaper for the supported/unsupported Advanced Pricing features in Purchasing. The details listed in this doc is applicable to both 11.5.10 and R12, except few delta changes to support Blanket Agreements in R12, and in 11.5.10, we can only qualify the price list/modifier,etc based on Contract Purchase Agreement(CPA).

Advanced Pricing has the Promotional Limits feature since 11.5.9 to monitor the spend limits against a promotional discount modifier, the limit can be either Hard/Soft limit and you can monitor the discount applied/generate reports, etc. Purchasing does not have integration for Promotional Limits feature till R12.

Cheers,
Ananthalakshmi

White Paper: Oracle iProcurement: Enhanced Catalog Content Management,Online Authoring and Content Security Model in Release 12

I have released a white paper on "Oracle iProcurement: Enhanced Catalog Content Management,Online Authoring and Content Security Model in Release 12" to help
iProcurement Customers better understand the new Unified Catalog Model and the Content Security Features introduced in Oracle iProcurement Release 12.

Please download this whitepaper from http://www.metalink.oracle.com, Note#560749.1.

Cheers,
Ananthalakshmi

Thursday, March 06, 2008

Java Remoting – Calling Java APIs from Javascript via AJAX

Current Strategy:
In the real-world Web Application Development, to make a Java API call from any Javascript event (Clicking on Submit/Go button) requires the Page to be submitted and request will be sent to the server and response will be returned back to the Browser and page will be reloaded with the results.

Issues with this approach is that
- Requires round-trip to the server.
- Page will have to be reloaded to refresh the content.
- Cannot call Java APIs in the client side javascript.
- Not rich user experience.

A little background on AJAX:

In the AJAX world, making a call to the server side APIs via XMLHttpRequest and polling results in the background and loading the results in the UI without reloading the page gives rich user experience.
For example, Google Suggest - Google pulls the list of suggested search key words as soon as user keys in the data in the search bar. It executes the poll the key words via background.

Our Strategy:
This programming approach uses AJAX to make a call to the Java API via Java Servlet and displays the results in the UI. This simple architecture works as follows:

1. In the Javascript, using XMLHttpRequest object, submit the POST request to the Java Servlet with the input parameters to be passed on the Java API.

Parameters contain
a) Class Name,
b) Method Name to be invoked.
c) Method input parameters.

2. Java Servlet uses Java Reflection API to invoke the method on the
given class name and executes the method and returns the results
in doPost method.

3. In the Javascript callback function, process the results and display
it in the UI.

Example and Files:

1. JSP Application (JavaAjaxTest.jsp)

<pre>
<script language="Javascript">
function xmlhttpPost(strURL) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText);
}
}
self.xmlHttpReq.send("class=ajaxproj.HelloWorld&method=sayHello&username='"+ document.JavaAJAXForm.username.value+"'");
}
function updatepage(str){
document.getElementById("result").innerHTML = str;
}
</script>

<form name="JavaAJAXForm">
<input name="username">
<input onclick="'JavaScript:xmlhttpPost(" type="button" value="Go"></input>
<div id="result"></div>
</form>

</pre>

2. HelloWorld.java
package ajaxproj;

public class HelloWorld {
public HelloWorld() {
}
public String sayHello(String name) {
return "Hello "+ name;
}

3. Java Servlet (JavaMethodServlet.java)
package ajaxproj;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.*;

import java.net.URL;

import javax.servlet.*;
import javax.servlet.http.*;

public class JavaMethodServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=windows-1252";

public void init(ServletConfig config) throws ServletException {
super.init(config);
}

public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);

System.out.println("JavaMethodServlet.doPost");

PrintWriter out = response.getWriter();
//Parse the Query String and Call Java Method with Parameters.
String className = (String) request.getParameter("class");
String methodName = (String) request.getParameter("method");
String userName = (String) request.getParameter("username");

//Call Java Method.
Class c;
Method method;
String value = null;

try {
c = Class.forName(className);
Object obj;
obj = c.newInstance();
method = c.getDeclaredMethod(methodName, new Class[]{String.class});
method.setAccessible(true);
value = (String) method.invoke(obj , new String[]{userName});

System.out.println(value);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}

out.write(value);
out.close();
}
}

How does it works:
Invoke JavaAjaxTest.jsp, enter the username and click on Go.
The message Hello <username>will be displayed without refreshing the page.

Here is how it works:
1. When user clicks on the Go button, we make a call to the java servlet with the appropriate classname, methodname and the username input values in the AJAX way using XMLHttpRequest object.
2. Javaservlet parses the request parameters, and invokes method on the given class and returns the result.
3. In the Javascript classback function, we process responseText and set the value of "result" div element to display the return value.

This is the initial approach, it can be further enhanced to return and handle objects from Java APIs, and to handle Security (CSRF - Cross Site Request Forgery), etc to give a complete framework which can be used in the web applications to make a call to Java APIs.

Frameworks:
- There are few open source frameworks available such as DWR
http://getahead.org/dwr/) and Reverse AJAX(using/manipulating
Javascript content in Java) , but still the security is a open issue to be
enhanced further. Please look at http://getahead.org/dwr/overview/dwr

Thanks
Ananthalakshmi

Friday, January 04, 2008

Java 6 Quiz

1. What group makes decisions on which functionality will be present in the final release of Java SE 6?
A. JSR 145
B. JSR 270
C. JSR 10
D. Top corporate executives and politicians in a smoke-filled room

Answer: B is correct. The JSR 270 Expert Group includes experts from such companies as Apache, IBM, Oracle, Intel, BEA, Hewlett-Packard, and JBoss. This group defines the feature set for the next major release of Java SE. All the features discussed in this quiz are subject to the group's review and approval.

2. Sun's implementation of Java SE 6 introduces which of the following new features:
A. An embedded Mozilla Rhino JavaScript interpreter
B. New system-tray functionality
C. New splash-page functionality
D. All of the above

Answer: D is correct. The Mozilla Rhino JavaScript interpreter (which is specific to Sun's implementation and is not part of the draft Java SE 6 specification) is available through the ScriptEngineFactory class in the javax.script package, which includes the Rhino interpreter by default. Here is a short snippet of source code that invokes the JavaScript interpreter:

import javax.script.*;

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine rhinoEngine = manager.getEngineByName("javascript");

try {
Object o1 = rhinoEngine.eval("new Date().getMonth()");
System.out.println(o1);
} catch (ScriptException e) {
System.err.println(e);
}

The system-tray functionality is available through the SystemTray and TrayIcon classes in the java.awt package. Finally, the splash-screen functionality is available through the SplashScreen class in java.awt, as well as the -splash command-line option at JVM* startup.

3. What important addition to the JTabbedPane was added in Java SE 6?

A. The ability to add a tooltip to the tab
B. The ability to add an icon to the tab
C. The ability to substitute a Component as a tab's identifier
D. The ability to add and remove tabs

Answer: C is correct. You can now use subclasses of Component for tab identifiers in a JTabbedPane, instead of just Strings and Icons. For example, you can use a JPanel that contains not only a JLabel that displays the title of the tab but also a JButton X that allows you to close or remove the tab from the JTabbedPane. Don't forget to setOpaque(false) on those components! See Alexander Potochkin's blog for more information.

4.With Java SE 6, what functionality can you now perform with java.io.File?
A. Set permissions and check free and usable disk space.
B. Check whether a file is marked as hidden.
C. Check whether a file is in fact a directory and determine its parent directory.
D. Nothing was added to java.io.File.

Answer: A is correct. Starting with build 31 in Java SE, several new methods have been added to java.io.File. You can now set the owner and universal readable, writable, and executable flag of a file residing on a local or network file system that supports that operation.

public boolean setReadable(boolean readable, boolean ownerOnly)
public boolean setReadable(boolean readable)

public boolean setWritable(boolean writable, boolean ownerOnly)
public boolean setWritable(boolean writable)

public boolean setExecutable(boolean executable, boolean ownerOnly)
public boolean setExecutable(boolean executable)In addition to file system permissions, Java SE 6 gives you three new methods to determine the amount of space available on the partition represented by a File object.
public long getTotalSpace();
public long getFreeSpace();

public long getUsableSpace();What's the difference between getFreeSpace() and getUsableSpace()? The getFreeSpace() method returns an instantaneous count of the amount of free space on the partition. The getUsableSpace()method, on the other hand, contains extra functionality to check for write permissions and other operating system restrictions, which therefore returns a more accurate estimate of how much space will be available. If you want to determine whether you have enough disk space before writing to a file, getUsableSpace() will give you a more accurate estimate. Note that both of these methods can throw a SecurityException if a security manager has been installed and it denies a call to RuntimePermission("getFileSystemAttributes").

5. JSR 105 calls for support for XML encryption and digital signatures in Java SE 6. In what package can you find this functionality?
A. java.xml.security
B. javax.xml.crypto
C. java.security
D. javax.xml.validation

Answer: B is correct. JSR 105 defines a standard API for XML digital signature services and is a key component for web services security. This functionality was delivered in build 39, and although you will use many of the classes through the java.xml packages to work with XML, the primary encryption and digital signature functionality is located in the javax.xml.crypto package. (The javax.xml.validation package helps to perform XML validation against a schema. The java.security package deals with Java class security.) See JSR 105 to learn more about these new classes.

6. What new functionality was added to JTable in Java SE 6?
A. The ability to resize columns in a JTable
B. The ability to move columns in a JTable
C. The ability to define custom cell table views
D. The ability to sort and filter data in a JTable

Answer: D is correct. Starting with build 39, JTable now has methods to sort, highlight, and filter the contents of tables. The other three options were already supported by JTable. Portions of this work come from the Java Desktop Network Components (JDNC). A recent java.sun.com tech tip provides more information.

7. Java SE 6 now incorporates an advanced version of SwingWorker into the core. What is the purpose of SwingWorker?
A. It helps to move lengthy GUI-interacting tasks into a dedicated thread, so as
not to block the event-dispatch thread.
B. It coordinates interthread communication between an executing thread and the
event-dispatch thread.
C. It can aggregate several intermediate parameters generated by the worker thread
into a single, generic "return" object.
D. All of the above.

Answer: D is correct. Since the 1998 publication of SwingWorker in the article "Threads and Swing," developers have continuously requested that the SwingWorker class be moved into core. At the 2004 JavaOne conference, the Desktop team presented a new version of SwingWorker that included generification, use of the concurrency package, and PropertyChangeListener support. Much of this functionality assists with interthread communication. Java SE 6 incorporates a similar version of SwingWorker that greatly assists developers in processing GUI-driven functionality off the event-dispatching thread, indicating status and progress, and aggregating the results.

8. What new functionality does the JTextComponent class include?
A. Additional printing support, including headers, footers, and layout
B. Bidirectional text
C. Embedded scrolling
D. HTML support

Answer: A is correct. Starting in build 39, printing support for JTextComponent has been added, including the ability to specify a customer header or footer and have the text laid out to the printed page size. By using overloaded versions of the print() method, programmers can define more flexible options when formatting data within a JTextComponent to a printer.

9. What additional calendar does Java SE 6 now support?
A. Thai Buddhist
B. Islamic lunar
C. Mayan
D. Japanese imperial

Answer: D is correct. A new Calendar implementation has been added to support numbering for the Japanese imperial era, such as Heisei 17 for 2005 (Gregorian). An instance of this Japanese imperial calendar can be created through the Calendar.getInstance() factory by specifying Locale("ja", "JP", "JP").

10. What is the purpose of the new java.text.Normalizer class?
A. It provides a spell-checking service provider interface.
B. It sorts text quickly and efficiently.
C. It transforms text into an equivalent composed or decomposed form.
D. It provides online, real-time language translation.

Answer: C is correct. The new java.text.Normalizer class transforms text into an equivalent composed or decomposed form. This class supports Unicode text normalization as defined by the Unicode Standard Annex #15. Normalization helps standardize Unicode text representations when multiple character combinations exist for creating the same text.

11. JSR 221 is defining the Java DataBase Connectivity (JDBC) 4.0 software specification. Which of the following are significant additions in JDBC 4.0 software, which will be included in Java SE 6?
A. SQL:2003 XML support
B. National character-set support
C. Large object (LOB) enhancements
D. All of the above

Answer: D is correct. All of these features are included in JDBC 4.0 software. You can find out more on the JSR 221 page.

12. Java SE 6 includes a new modality model for dialog boxes. What previous JDK issue(s) does this address?
A. The user was unable to access a modal dialog box if its parent window was displayed above it.
B. JavaHelp windows could sometimes be inadvertently affected by modal dialog boxes.
C. There was only one blocking strategy for AWT and JFC/Swing modal dialog boxes.
D. All of the above.

Answer: D is correct. Starting with build 39, a new modality mode in Java SE 6 eliminates all of these problems. From the Desktop Java SE 6 features article: "Problems with modality have been plaguing developers for years.... In Java SE 6, we ... solve most of the modality problems by introducing several new modality modes (such as application modality, toolkit modality, and document modality) as well as exclusion from modality, which is useful for the applications like JavaHelp.

Thursday, January 03, 2008

Externalize Business Rules with Oracle Business Rules Engine

In the traditional programming, the business logic is included in the code itself, and everytime code has to be modified for changes in business rules and the implementation It would be a great idea to externalize the rules + actions out of the code so that the rules are flexible and configurable, and the code implementation would be generic.

Two approaches. To start with,

a) The Rules + Actions can be represented in a single .xml file which will then be parsed and converted to java objects to generate the executatble logic in the Application component logic. We need to define the Rules syntax and parsing mechanisms. By externalizing the rules, I would see the benefits that we would have major benefits in terms of changing code for each rule implemenation, and maintenance benefits, and Developers/Business People can modify/add the rules, etc by externalizing the rules.

b) Another approach is to use the Rules Engine, such as Oracle Business Rules Engine, part of Oracle Fusion Middleware.

Check out http://www.oracle.com/technology/products/ias/business_rules/index.html

Interesting paper http://www.oracle.com/technology/products/ias/business_rules/pdf/bpelAndRules.pdf
We will discuss more about Oracle Business Rules Engine in the coming weeks.

Cheers,
Ananthalakshmi