Skip to main content

Using Java code in ODI 11g

Hello everyone!
It’s time for another cool tutorial on Oracle Data Integrator. This one will guide you in using your custom Java code and help call .jar files from within ODI.
Pre-requisites: Oracle Data Integrator 11g (build version 11.1.1.0.7)
Step 1: Write Java code to perform Addition of two numbers
Open notepad and start coding. Here is what my Java class looks like:
Addition.java
import java.util.Scanner;
public class Addition
{
     
    public int number1, number2;
     
    public int add(int num1, int num2)
    {
        return (num1+ num2);
    }
     
    public static void main(String args[]) throws Exception
    {
         
        int num1,num2;
         
        Addition addobject = new Addition();
        System.out.println("--------------Program to add two numbers---------------");
        Scanner s = new Scanner(System.in);
        System.out.println("Enter 1st number");
        num1= s.nextInt();
        System.out.println("Enter 2nd number");
        num2=s.nextInt();
         
        System.out.println("result of addition is :" + " " +addobject.add(num1, num2) );   
    }
}
Step 2: Compile and create .jar file
Compile the .java class from the command line
C:\programs\javac Addition.java
Create .jar file from the class
C:\programs\jar cf Addition.jar Addition.class
Copy the newly created Addition.jar file and paste it at the following locations!
1st location
C:\oracle\product\11.1.1\Oracle_ODI_1\oracledi\agent\drivers
2nd location
C:\Users\<user-name>\AppData\Roaming\odi\oracledi\userlib
At the second location, you will find the additional_path.txt file. Open it and add the path to your .jar file.
; Additional paths file
; You can add here paths to additional libraries
; Examples:
;   C:\ java\libs\myjar.jar
;   C:\ java\libs\myzip.zip
;            C:\oracle\product\11.1.1\Oracle_ODI_1\oracledi\agent\drivers\
;   C:\java\libs\*.jar will add all jars contained in the C:\java\libs\ directory
;   C:\java\libs\**\*.jar will add all jars contained in the C:\java\libs\ directory and subdirectories
C:\Users\karan\AppData\Roaming\odi\oracledi\userlib\*.jar
Workaround
After you have copied the .jar file you now need to do a workaround. Copy the Lib folder from C:\oracle\product\11.1.1\Oracle_ODI_1\oracledi.sdk\lib and paste it inside C:\oracle\product\11.1.1\Oracle_ODI_1\oracledi\agent\lib. This makes sure that ODI reads the python files when we try to import them in our procedure code.
Step 3: Create new procedure
Launch ODI Studio and connect to your work repository. Create new procedure named AddTwoNumbers in any of your existing Projects.

Create a step in it as follow.

Now, write the command for the procedure in Jython
import os
import sys
jars = [
"C:\oracle\product\11.1.1\Oracle_ODI_1\oracledi\agent\drivers\Addition.jar"
]
for jar in jars:
      sys.path.append(jar)
import Addition
num1 = <%=odiRef.getOption("number1")%>
num2 = <%=odiRef.getOption("number2")%>
print  "1st number: %d" % num1
print  "2nd number: %d" % num2
addobj= Addition()
result= addobj.add(num1,num2)
print "Sum is : %d" % result
Note: Make sure the above code is well indented or else it will result in errors when executed.
Before you run this procedure you need to create two Options that will act as input parameters for the procedure.



Step 4: Create new package
Create new package named Addition of Two Numbers. Add the procedure to the package with the correct options and run the package. Check the status of the operation under the Operator navigator.

Then Execute a package and see results.

Comments

  1. hi. Thanks for this information. In my organisation we are using ODI on GNU machine. I can see in an existing code some java class is imported and used. I want to open and know the underlying code for this class that is being imported and used. How can i know the path of this class? Is there any path in properties tab of About section?

    ReplyDelete

Post a Comment

Popular posts from this blog

ODI KM Adding Order by Option

You can add Order by statement to queries by editing KM.I have edited IKM SQL Control Append to provide Order by.  1) Add an option to KM named USE_ORDER_BY, its type is Checkbox and default value is False. This option determines you want an order by statement at your query. 2)Add second option to KM named ORDER_BY, type is Text. You will get order by values to your query by this option. 3) Editing Insert New Rows detail of KM. Adding below three line code after having clause. That's it! <% if (odiRef.getOption("USE_ORDER_ BY").equals("1")) { %> ORDER BY <%=odiRef.getOption("ORDER_BY" )%> <%} %>  If USE_ORDER_BY option is not used, empty value of ORDER_BY option get error. And executions of KM appears as such below; At this execution, I checked the KM to not get errors if ORDER_BY option value is null. There is no prove of ORDER BY I'm glad.  Second execution to get  Ord...

Synchronous and Asynchronous execution in ODI

In data warehouse designing, an important step is to deciding which step is before/after. Newly added packages and required DW data must be analyzed carefully. Synchronous addings can lengthen ETL duration. Interfaces, procedures without generated scenario cannot be executed in parallel. Only scenario executions can be parallel in ODI. Default scenario execution is synch in ODI. If you want to set a scenario to executed in parallel then you will write “-SYNC_MODE=2″ on command tab or select Synchronous / Asynchronous option Asynchronous in General tab. I have created a package as interfaces executes as; INT_JOBS parallel  INT_REGIONS synch  INT_REGIONS synch  INT_COUNTRIES synch  INT_LOCATIONS parallel  INT_EMPLOYEES parallel (Interfaces are independent.) Selecting beginning and ending times and durations from repository tables as ODI 11g operator is not calculating these values. It is obvious in ODI 10g operator. SELECT    sess_no...

Oracle Data Integrator tools: OdiFileDelete and OdiOutFile

Hello everyone! It’s time for another cool ODI tutorial. Last time, I spoke about the   OdiZip tool and how it can be used to create zip files from a directory. Through this post, I will talk about two more tools related to  Files  namely  OdiFileDelete and  OdiOutFile . 1. OdiFileDelete The  OdiFileDelete  is a tool used to delete files present in a directory or a complete directory on the machine running the agent. Usage OdiFileDelete -DIR=<dir> | -FILE=<file> [-RECURSE=<yes|no>] [-CASESENS=<yes|no>] [-NOFILE_ERROR=<yes|no>] [-FROMDATE=<fromdate>] [-TODATE=<todate>] If  -FROMDATE  is omitted, all files with a modification date earlier than the  -TODATE  date will be deleted. If  -TODATE  is omitted, all files with a modification date later than the  -FROMDATE  date will be deleted. If both parameters are omitted, all files matching the  -FILE...