Вы находитесь на странице: 1из 3

Execution Of ODI Scenario With "startscen" Command Does Not Start Due To IndexOutOfBoundsException Or NullPointerException Or NoClassDefFoundError Or ODI-1218 Or ODI-1414

Messages [ID 563284.1] Modified 04-APR-2011 In this Document Symptoms Cause Solution References Type PROBLEM Status MODERATED

This document is being delivered to you via Oracle Support's Rapid Visibility (RaV) process and therefore has not been subject to an independent technical review.

Applies to:
Oracle Data Integrator - Version: 10.1.3.2.0 and later [Release: 10gR3 and later ] Information in this document applies to any platform.

Symptoms
1. When launching a Scenario with Oracle Data Integrator (ODI) 10g "startscen.bat(.sh)" command, the execution does not start and following message is signaled:
java.lang.IndexOutOfBoundsException: toIndex = 33683 at java.util.SubList.<init> at java.util.RandomAccessSubList.<init> at java.util.AbstractList.subList at com.sunopsis.m.a.g.a ... at oracle.odi.Agent.main

Note that, in the "odiparams.bat(.sh)" configuration file, the database account password of ODI Master Repository has been set as follows:
set ODI_SECU_ENCODED_PASS="agent ENCODE myPassword"

2. When launching a Scenario with Oracle Data Integrator (ODI) 11g "startscen.bat(.sh)" command, the execution does not start and following message is signaled:
Exception in thread "main" java.lang.NoClassDefFoundError: myPassword Caused by: java.lang.ClassNotFoundException: myPassword at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: myPassword. Program will exit.

Note that, in the "odiparams.bat(.sh)" configuration file, the database account password of ODI Master Repository has been set as follows:
set ODI_MASTER_ENCODED_PASS="encode myPassword"

Cause
The following variables should be encrypted with the appropriate Oracle Data Integrator (ODI) command, and only the resulting string should be set into the "odiparams.bat(.sh)" configuration file: 1. Oracle Data Integrator (ODI) 10g: ODI_SECU_ENCODED_PASS - the database account password of ODI Master Repository ODI_ENCODED_PASS - the OracleDI user password (parameter used by the agent startup program, and by tools such as startscen, restartsession, agentstop, startcmd...) 2. Oracle Data Integrator (ODI) 11g: ODI_MASTER_ENCODED_PASS - the database account password of ODI Master Repository ODI_SUPERVISOR_ENCODED_PASS - the OracleDI supervisor user password (parameter used only by the agent startup program) ODI_ENCODED_PASS - the OracleDI user password (parameter used by tools such as startscen, restartsession, agentstop, startcmd...)

Solution
To implement the solution: 1. From an operating system command prompt, encode the password as explained in Note.423842.1 How Can I Encrypt A Password? 2. Copy the generated string and paste it respectively into: ODI_SECU_ENCODED_PASS and/or ODI_ENCODED_PASS (in ODI 10g) ODI_MASTER_ENCODED_PASS and/or ODI_SUPERVISOR_ENCODED_PASS and/or ODI_ENCODED_PASS (in ODI 11g) variables which are defined in the "odiparams.bat(.sh)" configuration file.

For example, in ODI 10g:


set ODI_SECU_ENCODED_PASS=eofpBV0gXAbqoStGqXMZ8XAvRJll ... set ODI_ENCODED_PASS=b9ypE6YhlBsKBS7nrLNqC5.Fp

For example, in ODI 11g:


set ODI_MASTER_ENCODED_PASS=aDgpqiZpMbG7I.XFHgccXFNicINvGzhHhtaTi2ygi ... set ODI_SUPERVISOR_ENCODED_PASS=fJya.vR5kvNcu9TtV,jVZEt ... set ODI_ENCODED_PASS=%ODI_SUPERVISOR_ENCODED_PASS%

3. Apply the changes and re-execute the Scenario.

As long as Oracle Data Integrator (ODI) does not recognize the encryption algorithm, it will raise an error, which depends on the parsing level on which the error has been detected. 1. In ODI 10g, one of the messages below may occur:
java.lang.IndexOutOfBoundsException: toIndex = 33683 at java.util.SubList.<init>(AbstractList.java:705) at java.util.RandomAccessSubList.<init>(AbstractList.java:861) at java.util.AbstractList.subList(AbstractList.java:570) at com.sunopsis.m.a.g.a(g.java) at com.sunopsis.m.a.c.a(c.java) at com.sunopsis.m.a.f.b(f.java) at com.sunopsis.tools.core.SnpsStringTools.b(SnpsStringTools.java) at com.sunopsis.dwg.DwgObject.snpsDecypher(DwgObject.java) at com.sunopsis.dwg.DwgJv.treatCmd(DwgJv.java) at com.sunopsis.dwg.DwgJv.main(DwgJv.java) at oracle.odi.Agent.main(Agent.java) Terminate batch job (Y/N)? y

... when the password is NOT encoded and starts with a lower case letter ("agent encode", "doe"...). This is because the encryption algorithm implemented in ODI 10g is not able to decrypt the In this case, the Scenario execution freezes and should manually be killed.
java.lang.NullPointerException at com.sunopsis.m.a.f.b(f.java) at com.sunopsis.tools.core.SnpsStringTools.b(SnpsStringTools.java) at com.sunopsis.dwg.DwgObject.snpsDecypher(DwgObject.java) at com.sunopsis.dwg.DwgJv.treatCmd(DwgJv.java) at com.sunopsis.dwg.DwgJv.main(DwgJv.java) at oracle.odi.Agent.main(Agent.java) Terminate batch job (Y/N)?

... when the password is composed of only one word and contains mixed case ("JohnDoe123"). This is because the encryption algorithm implemented in ODI 10g is not able to decrypt the pass case, the Scenario execution freezes and should manually be killed.
java.sql.SQLException: ORA-01017: invalid username/password; logon denied ... at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at com.sunopsis.sql.SnpsConnection.u(SnpsConnection.java) at com.sunopsis.sql.SnpsConnection.c(SnpsConnection.java) at com.sunopsis.sql.i.run(i.java)

... when the password starts with upper case letter ("JOHN DOE", "JOHN Doe"...). As the password starts with uppercase, ODI 10g considers that former Sunopsis encryption method has been tries to decrypt it. The result is send to the Database, which raises an invalid password message. In this case, the execution resumes after having signaled the invalid password message. 2. In ODI 11g, one of the messages below may occur:
ODI-1418: Error connecting to agent Internal: an authentication error occurs while connecting to the master repository. Caused By: oracle.odi.core.security.BadCredentialsException: Incorrect ODI username or password at oracle.odi.core.security.SecurityManager.doODIInternalAuthentication(SecurityManager.java:409) at oracle.odi.core.security.SecurityManager.createAuthentication(SecurityManager.java:331) at oracle.odi.StartScen.main(StartScen.java:176)

... when the password is encoded with ODI 10g. This is because the encryption algorithm implemented in ODI 11g is not compatible with ODI 10g encryption.
Exception in thread "main" java.lang.NoClassDefFoundError: word2 Caused by: java.lang.ClassNotFoundException: word2 at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: word2. Program will exit.

... when the password is NOT encoded and is composed of several space-separated words ("word1 word2 word3", "Word1 word2", "WORD1 WORD2", "WORD1 Word2"...). This is because the algorithm implemented in ODI 11g is not able to decrypt the password.
ODI-1218: Session preparation failure: database error occurs while connecting to the master repository. Caused By: java.lang.IllegalArgumentException: Bad password format. Make sure that it's an encrypted password.

... when the password is NOT encoded and is composed of only one word ("JohnDoe123", "johndoe", "johndoe123", "JOHNDOE"...). This is because the encryption algorithm implemented in OD able to decrypt the password.
ODI-1414: Error connecting to agent Internal: a JDBC error occurs while connecting to the master repository. Caused By: oracle.odi.core.config.MasterRepositoryResourceFailureException: org.

springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Exception occurred while getting connection: oracle.ucp.UniversalConnectionPoolException: Cannot get Connection from Datasource at oracle.odi.core.repository.Repository.getMasterRepository(Repository. java:74) ... 9 more Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied ...

... when the password is composed of only one word, and starts with upper case letter ("JOHNDOE", "JOHNDoe"...). As the password starts with uppercase, ODI 11g considers that former Sun encryption method has been applied and tries to decrypt it. The result is send to the Database, which raises an invalid password message. In this case, the execution resumes after having sign invalid password message.

Exactly same behavior will be observed when executing OdiSqlUnload or other ODI tools that use encoded passwords.

References
NOTE:423842.1 - How Can I Encrypt A Password Using ODI? NOTE:424193.1 - Effect Of Environmental Variables Referenced In The "odiparams" ("snpparams") Configuration File NOTE:424644.1 - 'StringIndexOutofBoundsException' When Executing Scenario With ODI "startscen" Script

Related Products Middleware > Data Integration > Oracle Data Integrator (ODI) > Oracle Data Integrator Keywords ENCODE; JAVA.LANG.INDEXOUTOFBOUNDSEXCEPTION; JAVA.LANG.NULLPOINTEREXCEPTION; ODI; ORACLE DATA INTEGRATOR; PASSWORD; SCENARIO Errors ORA-1017; ODI-1218; ODI-1414; ODI-1418

Back to top Copyright (c) 2007, 2010, Oracle. All rights reserved. Legal Notices and Terms of Use | Privacy Statement

Вам также может понравиться