Sunday, March 27, 2011

Analysis of a concurrent request

---------------------------------------------------------------------------------------- -- -- analyzereq.sql -- Analyze a concurrent request -- -- USAGE: sqlplus apps_user/apps_passwd @analyzereq request_id -- EX: sqlplus apps/apps @analyzereq 304504 -- -- -- $Id: analyzereq.sql,v 1.2 2000/04/03 04:18:04 pferguso Exp $ -- -- $Log: analyzereq.sql,v $ -- Revision 1.2 2000/04/03 04:18:04 pferguso -- added print_mgrs, more request info -- -- Revision 1.1.1.1 2000/02/23 22:00:36 pferguso -- initial import into CVS -- -- Revision 1.3 1999-12-29 13:46:44-05 pferguso -- added responsibility info, logfile names -- -- Revision 1.2 1999-12-29 13:13:58-05 pferguso -- first usable version -- -- Revision 1.1 1999-10-19 18:04:23-04 pferguso -- Initial revision -- -- -- ---------------------------------------------------------------------------------------- set serveroutput on set feedback off set verify off set heading off set timing off variable help_text varchar2(2000); prompt DECLARE req_id number(15) := &1; FUNCTION get_status(p_status_code varchar2) return varchar2 AS c_status fnd_lookups.meaning%TYPE; BEGIN SELECT nvl(meaning, 'UNKNOWN') INTO c_status FROM fnd_lookups WHERE LOOKUP_TYPE = 'CP_STATUS_CODE' AND LOOKUP_CODE = p_status_code; return rtrim(c_status); END get_status; FUNCTION get_phase(p_phase_code varchar2) return varchar2 AS c_phase fnd_lookups.meaning%TYPE; BEGIN SELECT nvl(meaning, 'UNKNOWN') INTO c_phase FROM fnd_lookups WHERE LOOKUP_TYPE = 'CP_PHASE_CODE' AND LOOKUP_CODE = p_phase_code; return rtrim(c_phase); END get_phase; PROCEDURE manager_check (req_id in number, cd_id in number, mgr_defined out boolean, mgr_active out boolean, mgr_workshift out boolean, mgr_running out boolean, run_alone out boolean) is cursor mgr_cursor (rid number) is select running_processes, max_processes, decode(control_code, 'T','N', -- Abort 'X','N', -- Aborted 'D','N', -- Deactivate 'E','N', -- Deactivated 'Y') active from fnd_concurrent_worker_requests where request_id = rid and not((queue_application_id = 0) and (concurrent_queue_id in (1,4))); run_alone_flag varchar2(1); begin mgr_defined := FALSE; mgr_active := FALSE; mgr_workshift := FALSE; mgr_running := FALSE; for mgr_rec in mgr_cursor(req_id) loop mgr_defined := TRUE; if (mgr_rec.active = 'Y') then mgr_active := TRUE; if (mgr_rec.max_processes > 0) then mgr_workshift := TRUE; end if; if (mgr_rec.running_processes > 0) then mgr_running := TRUE; end if; end if; end loop; if (cd_id is null) then run_alone_flag := 'N'; else select runalone_flag into run_alone_flag from fnd_conflicts_domain d where d.cd_id = manager_check.cd_id; end if; if (run_alone_flag = 'Y') then run_alone := TRUE; else run_alone := FALSE; end if; end manager_check; PROCEDURE print_mgrs(p_req_id number) AS CURSOR c_mgrs(rid number) IS SELECT user_concurrent_queue_name name, fcwr.running_processes active, decode(fcwr.control_code, 'A', fl.meaning, 'D', fl.meaning, 'E', fl.meaning, 'N', fl.meaning, 'R', fl.meaning, 'T', fl.meaning, 'U', fl.meaning, 'V', fl.meaning, 'X', fl.meaning, NULL, 'Running', '** Unknown Status **') status FROM fnd_concurrent_queues_vl fcqv, fnd_concurrent_worker_requests fcwr, fnd_lookups fl WHERE fcwr.request_id = rid AND fcwr.concurrent_queue_id = fcqv.concurrent_queue_id AND fcwr.concurrent_queue_id not in (1, 4) AND fl.lookup_code (+) = fcwr.control_code AND fl.lookup_type (+) = 'CP_CONTROL_CODE'; BEGIN for mgr_rec in c_mgrs(p_req_id) loop DBMS_OUTPUT.PUT_LINE('- ' mgr_rec.name ' Status: ' mgr_rec.status ' (' mgr_rec.active ' active processes)'); end loop; END print_mgrs; PROCEDURE analyze_request(p_req_id number) AS reqinfo fnd_concurrent_requests%ROWTYPE; proginfo fnd_concurrent_programs_vl%ROWTYPE; c_status fnd_lookups.meaning%TYPE; m_buf fnd_lookups.meaning%TYPE; conc_prog_name fnd_concurrent_programs.concurrent_program_name%TYPE; exe_method_code fnd_concurrent_programs_vl.execution_method_code%TYPE; conc_app_name fnd_application_vl.application_name%TYPE; tmp_id number(15); tmp_status fnd_concurrent_requests.status_code%TYPE; tmp_date date; conc_app_id fnd_concurrent_requests.program_application_id%TYPE; conc_id fnd_concurrent_requests.concurrent_program_id%TYPE; conc_cd_id fnd_concurrent_requests.cd_id%TYPE; v_enabled_flag fnd_concurrent_programs.enabled_flag%TYPE; conflict_domain fnd_conflicts_domain.user_cd_name%TYPE; parent_id number(15); resp_name varchar2(100); rclass_name fnd_concurrent_request_class.request_class_name%TYPE; exe_file_name fnd_executables.execution_file_name%TYPE; c_user fnd_user.user_name%TYPE; last_user fnd_user.user_name%TYPE; fcd_phase varchar2(48); fcd_status varchar2(48); traid fnd_concurrent_requests.program_application_id%TYPE; trcpid fnd_concurrent_requests.concurrent_program_id%TYPE; icount number; ireqid fnd_concurrent_requests.request_id%TYPE; pcode fnd_concurrent_requests.phase_code%TYPE; scode fnd_concurrent_requests.status_code%TYPE; live_child boolean; mgr_defined boolean; mgr_active boolean; mgr_workshift boolean; mgr_running boolean; run_alone boolean; reqlimit boolean := false; mgrname fnd_concurrent_queues_vl.user_concurrent_queue_name%TYPE; filename varchar2(255); qcf fnd_concurrent_programs.queue_control_flag%TYPE; apps_version varchar2(3); sep varchar2(200) := '------------------------------------------------------'; REQ_NOTFOUND exception; CURSOR c_wait IS SELECT request_id, phase_code, status_code FROM fnd_concurrent_requests WHERE parent_request_id = p_req_id; CURSOR c_inc IS SELECT to_run_application_id, to_run_concurrent_program_id FROM fnd_concurrent_program_serial WHERE running_application_id = conc_app_id AND running_concurrent_program_id = conc_id; CURSOR c_ireqs IS SELECT request_id, phase_code, status_code FROM fnd_concurrent_requests WHERE phase_code = 'R' AND program_application_id = traid AND concurrent_program_id = trcpid AND cd_id = conc_cd_id; CURSOR c_userreqs(uid number, s date) IS SELECT request_id, to_char(requested_start_date, 'DD-MON-RR HH24:MI:SS') start_date, phase_code, status_code FROM fnd_concurrent_requests WHERE phase_code IN ('R', 'P') AND requested_by = uid AND requested_start_date < s AND hold_flag = 'N'; BEGIN BEGIN SELECT * INTO reqinfo FROM fnd_concurrent_requests WHERE request_id = p_req_id; EXCEPTION WHEN NO_DATA_FOUND THEN raise REQ_NOTFOUND; END; DBMS_OUTPUT.PUT_LINE('Analyzing request 'req_id':'); DBMS_OUTPUT.PUT_LINE(sep); -- Program information DBMS_OUTPUT.PUT_LINE('Program information:'); SELECT fvl.* INTO proginfo FROM fnd_concurrent_programs_vl fvl, fnd_concurrent_requests fcr WHERE fcr.request_id = p_req_id AND fcr.concurrent_program_id = fvl.concurrent_program_id AND fcr.program_application_id = fvl.application_id; DBMS_OUTPUT.PUT_LINE('Program: ' proginfo.user_concurrent_program_name ' (' proginfo.concurrent_program_name ')'); SELECT nvl(application_name, '-- UNKNOWN APPLICATION --') INTO conc_app_name FROM fnd_application_vl fvl, fnd_concurrent_requests fcr WHERE fcr.request_id = p_req_id AND fcr.program_application_id = fvl.application_id; DBMS_OUTPUT.PUT_LINE('Application: 'conc_app_name); SELECT nvl(meaning, 'UNKNOWN') INTO m_buf FROM fnd_lookups WHERE lookup_type = 'CP_EXECUTION_METHOD_CODE' AND lookup_code = proginfo.execution_method_code; SELECT nvl(execution_file_name, 'NONE') INTO exe_file_name FROM fnd_executables WHERE application_id = proginfo.executable_application_id AND executable_id = proginfo.executable_id; DBMS_OUTPUT.PUT_LINE('Executable type: ' m_buf ' (' proginfo.execution_method_code ')'); DBMS_OUTPUT.PUT_LINE('Executable file name or procedure: ' exe_file_name); DBMS_OUTPUT.PUT_LINE('Run alone flag: ' proginfo.run_alone_flag); DBMS_OUTPUT.PUT_LINE('SRS flag: ' proginfo.srs_flag); DBMS_OUTPUT.PUT_LINE('NLS compliant: ' proginfo.nls_compliant); DBMS_OUTPUT.PUT_LINE('Output file type: ' proginfo.output_file_type); if proginfo.concurrent_class_id is not null then select request_class_name into rclass_name from fnd_concurrent_request_class where application_id = proginfo.class_application_id and request_class_id = proginfo.concurrent_class_id; DBMS_OUTPUT.PUT_LINE('Request type: ' rclass_name); end if; if proginfo.execution_options is not null then DBMS_OUTPUT.PUT_LINE('Execution options: ' proginfo.execution_options); end if; if proginfo.enable_trace = 'Y' then DBMS_OUTPUT.PUT_LINE('SQL Trace has been enabled for this program.'); end if; DBMS_OUTPUT.PUT_LINE(sep); DBMS_OUTPUT.PUT_LINE(' '); DBMS_OUTPUT.PUT_LINE(sep); -- Submission information DBMS_OUTPUT.PUT_LINE('Submission information:'); begin SELECT user_name into c_user from fnd_user where user_id = reqinfo.requested_by; exception when no_data_found then c_user := '-- UNKNOWN USER --'; end; begin SELECT user_name into last_user from fnd_user WHERE user_id = reqinfo.last_updated_by; exception when no_data_found then last_user := '-- UNKNOWN USER --'; end; DBMS_OUTPUT.PUT_LINE('It was submitted by user: 'c_user); SELECT responsibility_name INTO resp_name FROM fnd_responsibility_vl WHERE responsibility_id = reqinfo.responsibility_id AND application_id = reqinfo.responsibility_application_id; DBMS_OUTPUT.PUT_LINE('Using responsibility: ' resp_name); DBMS_OUTPUT.PUT_LINE('It was submitted on: ' to_char(reqinfo.request_date, 'DD-MON-RR HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('It was requested to start on: ' to_char(reqinfo.requested_start_date, 'DD-MON-RR HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Parent request id: ' reqinfo.parent_request_id); DBMS_OUTPUT.PUT_LINE('Language: ' reqinfo.nls_language); DBMS_OUTPUT.PUT_LINE('Territory: ' reqinfo.nls_territory); DBMS_OUTPUT.PUT_LINE('Priority: ' to_char(reqinfo.priority)); DBMS_OUTPUT.PUT_LINE('Arguments (' reqinfo.number_of_arguments '): ' reqinfo.argument_text); c_status := get_status(reqinfo.status_code); DBMS_OUTPUT.PUT_LINE(sep); DBMS_OUTPUT.PUT_LINE(' '); DBMS_OUTPUT.PUT_LINE(sep); -- Analysis DBMS_OUTPUT.PUT_LINE('Analysis:'); -- Completed Requests ------------------------------------------------------------------------------------------------------------- IF reqinfo.phase_code = 'C' THEN DBMS_OUTPUT.PUT_LINE('Request 'p_req_id' has completed with status "'c_status'".'); DBMS_OUTPUT.PUT_LINE('It began running on: ' nvl(to_char(reqinfo.actual_start_date, 'DD-MON-RR HH24:MI:SS'), '-- NO START DATE --')); DBMS_OUTPUT.PUT_LINE('It completed on: ' nvl(to_char(reqinfo.actual_completion_date, 'DD-MON-RR HH24:MI:SS'), '-- NO COMPLETION DATE --')); BEGIN SELECT user_concurrent_queue_name INTO mgrname FROM fnd_concurrent_queues_vl WHERE concurrent_queue_id = reqinfo.controlling_manager; DBMS_OUTPUT.PUT_LINE('It was run by manager: ' mgrname); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('It was run by an unknown manager.'); END; SELECT nvl(reqinfo.logfile_name, '-- No logfile --') INTO filename FROM dual; DBMS_OUTPUT.PUT_LINE('Logfile: ' filename); SELECT nvl(reqinfo.outfile_name, '-- No output file --') INTO filename FROM dual; DBMS_OUTPUT.PUT_LINE('Output file: ' filename); DBMS_OUTPUT.PUT_LINE('It produced completion message: '); DBMS_OUTPUT.PUT_LINE(nvl(reqinfo.completion_text, '-- NO COMPLETION MESSAGE --')); -- Running Requests ------------------------------------------------------------------------------------------------------------- ELSIF reqinfo.phase_code = 'R' THEN DBMS_OUTPUT.PUT_LINE('Request 'p_req_id' is currently running with status "'c_status'".'); DBMS_OUTPUT.PUT_LINE('It began running on: ' nvl(to_char(reqinfo.actual_start_date, 'DD-MON-RR HH24:MI:SS'), '-- NO START DATE --')); BEGIN SELECT user_concurrent_queue_name INTO mgrname FROM fnd_concurrent_queues_vl WHERE concurrent_queue_id = reqinfo.controlling_manager; DBMS_OUTPUT.PUT_LINE('It is being run by manager: ' mgrname); EXCEPTION WHEN NO_DATA_FOUND THEN null; END; SELECT nvl(reqinfo.logfile_name, '-- No logfile --') INTO filename FROM dual; DBMS_OUTPUT.PUT_LINE('Logfile: ' filename); SELECT nvl(reqinfo.outfile_name, '-- No output file --') INTO filename FROM dual; DBMS_OUTPUT.PUT_LINE('Output file: ' filename); IF reqinfo.status_code = 'Z' THEN -- Waiting request, See what it is waiting on FOR child in c_wait LOOP DBMS_OUTPUT.PUT_LINE('It is waiting on request ' child.request_id' phase = 'get_phase(child.phase_code) ' status = 'get_status(child.status_code)); END LOOP; ELSIF reqinfo.status_code = 'W' THEN -- Paused, check and see if it is a request set, and if its children are running SELECT nvl(concurrent_program_name, 'UNKNOWN') INTO conc_prog_name FROM fnd_concurrent_programs WHERE concurrent_program_id = reqinfo.concurrent_program_id; DBMS_OUTPUT.PUT_LINE('A Running/Paused request is waiting on one or more child requests to complete.'); IF conc_prog_name = 'FNDRSSTG' THEN DBMS_OUTPUT.PUT_LINE('This program is a Request Set Stage.'); END IF; IF instr(conc_prog_name, 'RSSUB') > 0 THEN DBMS_OUTPUT.PUT_LINE('This program is a Request Set parent program.'); END IF; live_child := FALSE; FOR child in c_wait LOOP DBMS_OUTPUT.PUT_LINE('It has a child request: ' child.request_id' (phase = 'get_phase(child.phase_code) ' - status = 'get_status(child.status_code)')'); IF child.phase_code != 'C' THEN live_child := TRUE; END IF; END LOOP; IF live_child = FALSE THEN DBMS_OUTPUT.PUT_LINE('This request has no child requests that are still running. You may need to wake this request up manually.'); END IF; END IF; -- Pending Requests ------------------------------------------------------------------------------------------------------------- ELSIF reqinfo.phase_code = 'P' THEN DBMS_OUTPUT.PUT_LINE('Request 'p_req_id' is in phase "Pending" with status "'c_status'".'); DBMS_OUTPUT.PUT_LINE(' (phase_code = P) (status_code = 'reqinfo.status_code')'); -- could be a queue control request SELECT queue_control_flag INTO qcf FROM fnd_concurrent_programs WHERE concurrent_program_id = reqinfo.concurrent_program_id AND application_id = reqinfo.program_application_id; IF qcf = 'Y' THEN DBMS_OUTPUT.PUT_LINE('This request is a queue control request'); DBMS_OUTPUT.PUT_LINE('It will be run by the ICM on its next sleep cycle'); GOTO diagnose; END IF; -- why is it pending? -- could be scheduled IF reqinfo.requested_start_date > sysdate or reqinfo.status_code = 'P' THEN DBMS_OUTPUT.PUT_LINE('This is a scheduled request.'); DBMS_OUTPUT.PUT_LINE('It is currently scheduled to start running on ' to_char(reqinfo.requested_start_date, 'DD-MON-RR HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('This should show on the form as Pending/Scheduled'); GOTO diagnose; END IF; -- could be on hold IF reqinfo.hold_flag = 'Y' THEN DBMS_OUTPUT.PUT_LINE('This request is currently on hold. It will not run until the hold is released.'); DBMS_OUTPUT.PUT_LINE('It was placed on hold by: 'last_user' on 'to_char(reqinfo.last_update_date, 'DD-MON-RR HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/On Hold'); GOTO diagnose; END IF; -- could be disabled IF proginfo.enabled_flag = 'N' THEN DBMS_OUTPUT.PUT_LINE('This request is currently disabled.'); DBMS_OUTPUT.PUT_LINE('The concurrent_program ' proginfo.user_concurrent_program_name ' needs to be enabled for this request to run.'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/Disabled'); GOTO diagnose; END IF; -- check queue_method_code -- unconstrained requests IF reqinfo.queue_method_code = 'I' THEN DBMS_OUTPUT.PUT_LINE('This request is an unconstrained request. (queue_method_code = I)'); IF reqinfo.status_code = 'I' THEN DBMS_OUTPUT.PUT_LINE('It is in a "Pending/Normal" status, ready to be run by the next available manager.'); ELSIF reqinfo.status_code = 'Q' THEN DBMS_OUTPUT.PUT_LINE('It has a status of "Standby" even though it is unconstrained. It will not be run by any manager.'); ELSIF reqinfo.status_code IN ('A', 'Z') THEN DBMS_OUTPUT.PUT_LINE('It is in a "Waiting" status. This usually indicates a child request waiting for the parent to release it.'); SELECT nvl(parent_request_id, -1) INTO parent_id FROM fnd_conc_req_summary_v WHERE request_id = p_req_id; IF parent_id = -1 THEN DBMS_OUTPUT.PUT_LINE('** Unable to find a parent request for this request'); ELSE DBMS_OUTPUT.PUT_LINE('It''s parent request id is: ' to_char(parent_id)); END IF; ELSE DBMS_OUTPUT.PUT_LINE('Hmmm. A status of ' reqinfo.status_code '. I was not really expecting to see this status.'); END IF; -- constrained requests ELSIF reqinfo.queue_method_code = 'B' THEN DBMS_OUTPUT.PUT_LINE('This request is a constrained request. (queue_method_code = B)'); IF reqinfo.status_code = 'I' THEN DBMS_OUTPUT.PUT_LINE('The Conflict Resolution manager has released this request, and it is in a "Pending/Normal" status.'); DBMS_OUTPUT.PUT_LINE('It is ready to be run by the next available manager.'); ELSIF reqinfo.status_code = 'Q' THEN DBMS_OUTPUT.PUT_LINE('It is in a "Pending/Standby" status. The Conflict Resolution manager will need to release it before it can be run.'); ELSIF reqinfo.status_code IN ('A', 'Z') THEN DBMS_OUTPUT.PUT_LINE('It is in a "Waiting" status. This usually indicates a child request waiting for the parent to release it.'); SELECT nvl(parent_request_id, -1) INTO parent_id FROM fnd_conc_req_summary_v WHERE request_id = p_req_id; IF parent_id = -1 THEN DBMS_OUTPUT.PUT_LINE('** Unable to find a parent request for this request'); ELSE DBMS_OUTPUT.PUT_LINE('It''s parent request id is: ' to_char(parent_id)); END IF; ELSE DBMS_OUTPUT.PUT_LINE('Hmmm. A status of ' reqinfo.status_code '. I was not really expecting to see this status.'); END IF; -- incompatible programs SELECT program_application_id, concurrent_program_id, cd_id INTO conc_app_id, conc_id, conc_cd_id FROM fnd_concurrent_requests WHERE request_id = p_req_id; icount := 0; FOR progs in c_inc LOOP traid := progs.to_run_application_id; trcpid := progs.to_run_concurrent_program_id; OPEN c_ireqs; LOOP FETCH c_ireqs INTO ireqid, pcode, scode; EXIT WHEN c_ireqs%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Request ' p_req_id ' is waiting, or will have to wait, on an incompatible request: ' ireqid ); DBMS_OUTPUT.PUT_LINE('which has phase = ' pcode ' and status = ' scode); icount := icount + 1; END LOOP; CLOSE c_ireqs; END LOOP; IF icount = 0 THEN DBMS_OUTPUT.PUT_LINE('No running incompatible requests were found for request 'p_req_id); END IF; -- could be a runalone itself IF proginfo.run_alone_flag = 'Y' THEN DBMS_OUTPUT.PUT_LINE('This request is constrained because it is a runalone request.'); END IF; -- single threaded IF reqinfo.single_thread_flag = 'Y' THEN DBMS_OUTPUT.PUT_LINE('This request is constrained because the profile option Concurrent: Sequential Requests is set.'); reqlimit := true; END IF; -- request limit IF reqinfo.request_limit = 'Y' THEN DBMS_OUTPUT.PUT_LINE('This request is constrained because the profile option Concurrent: Active Request Limit is set.'); reqlimit := true; END IF; IF reqlimit = true THEN DBMS_OUTPUT.PUT_LINE('This request may have to wait on these requests:'); FOR progs in c_userreqs(reqinfo.requested_by, reqinfo.requested_start_date) LOOP DBMS_OUTPUT.PUT_LINE('Request id: ' progs.request_id ' Requested start date: ' progs.start_date); DBMS_OUTPUT.PUT_LINE(' Phase: ' get_phase(progs.phase_code) ' Status: ' get_status(progs.status_code)); END LOOP; END IF; -- error, invalid queue_method_code ELSE DBMS_OUTPUT.PUT_LINE('** This request has an invalid queue_method_code of 'reqinfo.queue_method_code); DBMS_OUTPUT.PUT_LINE('** This request will not be run. You may need to apply patch 739644.'); GOTO diagnose; END IF; DBMS_OUTPUT.PUT_LINE(sep); DBMS_OUTPUT.PUT_LINE('Checking managers available to run this request...'); -- check the managers manager_check(p_req_id, reqinfo.cd_id, mgr_defined, mgr_active, mgr_workshift, mgr_running, run_alone); -- could be a runalone ahead of it IF run_alone = TRUE THEN DBMS_OUTPUT.PUT_LINE('There is a runalone request running ahead of this request'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/No Manager'); select user_cd_name into conflict_domain from fnd_conflicts_domain where cd_id = reqinfo.cd_id; DBMS_OUTPUT.PUT_LINE('Conflict domain = 'conflict_domain); -- see what is running begin select request_id, status_code, actual_start_date into tmp_id, tmp_status, tmp_date from fnd_concurrent_requests fcr, fnd_concurrent_programs fcp where fcp.run_alone_flag = 'Y' and fcp.concurrent_program_id = fcr.concurrent_program_id and fcr.phase_code = 'R' and fcr.cd_id = reqinfo.cd_id; DBMS_OUTPUT.PUT_LINE('This request is waiting for request 'tmp_id ', which is running with status 'get_status(tmp_status)); DBMS_OUTPUT.PUT_LINE('It has been running since: ' nvl(to_char(tmp_date, 'DD-MON-RR HH24:MI:SS'), '-- NO START DATE --')); exception when NO_DATA_FOUND then DBMS_OUTPUT.PUT_LINE('** The runalone flag is set for conflict domain 'conflict_domain ', but there is no runalone request running'); end; ELSIF mgr_defined = FALSE THEN DBMS_OUTPUT.PUT_LINE('There is no manager defined that can run this request'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/No Manager'); DBMS_OUTPUT.PUT_LINE('Check the specialization rules for each manager to make sure they are defined correctly.'); ELSIF mgr_active = FALSE THEN DBMS_OUTPUT.PUT_LINE('There are one or more managers defined that can run this request, but none of them are currently active'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/No Manager'); -- print out which managers can run it and their status DBMS_OUTPUT.PUT_LINE('These managers are defined to run this request:'); print_mgrs(p_req_id); ELSIF mgr_workshift = FALSE THEN DBMS_OUTPUT.PUT_LINE('Right now, there is no manager running in an active workshift that can run this request'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/No Manager'); -- display details about the workshifts ELSIF mgr_running = FALSE THEN DBMS_OUTPUT.PUT_LINE('There is one or more managers available to run this request, but none of them are running'); DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/No Manager'); -- print out which managers can run it and their status print_mgrs(p_req_id); ELSE -- print out the managers available to run it DBMS_OUTPUT.PUT_LINE('These managers are available to run this request:'); print_mgrs(p_req_id); END IF; -- invalid phase code ELSE DBMS_OUTPUT.PUT_LINE('Request 'p_req_id' has an invalid phase_code of "'reqinfo.phase_code'"'); END IF; <> BEGIN FND_CONC.DIAGNOSE(p_req_id, fcd_phase, fcd_status, :help_text); EXCEPTION WHEN OTHERS THEN :help_text := 'The FND_CONC package has not been installed on this system.'; END; DBMS_OUTPUT.PUT_LINE(sep); EXCEPTION WHEN REQ_NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Request 'p_req_id' not found.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error number ' sqlcode ' has occurred.'); DBMS_OUTPUT.PUT_LINE('Cause: ' sqlerrm); END analyze_request; BEGIN analyze_request(req_id); END; / prompt prompt Additional information (from FND_CONC.DIAGNOSE): print help_text;

Saturday, January 22, 2011

Oracle ADF 100 Business Components Error Messages

Business Components for





Java Error Messages

All messages are prefixed by text that indicates the area of the product where the error occurred. In this case, the prefix "JBO-" signifies that this message was generated by Oracle Business Components for Java.

JBO-25000: UnknownSQLTypeException

Reason: SQLType name passed to NullValue constructor is invalid.
Solution: Provide a valid SQLType name. See oracle.jbo.server.OracleTypeMapEntries.java for a list of valid SQLType names. Names are like "VARCHAR", "CHAR", "NUMBER", etc.

JBO-25001: NameClashException

Reason: A business component of this name already exists in the application module.
Solution: Provide a different name for the business component. If you provide a null value or null string for the name, the framework will create a unique name within the scope of the application module.

JBO-25002: NoDefException

Reason: No business component definition found with the given name in the project classpath.
Solution: Provide a correct name for the business component definition. If the definition is not in the classpath, you must include it there. Names are of the format myProjectPackage.BusinessPackage.BusinessComponent. This error can also occur if there is a case conflict, as when the database expects "DEPTNO" and receives "Deptno" instead.

JBO-25003: NoObjException

Reason: No business component object found with the given name in the application module.
Solution: Provide a different name for the business component object or create a new business component with the given name.

JBO-25004: InvalidDefNameException
Reason: An attempt has been made to associate a definition name with a type for which it is not valid.
Solution: The name should be a valid java-identifier with no spaces or punctuation. Names are of the format myProjectPackage.BusinessPackage.BusinessComponent

JBO-25005: InvalidObjNameException

Reason: An attempt has been made to associate a business component name with an object for which it is not valid.
Solution: The name should be a valid java identifier with no spaces or punctuation. Names are of the format myProjectPackage.BusinessPackage.BusinessComponent.

JBO-25006: InvalidParamException

Reason: The parameters passed to a business component method are invalid.
Solution: See the Javadoc for the method that throws this exception. Expand the call-stack for the correct parameters. e.g., DBTransSolutionImpl.executeCommand() throws this exception when command parameter is null or an empty String.

JBO-25007: InvalidOperException
Reason: Resetting row validation for a default RowIterator of a view object or a RowSet is not permitted.
Solution: Reset the RowValidation flag for the RowSet or view object. This will create another iterator for the RowSet or view object to navigate to another row without validating.

JBO-25008: InvalidOperException

Reason: An attempt has been made to remove a view object that is participating in a view link.
Solution: Remove the view link before removing the view object.

JBO-25009: oracle.jbo.domain.DataCreationException

Reason: A domain object could not be created with the given value. Either a domain constructor that accepts the given value does not exist, or there is no conversion method in the domain object for the given value type, or the domain's constructor threw an unexpected exception.
Solution: Confirm that the value being passed is valid with respect to the domain-type being created. e.g., passing a String value like "One" to the oracle.jbo.domain.Number constructor will throw this exception.

JBO-25010: oracle.jbo.domain.DomainValidationException

Reason: Validation failed with the given value in a domain constructor. This exception is thrown in the validate() method of a domain type.
Solution: Provide a valid value for the domain type.

JBO-25011: InvalidOperException

Reason: An attempt has been made to invoke an invalid navigation method for a forward-only view object or RowSet.
Solution: Either remove the forward-only setting for the view object or RowSet, or do not invoke navigation methods other than next() on the forward-only view object or RowSet.

JBO-25012: InvalidOperException

Reason: The client has attempted to locate view rows that has the given entity row as the primary entity row. However, it has been discovered that the entity row's entity definition does not match the entity definition of the view object's primary entity object base.
Solution: The entity row used to locate view rows must have be based on the same entity definition.

JBO-25013: TooManyObjectsException

Reason: Attempting to add a new entity to the cache with the primary key the same as an existing entity. This exception is thrown when uniquing a newly fetched/created entity with the cached set of entities.
Solution: The primary key value may not be unique for this entity-type. Fix by adding more attributes to the Key definition for this entity type, so that each row for this entity is uniquely identifiable. Or fix the primary key value so that this entity has a unique key identifier.

JBO-25014: RowInconsistentException

Reason: Comparison of the cached entity failed with the values in the database for that entity. This could happen when another user or operation has committed modifications to the same entity-row in the database. This exception can also be thrown if the equals() method on one of the domain-type attributes in the entity fails.
Solution: Choose from the following options:
Verify that another user or operation has not modified the same row in the database. If this entity has attributes of a domain type verify that the equals() method on these domains do not fail when comparing the existing cached value with the newly fetched value.
For any attributes/columns that are updated by the database, modify the entity attribute definition by selecting Refresh after update on the Attribute Settings page of the Entity Object Wizard.
Use view.executeQuery() frequently, especially after any operations that result in data being changed.

JBO-25015: InvalidOperException

Reason: Attempting to execute a query for a view object or RowSet after closing or removing the view object or RowSet.
Solution: Verify that the view object or RowSet is not removed or closed.

JBO-25016: ReadOnlyViewObjectException

Reason: Attempting to modify data for a view object which is declared to be read only. This includes creating a new row for this view object, removing a Row or modifying attributes of a ViewRow for this view object.
Solution: To modify the data, create a view object with ReadOnly flag set to false.

JBO-25017: RowCreateException

Reason: An unexpected exception occurred while creating a new entity instance.
Solution: The entity may not have a public default constructor. Fix the Reason for InstantiationException or IllegalAccessException that appears in the details of this exception.

JBO-25018: RowCreateException

Reason: An unexpected exception occurred while creating a new ViewRow instance.
Solution: The ViewRow may not have a public default constructor. Fix the Reason for InstantiationException or IllegalAccessException that appears in the details of this exception.

JBO-25019: RowNotFoundException

Reason: Attempting to lock a non-existing row in the database. This could occur when the cache has an entity which was subsequently deleted from the database by another user or operation.
Solution: Remove the current entity from the entity-cache by calling remove(). Or re-synchronize the cache with the database, by rolling-back the current transSolution or by committing the existing set of changes and then dropping the entity-cache.

JBO-25020: RowNotFoundException

Reason: Attempting to find a referenced entity in the ViewRow failed due to a changed foreign-key value.
Solution: Provide a valid foreign key value or remove the current one.

JBO-25021: oracle.jbo.domain.DataCreationException

Reason: A domain object could not be created with the given value. Either a domain-constructor that accepts the given value does not exist, or there is no conversion method in the domain object for the given value type, or the domain's constructor threw an unexpected exception.
Solution: Confirm that the value being passed is valid with respect to the domain-type being created. e.g., passing a String value like "One" to oracle.jbo.domain.Number constructor will throw this exception.

JBO-25022: ViewLinkAlreadyExistsException

Reason: Attempting to set the Master RowSet for this RowSet more than once.
Solution: Do not invoke setMasterRowSetIterator more than once on a RowSet.

JBO-25023: oracle.jbo.domain.GenericDomainException

Reason: An expected domain exception occurred.
Solution: Contact Business Components for Java Technical Support.

JBO-25024: JboException

Reason: Attempting to use an obsolete TypeMap constructor.
Solution: Verify that the type maps in use for this version of framework is compatible. See example type maps in oracle.jbo.server.OracleTypeMapEntries.

JBO-25025: ReadXMLException

Reason: An error occurred during reading the XML data for a view object. This exception may contain other ReadXMLExceptions.
Solution: Fix the contained Row- or Attribute-level exceptions in the details for this exception.

JBO-25026: RowReadXMLException

Reason: An error occurred during reading the XML data for a ViewRow. This exception may contain other ReadXMLExceptions for contained RowSets or Attributes.
Solution: Fix the RowSet- or Attribute-level exceptions in the details for this exception.

JBO-25027: AttributeReadXMLException

Reason: An error occurred during reading the XML data for an attribute of a ViewRow. This exception may contain other JboExceptions thrown from the set() method for this attribute.
Solution: Fix the JboException in the details for this exception.

JBO-25028: oracle.jbo.domain.DataCreationException

Reason: A domain object could not be created with the given value. Either a domain-constructor that accepts the given value does not exist, or there is no conversion method in the domain object for the given value type, or the domain's constructor threw an unexpected exception.
Solution: Confirm that the value being passed, is valid with respect to the domain-type being created. e.g., passing a String value like "One" to oracle.jbo.domain.Number constructor will throw this exception.

JBO-25029: oracle.jbo.domain.DataCreationException

Reason: The named data class (may be a domain) could not be found.
Solution: Make sure that the data class is accessible from the CLASSPATH and is a valid data class.

JBO-25030: InvalidOwnerException

Reason: Could not find the container entity for this entity, as this entity is a detail in a composition association. This could occur while creating a new entity instance by passing a non-existing master key value, or when updating the foreign-key value in this entity and there is no master entity with that foreign-key value.
Solution: Provide a valid foreign-key value to the create() method or setAttribute() method so that an appropriate master row is found for this entity.

JBO-25031: RowNotFoundException

Reason: The client has attempted to access an attribute of a view which is mapped to an entity row, but the corresponding entity row is null. If the view object consists of multiple entity object bases and if the secondary entity object bases are reference-only, the entity rows may be null if the FK linking the primary entity object to secondary entity objects is null.
Solution: In such a situation, the user is not allowed to access attributes of missing entity rows.

JBO-25032: JboSerializationException

Reason: Failure trying to make the application module state or transSolution state passive.
Solution: The passivation target store (Database, File or Memory) may have reported an exception. See the details of this exception for errors from the target store.

JBO-25033: JboSerializationException

Reason: Trying to activate the application module state or transSolution state failed.
Solution: The passivation target store (Database, File or Memory) may have reported an exception. See the details of this exception for errors from the target store. The given ID (in case of activation) may be invalid/not found.

JBO-25034: RowNotFoundException

Reason: The client has attempted to locate a row with a row handle, but the row is not found. This error may be raised if the client tries to take a row out of one query collection and use its handle to find a row in another query collection. Note that if the client calls executeQuery on a RowSet, it may receive a new query collection. Thus, you may get this error if the client retrieves a row from a RowSet, takes its row handle, calls executeQuery, and then tries to locate the row using the saved handle.
Solution: Make sure that your row handle is not stale.

JBO-25035: JboException

Reason: An application attempted to change an application module's passivation store after it had been initialized.
Solution:The passivation store (Database, File or Memory) may only be initialized once. If the customer application logic has not specified a passivation store when the serialization framework is invoked, the passivation store is initialized by the Business Components for Java framework. Check the client application logic for invocations of:
ApplicationModuleImpl.setStoreForPassiveState
which are invoked after the application module passivation store has been initialized.

JBO-25036: InvalidObjAccessException

Reason: An application invoked an object operation that is not supported in the object's current state.
Solution: Remove the invalid operation invocation or provide exception handling logic.

JBO-25200: NotConnectedException

Reason: The application module is not connected to the database.
Solution: Provide a valid set of connection credentials to connect to a database.

JBO-25201: AlreadyConnectedException

Reason: Trying to re-establish a database connection.
Solution: Disconnect the current database connection before trying to re-establish the JDBC connection.

JBO-25221: JboException

Reason: Attempting to call a method that is either not implemented or not supported.
Solution: This method is not available on the called object. E.g. setAttribute() in oracle.jbo.Key class is not implemented and will throw this exception.

JBO-25222: ApplicationModuleCreateException

Reason: There are a number of reasons the application module could not be created:
If your business components are deployed in local mode, they may not be on the classpath.
You may have unresolved classes on the server.
You may not have granted Java2 permissions.
Your Java pool size may be too small.
You may not have compiled your classes.
Solution: Depending on the Reason, chose from the following Solutions:
If your business components are deployed in local mode, they may not be on the classpath.If this is the Reason of the error, the exception will usually be followed by a different exception,

JBO-25002: Application Module not found.

If this occurs, make sure you've done all of the following:
Made a library for your business components.
Added a library to your client's project properties.
Included the library on the "libraries" page when you created a deployment profile for your client (whether your client was a web application or a command-line application).
Copied the library with your client to the target platform (whether your client was a web application or a command-line application).
Included all the files you copied (including the library) when you set the classpath on the target platform.
You may have unresolved classes on the server.Try the following procedure to resolve any unresolved classes on Oracle8i.
In the Navigator, right-click the JDBC connection you used to deploy the Business Components project.
Choose Invoke SQL*Plus from the context menu.
Copy and paste the following SQL*Plus script into the SQL*Plus window.
set termout offset echo offset heading offset pages 999set linesize 2000set feedback offselect 'alter java class "' replace(dbms_java.longname(object_name),'/','.')'" resolve;'from user_objectswhere object_type='JAVA CLASS'and status = 'INVALID'spool C:\temp\resolve.sql/spool offset echo onset termout on@C:\temp\resolve.sql
You may not have granted Java2 permissions.If this is the Reason of the error, there will be permissions errors in the database trace file. To correct the problem, see the help topic "Granting Permissions on a Business Components EJB" for information on granting Java2 permissions.
Note: The location of the database trace file varies from installation to installation, but in a default Windows NT installation, the file will be in the directory ORACLE_HOME\admin\orcl\ udump and will have the form orcl????.trc.
Your Java pool size may be too smallBusiness Components for Java deployed as EJBs work best with a Java pool size of at least 50MB. Edit your init.ora file and check the java_pool_size parameter. If it is under 50MB, change it, restart your database, and try your connection again.
You may not have compiled your classesCompile your business component classes and try again.
JBO-25223: ApplicationModuleCreateException

Reason: When business components are running inside JServer, only one root application module may be created. This is beReason JServer (already) provides one transSolution context.
Solution: It is illegal to attempt to create multiple root transSolutions when running inside JServer.

JBO-25224: JboException

Reason: Trying to retain the application module state during a transSolution disconnect failed.
Solution: The disconnect and retain application module state target requires that no database state exist before the transSolution connection is closed. Examples of database state include open database cursors in non-forward only view objects, database locks, and uncommitted database changes. The client should clean up this state by fetching or resetting any open view objects and committing any uncommitted changes.

JBO-25226: ApplicationModuleCreateException

Reason: This application module definition contains recursive references to child application modules. For example, if application module definition appMod1 contains a child application module of appMod2, and appMod2 contains appMod1,this error will be raised.
Solution: Remove recursive application module definition references.

JBO-25301: InvalidOwnerException

Reason: While traversing the parenthood chain for application modules, a child application module was found with no container (parent) application module.
Solution: If this application has added custom business component classes, it may be that the application code is attempting to access a child application module before it is fully initialized. If this is not the case, this error probably represents some internal error in Business Components for Java framework, in which case contact Business Components for Java Technical Support.

JBO-25302: InvalidOwnerException

Reason: A business component is found without a container (parent) application module.
Solution: If this application has added custom business component classes, it may be that the application code is attempting to access a business component before it is fully initialized. If this is not the case, this error probably represents some internal error in Business Components for Java framework, in which case contact Business Components for Java Technical Support.

JBO-26000: JboException

Reason: Attempting to load metadata objects failed. It may have unexpected data or the XML data may be corrupt.
Solution: Verify that the XML metadata for various components is valid.

JBO-26001: NoXMLFileException

Reason: Could not open the named XML file for read.
Solution: 1. Make sure that the file is present. In particular, if the file is to be found in a zip/jar file, make sure that the Zip/JAR file is included in the CLASSPATH.
2. This error is also reported if the name of the XML file does not match the object Name specified in the XML file. If the file system support case insensitive file names (e.g., Windows NT), make sure that the file name matches the object Name in the XML file in case-sensitive fashion.
3. For a .JPX file, this error is reported if the JPX file is missing the JboProject XML tag. Check the JPX file to make sure that the valid tag is in there.
4. One XML file may be extending another XML file (specified by the Extends element in this XML file). This error is reported if the base XML file is not found.
5. When loading the XML file for a package (JboPackage tag), this error is reported if some unexpected error occurs while loading a containee.
In all of the above cases, a more descriptive message may be printed on Diagnostic. If you are not seeing Diagnostic messages, you can run your application with Diagnostic turned on, as in "java -Djbo.debugoutput=console ...", to see Diagnostic messages.

JBO-26002: PersistenceException

Reason: Some XML parsing exception (oracle.xml.parser.v2.XMLParseException) was thrown.
Solution: The XMLParseException information is output to Diagnostic. If you are not seeing diagnostic messages, you can run your application with diagnostic turned on, as in "java -Djbo.debugoutput=console ...", to see diagnostic messages.

JBO-26003: PersistenceException

Reason: An error occurred while loading entity object definitions. An attribute index in the Java class for this entity has a mismatch with the index in the definition, or an attribute index is missing in the Java class.
Solution: Ensure that the indices of attributes in the definition for this entity match the indices defined in the Java class for this entity.

JBO-26004: InvalidOperException

Reason: An attempt was made to set the base definition of another definition object, e.g., setting B's base definition to A (i.e., B Extends A). However, A already extends B. Setting a recursive (circular) subclassing relationship among definition objects is illegal.
Solution: Review your subclassing hierarchy of your definition objects and correct errors.

JBO-26005: PersistenceException

Reason: The fetch mode specified in the view definition XML file is not valid.
Solution: Check the content of the XML file for the view definition. Look for an XML element named "FetchMode". Make sure that the value for that element is valid. Valid values are: "FETCH_AS_NEEDED", "FETCH_ALL", and "FETCH_DEFAULT".

JBO-26006: PersistenceException

Reason: The fetch size specified in the view definition XML file is not valid.
Solution: Check the content of the XML file for the view definition. Look for an XML element named "FetchSize". Make sure that the value for the element is a positive integer.

JBO-26007: PersistenceException

Reason: The maximum fetch size specified in the view definition XML file is not valid.
Solution: Check the content of the XML file for the view definition. Look for an XML element named "MaxFetchSize". Make sure that the value for the element is a non-negative integer, or "MAX_FETCH_UNLIMITED", or "MAX_FETCH_DEFAULT". A MaxFetchSize of 0 is the same as MAX_FETCH_UNLIMITED.

JBO-26008: PersistenceException

Reason: A problem is found in resolving a view link definition or an association. In case of a view link, this error may be Reasond by the fact that the source or destination view object cannot found. Or, if the view link ends have attribute names, this error may indicate that the named attributes cannot be found. Similarly, for an association, this error indicates that either source or destination entity object or attributes involved in the association cannot be found.
Solution: Make sure the XML definition for the view link/association has correct view object/entity object/attribute names.

JBO-26009: PersistenceException

Reason: This error occurs if the application uses meta object serialization files (.ser files) instead of XML files. It indicates that after the .ser file is deserialized, the top level object returned from deserialization is not an instance of oracle.jbo.server.xml.JboElementImpl.
Solution: This probably means that the .ser file is corrupt.

JBO-26010: PersistenceException

Reason: Entity attribute name in the view definition XML file is invalid or is not found.
Solution: Make sure that the entity name is valid. Also, check to make sure that the named attribute does exist in the entity object. The entity object is identified by the EntityUsage element.

JBO-26011: PersistenceException

Reason: Attribute definition found in XML file is invalid. It is missing SQLType value.
Solution: Correct the error in the XML file.

JBO-26012: PersistenceException

Reason: The view link definition in the XML file is missing either the source or destination view link end. For a view link XML file, two elements named ViewLinkDefEnd should be found.
Solution: Correct the error in the XML file.

JBO-26013: PersistenceException

Reason: Meta object name passed for lookup is invalid.
Solution: Normally, the meta object name is a dot-separated name of the meta object. For an entity object named Emp in package1.example, the correct name would be "package1.example.Emp". To correct, locate where the invalid name is coming from (could be meta object names mentioned in an XML file, or the name of the project, etc.) and change the name to a valid one.

JBO-26016: InvalidOperException

Reason: You cannot set customer query (calling setQuery()) on a view object if it is the detail view object in a master detail view link.
Solution: Do not call setQuery() if the view object is a detail.

JBO-26017: PersistenceException

Reason: An entity association definition in an XML file is invalid. In particular, this error means that either of the two association ends ("AssociationEnd" elements in the XML file) are missing "Attributes", which lists source or destination attributes.
Solution: Correct the error(s) in the XML file.

JBO-26018: InvalidOperException

Reason: An attempt was made to post a row with no attribute set. Some databases (in particular Oracle) do not allow an INSERT statement with no VALUE specified.
Solution: Set some attributes on the row before attempting to insert it into the database.

JBO-26019: JboException

Reason: Attempting to remove a master which has detail entities. In the case of a composition, a master cannot be removed if it has details.
Solution: Remove all the details of this master by accessing the details via an association and removing all of them.

JBO-26020: InvalidOperException

Reason: The application code tried to take a row from one row set (or view object) and insert it into another row set (view object). In response, the framework will make a "copy" of the row in the new row set. This new row will share references to the underlying entity objects. However, if the source and destination row sets do not share any entity object bases at all, this operation will fail as it does not find any entity rows to share.
Solution: When attempting to take a row from one row set and insert into another, make sure that they share at least one entity object base.

JBO-26021: PersistenceException

Reason: A NullPointerException was thrown while parsing an XML file. A possible Reason for this is that the DTD file is missing (oracle.jbo.dtd.jbo*.dtd).
Solution: Make sure the appropriate DTD file is present.

JBO-26022: CustomClassNotFoundException

Reason: Custom class could not be found and loaded. The custom class may be for a component (e.g., view object), a definition (e.g., view definition), or a row (e.g., view row, entity row).
Solution: Make sure that the named class is reachable from the CLASSPATH. The detail exception (if present) will give you more specific reasons why the attempt to locate and load the custom class failed.

JBO-26023: CustomClassNotFoundException

Reason: Custom class was found and loaded, but it is invalid in that it is not assignable to a framework (super) class.
Solution: Make sure that the custom class subclasses the appropriate framework (super) class.

JBO-26024: PersistenceException

Reason: An error occurred while creating initial context. This error usually carries a detail exception which will give further information on the Reason of the error.
Solution: If Business Components for Java is running inside JServer, make sure that the database user (schema) has the setContextClassLoader permission. To grant this, the database system administrator can invoke the following PL/SQL procedure: EXEC DBMS_JAVA.GRANT_PERMISSION('&&1', 'SYS:java.lang.RuntimePermission', 'setContextClassLoader', null); /**

JBO-26025: PersistenceException

Reason: An error occurred while trying to get System properties. Specifically, System.getProperties() call failed.
Solution: If Business Components for Java is running inside JServer, make sure that the database user (schema) has the proper property permission. To grant this, database system can invoke the following PL/SQL procedure: EXEC DBMS_JAVA.GRANT_PERMISSION('&&1', 'SYS:java.util.PropertyPermission', '*', 'read');

JBO-26026: PersistenceException

Reason: An error occurred while trying to get load properties.
Solution: Check to see if the named properties file contains valid Java properties.

JBO-26030: AlreadyLockedException

Reason: This row has already been locked by another user or transSolution.
Solution: Try locking the row again and the operation should succeed after the other user or transSolution has released the lock.

JBO-26041: DMLException

Reason: Some database error occurred while posting (writing) an entity to the database. This error normally carries a detail exception from the database which will give further information about the database failure.
Solution: Look at the details of the exception and address the database problem.

JBO-26042: DMLException

Reason: A database failure occurred while trying to generate an object ID (OID) and object reference (REF). When a new row is created on an entity which maps to an Oracle object table, an OID and REF for the new row are generated. This executes a SQL statement like select a.oid, make_ref(, a.oid) ... Somehow, this statement is failing.
Solution: Check the following:
1. Are you using the right version of Oracle database?
2. Is the table in question an object table?
This error normally carries a detail exception from the database, which will give further information about the database failure. Take a look at the detail exception and address the database problem.

JBO-26043: DMLException

Reason: An attempt was made to generate an object ID (OID) and/or a reference (REF) on a database system that does not support Oracle objects.
Solution: Do not try to create OID or REF on a database system that does not support Oracle objects.

JBO-26044: DMLException

Reason: The application tried to get an estimated row count (getEstimatedRowCount()) on a row set. While building the appropriate query statement, executing it, and retrieving the estimated count, an error occurred. This error is accompanied by the SQL statement that Reasond the error. Also, it normally carries a detail exception from database, which will give further information about the database failure.
Solution: Take a look at the SQL statement and the detail exception and address the database problem.

JBO-26045: DMLException
Reason: A database occurred while trying to generate an object ID (OID) from the primary key. This operation is valid only if the table in question is an object table and if the table specifies that the reference (REF) is PK based.
Solution: Check the following:
1. Are you using the right version of Oracle database?
2. Is the table in question an object table?
3. Does this object table use a PK-based REF?
This error normally carries a detail exception from database which will give further information about the database failure. Take a look at the detail exception and address the database problem.

JBO-26060: DMLException

Reason: A SQLException occurred while trying to register a JDBC driver.
Solution: Fix the underlying SQLException.

JBO-26061: DMLException

Reason: A SQLException occurred while trying to open a JDBC connection.
Solution: Fix the underlying SQLException.

JBO-26062: DMLException

Reason: A SQLException occurred while trying to close a JDBC connection.
Solution: Fix the underlying SQLException.

JBO-26064: DMLException

Reason: A SQLException occurred while trying to close a JDBC connection.
Solution: Fix the underlying SQLException.

JBO-26065: DMLException

Reason: A SQLException occurred during the commit phase of this transSolution.
Solution: Fix the underlying SQLException.

JBO-26066: DMLException

Reason: A SQLException occurred during the rollback phase of this transSolution.
Solution: Fix the underlying SQLException.

JBO-26067: JboException

Reason: An exception occurred while adding a JDBC connection to a pool that was already full.
Solution: Modify the class that is using the pool to check the pool size before adding a new connection to the pool.

JBO-26068: JboException

Reason: The user attempted to return a connection to a pool that was not responsible for managing that connection.
Solution: Modify the class that is using the pool to ensure that the connection belongs to the pool before returning the connection to the pool.

JBO-26069: JboException

Reason: A client request was timed out while waiting for a connection to be returned to the pool.
Solution: Increase the maximum pool size in order to accommodate 2x the maximum expected active request size. /**

JBO-26070: DMLException

Reason: A SQLException occurred while setting up metadata JDBC statement.
Solution: Fix the underlying SQLException. There might be a datatype mismatch between the attributes of the view object and columns in the SQL for it.

JBO-26080: DMLException

Reason: An unexpected exception occurred while executing the SQL to fetch data for an entity instance or lock it.
Solution: Fix the Reason for the SQLException in the details of this exception.

JBO-26081: SQLDatumException

Reason: A SQLException occurred when converting data from jdbc to oracle.jbo.domain.Struct attributes.
Solution: Fix the conversion errors as suggested in SQLException.

JBO-26100: AfterCommitException

Reason: An exception occurred in the afterCommit notification phase of the transSolution.
Solution: Verify the exception in the details of this exception. Fix the failing afterCommit() overridden methods in the entities or transient TransSolutionListener objects registered with the transSolution to listen into the commit/rollback cycle.

JBO-26101: AfterPostException

Reason: An exception occurred in the afterPost phase of the transSolution.
Solution: Verify the exception in the details of this exception. Fix the failing afterPost() overridden methods in the entities or transient TransSolutionPostListener objects registered with the transSolution to listen into the post cycle.

JBO-26102: AfterRollbackException

Reason: An exception occurred in afterRollback notification phase of the transSolution.
Solution: Verify the exception in the details of this exception. Fix the failing afterCommit() overridden methods in the entities or transient TransSolutionListener objects registered with the transSolution to listen into the commit/rollback cycle.

JBO-27001: ReadOnlyAttrException

Reason: This association attribute is marked readonly.
Solution: Cannot modify the value of the association attribute as it is marked readonly.

JBO-27002: AttrSetValException

Reason: A custom validation rule failed to validate an attribute value.
Solution: Fix the attribute value so that it passes the custom validation rule.

JBO-27003: ValidationException

Reason: Modified or new entities in this view object failed to validate.
Solution: Fix the failing entity values and revalidate the view object.

JBO-27004: ReadOnlyAttrException

Reason: Attempting to modify a read-only entity-attribute.
Solution: DO not modify a readonly attribute value.

JBO-27005: ValidationException

Reason: Modified or new entities within this application module or nested application module failed to validate.
Solution: Fix the failing entities and then re-validate this application module.

JBO-27006: AttrValException

Reason: An attribute cannot be found by the given name during validation.
Solution: Entity meta-data could be corrupt as there is an attribute which is to be validated but no definition could be found for that attribute in the meta-data.

JBO-27007: ValidationException

Reason: Attempting to validate a View Row failed.
Solution: Fix the failing entities or attributes as found in the details of this exception.

JBO-27008: ReadOnlyAttrException

Reason: Attempting to modify a ViewRow attribute that is readonly
Solution: Either change the Updateable flag for the View Attribute or do not attempt to update readonly attributes.

JBO-27009: ValidationException

Reason: Attempting to validate entities and attributes failed during validation of buffered attributes in Deferred Validation mode. (Not available in 3.x)
Solution: Fix the failure cases.

JBO-27010: ValidatonException

Reason: For strings, the length of the string value provided for an attribute is more than the max-length this attribute expects. For Numeric values, the length of the value (in string form) is more than what the attribute expects.
Solution: Fix the attribute value with respect to the precision and scale information for the failing attribute.

JBO-27011: AttrSetValException

Reason: A validation rule for an attribute failed either due to an unexpected exception in validating the attribute with that rule, or due to failure in evaluating the NOT operation on the rule.
Solution: Fix the attribute value so that it validates against the failing rule.

JBO-27012: ValidationException

Reason: The custom method validator attached to an entity returned false, indicating a failure in the validation for that entity.
Solution: Fix the Reason for failure in the custom validation method for this attribute.

JBO-27013: ValidationException

Reason: The custom method validator attached to an attribute returned 'false' indicating a failure in validation for that attribute in the custom method.
Solution: Fix the Reason for failure in the custom validator method for this attribute.

JBO-27014: AttrValException

Reason: The attribute value cannot be null as it has been marked mandatory.
Solution: Provide non-null values for mandatory attributes.

JBO-27015: ValidationException

Reason: In validating a master, some child entities were found that could not be validated. This occurs only in the case when there is a composition association between the master and detail entities.
Solution: Fix the attribute values in the child entities so that they are valid when the child entities are validated by the master

JBO-27016: InvalidAttrKindException

Reason: An unexpected attribute kind found in the definition for a view object.
Solution: Fix the attribute kind information in the xml-metadata definition for attributes in this view object.

JBO-27017: KeyNotFoundException

Reason: While loading the meta-data definition for this entity, there was no attribute marked as the primary key.
Solution: Set at least one attribute as the primary key for this entity type, so that entities of this type can be uniquely identified.

JBO-27018: AttrSetValException

Reason: The type of attribute value provided as an argument to the set() method for this attribute is not an instance of the Java type that this attribute expects.
Solution: Convert the argument to a proper Java type, such that it is an instance of the Java type that this attribute expects.

JBO-27019: AttrGetValException

Reason: An unexpected exception occurred in setAttribute method. Getter methods should throw a subclass of JboException so that custom exception messages are thrown/shown to the caller. This exception could also be thrown if the getter is not a public Java method.
Solution: Do not throw any exception other than sub-classes of JboException from any business logic code in the getter method for an attribute. Also verify that the getter method is a public Java method.

JBO-27020:

Reason: An unexpected exception occurred in setAttribute method. Setter methods should throw a subclass of JboException so that custom exception messages are thrown/shown to the caller. This exception could also be thrown if the setter is not a public Java method.
Solution: Do not throw any exception other than sub-classes of JboException from any business logic code in the setter method for an attribute. Also verify that the setter method is a public Java method.

JBO-27021: AttributeLoadException

Reason: An unexpected exception occurred during fetching values from a JDBC-resultset into an attribute for a row object. There could be conversion errors between the return type from JDBC for the attribute and it's Java type.
Solution: Verify that the JDBC-SQL type and Java type for the attribute are compatible. Fix any conversion errors or domain exceptions that are in the details of this exception.

JBO-27022: AttributeLoadException

Reason: An unexpected exception occurred during fetching values from a JDBC-resultset into an attribute for a row object. There could be conversion errors between the return type from JDBC for the attribute and it's Java type.
Solution: Verify that the JDBC-SQL type and Java type for the attribute are compatible. Fix any conversion errors or domain exceptions that are in the details of this exception.

JBO-27101: DeadEntityAccessException

Reason: Trying to refer to an invalid/obsolete entity. This could occur if some business logic has held on to an entity reference which was removed and the transSolution has been posted or committed. It could also occur if a reference entity has been removed from the cache and any ViewRow is attempting to access it.
Solution: Use findByPrimaryKey to find a valid entity of the desired key instead of holding on to a reference to an entity instance.

JBO-27102: DeadViewRowAccessException

Reason: Trying to access a ViewRow which is part of an obsolete/invalid collection. This could happen if a reference to the ViewRow is held by some business logic while the containing view object was removed.
Solution: Find the referenced ViewRow either by re-querying or using findByKey methods to get a valid reference to the ViewRow.

JBO-27120: SQLStmtException

Reason: Failed to execute a query. This could occur when trying to execute a query for a SQLValue domain class or a Sequence domain.
Solution: Fix the Reason for the SQLException thrown by JDBC found in the details of this exception.

JBO-27121: SQLStmtException

Reason: Failed to execute a SQL statement.
Solution: Fix the Reason for the SQLException thrown by JDBC found in the details of this exception.

JBO-27122: SQLStmtException

Reason: Failed to prepare a JDBC PreparedStatement.
Solution: Fix the Reason for the SQLException thrown by JDBC found in the details of this exception.

JBO-27123: SQLStmtException

Reason: Failed to prepare a JDBC CallableStatement.
Solution: Fix the Reason for the SQLException thrown by JDBC found in the details of this exception.

JBO-27124: SQLStmtException

Reason: Failed to create a JDBC Statement object with the given set of parameters.
Solution: Fix the Reason for the SQLException thrown by JDBC found in the details of this exception.

JBO-28000: PCollException

Reason: The client specified a custom persistent collection through the jbo.pcoll.mgr property. However, the class specified could not be located or loaded.
Solution: Make sure that the name specified for jbo.pcoll.mgr is for a valid class name. The class name should be fully qualified with the package name. A special keyword None represents no persistent collection manager, i.e., no spilling to disk will occur.

JBO-28001: PCollException

Reason: An error occurred while attempting to get a JDBC connection for persistent collection management.
Solution: Make sure that the database connection URL is correct. The detail to this exception will give further information on the problem.

JBO-28002: PCollException

Reason: An error occurred while creating "persistent collection control table." Normally, the control table's name is PCOLL_CONTROL.
Solution: Check to make sure that the connection has appropriate authority to create a table. The detail to this exception will give further information on the problem.

JBO-28004: PCollException

Reason: An error occurred while trying to lock the persistent collection control row. This error is thrown in two situations:
An unexpected database error occurred while attempting to lock the row.
After the persistent collection manager committed changes to database, it tried to lock the control row. Between the time of commit and lock attempt, another user somehow managed to lock the row and not release it within a set time. In this case, the detail will be null.
Solution: In the first case, see the details of this exception for further information on the database problem. In the second case, make sure that no other user locks the control rows outside the Business Components framework.

JBO-28005: PCollException

Reason: An unexpected error occurred while attempting to update the persistent collection control row.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28006: PCollException

Reason: An error occurred while attempting to create a database table to store persistent collection material.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28007: PCollException

Reason: An unexpected error occurred while attempting to commit persistent collection changes.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28009: PCollException

Reason: An unexpected error occurred while attempting to get the system date from the database. For the Oracle persistent manager, the SQL statement used for this would be "select sysdate from dual".
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28020: PCollException

Reason: An unexpected error occurred while passivating objects into the persistent store. An exception may have been thrown during serialization.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28021: PCollException

Reason: An unexpected error occurred while activating objects from the persistent store. An exception may have been thrown during deserialization.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28030: PCollException

Reason: An unexpected error occurred while inserting a passivation row into the persistent store table.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28031: PCollException

Reason: An unexpected error occurred while updating a passivation row in the persistent store table.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28032: PCollException

Reason: An unexpected error occurred while deleting a passivation row from the persistent store table.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28033: PCollException

Reason: An unexpected error occurred while retrieving a passivation row from the persistent store table.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28034: PCollException

Reason: The client attempted to retrieve a row in a persistent collection by an id, but the by-id access is not enabled on the persistent collection.
Solution: Enable by-id access by calling PCollection.enableIdAccess.

JBO-28035: PCollException

Reason: The client attempted to retrieve a row by an id, but the id value is invalid. The id must be greater than 0.
Solution: Give a valid id.

JBO-28036: PCollException

Reason: While attempting to activate an object of a given id, an internal integrity problem was found. In particular, a node which was thought to be passivated was found to be active.
Solution: Contact Business Components for Java Technical Support with how you ran into the problem.

JBO-28037: PCollException

Reason: While attempting to activate an object of a given id, an internal integrity problem was found. In particular, a child node/element expected to be found in a node is missing.
Solution: Contact Business Components for Java Technical Support with how you ran into the problem.

JBO-28038: PCollException

Reason: An unexpected error occurred while deleting all passivation rows from the persistent store table.
Solution: Look at the details of this exception for further information on the problem and how to address it.

JBO-28039: PCollException

Reason: While attempting to activate an object of a given id, an internal integrity problem was found. In particular, the root node of the persistent collection is no good. It is either (1) null, (2) has younger or older sibling, or (3) has a parent node. None of these should apply to the root node.
Solution: Contact Business Components for Java Technical Support with how you ran into the problem.

JBO-28200: JboException

Reason: Invalid entities still found in the validation list of the transSolution after attempting to validate all invalid entities for the VALIDATION_THRESHOLD 10 times (by default).
Solution: Fix any logic that invalidates entity instances in the validation cycle (perhaps in overridden validateEntity() methods) such that all entities are valid before the VALIDATION_THRESHOLD limit is reached.

JBO-28201: JboException

Reason: There are invalid entities or entities in the post list of the transSolution after trying to post all changes for the POST_THRESHOLD 10 times (by default).
Solution: Fix any logic that places entities in the transSolution's list of entities to be validated or posted in the post cycle, such that all entities get posted before the POST_THRESHOLD is reached.

JBO-28202: JboException

Reason: Invalid entity instances found in the transSolution in the beforeCommit phase.
Solution: Fix any business logic that invalidates entity instances in postChanges() such that there are no more invalid entities after all changes are posted during the commit cycle.

JBO-29000: JboException

Reason: If an unexpected exception occurs during a framework operation, this exception is thrown, with the unexpected exception included in the details of this exception.
Solution: Fix the Reason for the exception in the details for this JboException.

JBO-55001: VariantException

Reason: Unexpected type was provided to Variant utility.
Solution: Provide an expected type as reported in the exception.

JBO-55002: VariantException

Reason: The data-type passed to the Variant utility from a Validation rule is invalid. This could be due to a corrupt XML-metadata definition in the component's XML file.
Solution: Fix the component XML for the offending validation rule.

JBO-55003: VariantException

Reason: The name of the variant type passed to the Variant utility from a Validation rule is invalid. This could be due to a corrupt XML meta data definition in the component's XML file.
Solution: Fix the component XML for the offending validation rule.

Monday, December 27, 2010

Concurrent Manager Setup (PCP) in 11i(RAC) Environment

PURPOSE
-----------------------------
Configuring parallel concurrent processing allows you to distribute concurrent
managers, and workload across multiple nodes in a cluster, or networked environment.
PCP can also be implemented in a RAC environment in order to provide automated
failover of workload should the primary (source), or secondary (target) concurrent
processing nodes, or RAC instances fail. There are several different failure
scenarios that can occur depending on the type of Applications Technology Stack
implementation that is performed.

The basic failure scenarios are:

1. The database instance that supports the CP, Applications, and Middle-Tier
processes such as Forms, or iAS can fail.
2. The Database node server that supports the CP, Applications, and Middle-Tier
processes such as Forms, or iAS can fail.
3. The Applications/Middle-Tier server that supports the CP (and Applications)
base can fail.

The concurrent processing tier can reside on either the Applications, Middle-Tier,
or Database Tier nodes. In a single tier configuration, non PCP environment, a
node failure will impact Concurrent Processing operations due to any of these
failure conditions. In a multi-node configuration the impact of any these types
of failures will be dependent upon what type of failure is experienced, and how
concurrent processing is distributed among the nodes in the configuration. Parallel
Concurrent Processing provides seamless failover for a Concurrent Processing
environment in the event that any of these types of failures takes place.

In an Applications environment where the database tier utilizes Listener
(server) load balancing, and in a non-load balanced environment, there
are changes that must be made to the default configuration generated by
Autoconfig so that CP initialization, processing, and PCP functionality are
initiated properly on their respective/assigned nodes. These changes are
described in the next section - Concurrent Manager Setup and Configuration
Requirements in an 11i RAC Environment.

The current Concurrent Processing architecture with Global Service Management
consists of the following processes and communication model, where each process
is responsible for performing a specific set of routines and communicating with
parent and dependent processes.

Internal Concurrent Manager (FNDLIBR process) - Communicates with the Service
Manager.

The Internal Concurrent Manager (ICM) starts, sets the number of active processes,
monitors, and terminates all other concurrent processes through requests made to
the Service Manager, including restarting any failed processes. The ICM also
starts and stops, and restarts the Service Manager for each node. The ICM will
perform process migration during an instance or node failure. The ICM will be
active on a single node. This is also true in a PCP environment, where the ICM
will be active on at least one node at all times.

Service Manager (FNDSM process) - Communicates with the Internal Concurrent Manager,
Concurrent Manager, and non-Manager Service processes.

The Service Manager (SM) spawns, and terminates manager and service processes (these
could be Forms, or Apache Listeners, Metrics or Reports Server, and any other process
controlled through Generic Service Management). When the ICM terminates the SM that
resides on the same node with the ICM will also terminate. The SM is ‘chained’ to
the ICM. The SM will only reinitialize after termination when there is a function it
needs to perform (start, or stop a process), so there may be periods of time when the
SM is not active, and this would be normal. All processes initialized by the SM
inherit the same environment as the SM. The SM’s environment is set by APPSORA.env
file, and the gsmstart.sh script. The TWO_TASK used by the SM to connect to a RAC
instance must match the instance_name from GV$INSTANCE. The apps_ listener must
be active on each CP node to support the SM connection to the local instance. There
should be a Service Manager active on each node where a Concurrent or non-Manager
service process will reside.

Internal Monitor (FNDIMON process) - Communicates with the Internal Concurrent
Manager.

The Internal Monitor (IM) monitors the Internal Concurrent Manager, and restarts any
failed ICM on the local node. During a node failure in a PCP environment the IM will
restart the ICM on a surviving node (multiple ICM's may be started on multiple nodes,
but only the first ICM started will eventually remain active, all others will
gracefully terminate). There should be an Internal Monitor defined on each node
where the ICM may migrate.

Standard Manager (FNDLIBR process) - Communicates with the Service Manager and any
client application process.

The Standard Manager is a worker process, that initiates, and executes client requests
on behalf of Applications batch, and OLTP clients.

Transaction Manager - Communicates with the Service Manager, and any user process
initiated on behalf of a Forms, or Standard Manager request. See Note 240818.1
regarding Transaction Manager communication and setup requirements for RAC.

SCOPE & APPLICATION
-----------------------------
This article is provided for Applications development, product management, system
architects, and system administrators involved in deploying and configuring Oracle
Applications in a RAC environment. This document will also be useful to field
engineers and consulting organizations to facilitate installations and configuration
requirements of Applications 11i in a RAC environment.

Concurrent Manager Setup and Configuration Requirements in an 11i RAC Environment
-----------------------------
In order to set up Setup Parallel Concurrent Processing Using AutoConfig with GSM,
follow the instructions in the 11.5.8 Oracle Applications System Administrators Guide
under Implementing Parallel Concurrent Processing using the following steps:

1. Applications 11.5.8 and higher is configured to use GSM. Verify the configuration
on each node (see WebIV Note 165041.1).
2. On each cluster node edit the Applications Context file (.xml), that resides
in APPL_TOP/admin, to set the variable ON .
It is normally set to OFF. This change should be performed using the Context
Editor.
3. Prior to regenerating the configuration, copy the existing tnsnames.ora,
listener.ora and sqlnet.ora files, where they exist, under the 8.0.6 and iAS
ORACLE_HOME locations on the each node to preserve the files (i.e./
directory>/ora/$ORACLE_HOME/network/admin//tnsnames.ora). If any of
the Applications startup scripts that reside in COMMON_TOP/admin/scripts/
have been modified also copy these to preserve the files.
4. Regenerate the configuration by running adautocfg.sh on each cluster node as
outlined in Note 165195.1.
5. After regenerating the configuration merge any changes back into the tnsnames.ora,
listener.ora and sqlnet.ora files in the network directories, and the startup
scripts in the COMMON_TOP/admin/scripts/ directory. Each nodes tnsnames.ora
file must contain the aliases that exist on all other nodes in the cluster. When
merging tnsnames.ora files ensure that each node contains all other nodes
tnsnames.ora entries. This includes tns entries for any Applications tier nodes
where a concurrent request could be initiated, or request output to be viewed.
6. In the tnsnames.ora file of each Concurrent Processing node ensure that there is
an alias that matches the instance name from GV$INSTANCE of each Oracle instance
on each RAC node in the cluster. This is required in order for the SM to establish
connectivity to the local node during startup. The entry for the local node will
be the entry that is used for the TWO_TASK in APPSORA.env (also in the
APPS_.env file referenced in the Applications Listener [APPS_]
listener.ora file entry "envs='MYAPPSORA=/APPS_.env)
on each node in the cluster (this is modified in step 12).
7. Verify that the FNDSM_ entry has been added to the listener.ora file under
the 8.0.6 ORACLE_HOME/network/admin/ directory. See WebiV Note 165041.1 for
instructions regarding configuring this entry. NOTE: With the implementation of
GSM the 8.0.6 Applications, and 9.2.0 Database listeners must be active on all PCP
nodes in the cluster during normal operations.
8. AutoConfig will update the database profiles and reset them for the node from
which it was last run. If necessary reset the database profiles back to their
original settings.
9. Ensure that the Applications Listener is active on each node in the cluster where
Concurrent, or Service processes will execute. On each node start the database
and Forms Server processes as required by the configuration that has been
implemented.
10. Navigate to Install > Nodes and ensure that each node is registered. Use the node
name as it appears when executing a ‘nodename’ from the Unix prompt on the server.
GSM will add the appropriate services for each node at startup.
11. Navigate to Concurrent > Manager > Define, and set up the primary and secondary
node names for all the concurrent managers according to the desired configuration
for each node’s workload. The Internal Concurrent Manager should be defined on the
primary PCP node only. When defining the Internal Monitor for the secondary
(target) node(s), make the primary node (local node) assignment, and assign a
secondary node designation to the Internal Monitor, also assign a standard work
shift with one process.
12. Prior to starting the Manager processes it is necessary to edit the APPSORA.env
file on each node in order to specify a TWO_TASK entry that contains the
INSTANCE_NAME parameter for the local nodes Oracle instance, in order to bind
each Manager to the local instance. This should be done regardless of whether
Listener load balancing is configured, as it will ensure the configuration
conforms to the required standards of having the TWO_TASK set to the instance
name of each node as specified in GV$INSTANCE. Start the Concurrent Processes
on their primary node(s). This is the environment that the Service Manager
passes on to each process that it initializes on behalf of the Internal
Concurrent Manager. Also make the same update to the file referenced by the
Applications Listener APPS_ in the listener.ora entry "envs='MYAPPSORA=
/APPS_.env" on each node.
13. Navigate to Concurrent > Manager > Administer and verify that the Service Manager
and Internal Monitor are activated on the secondary node, and any other
addititional nodes in the cluster. The Internal Monitor should not be active on
the primary cluster node.
14. Stop and restart the Concurrent Manager processes on their primary node(s), and
verify that the managers are starting on their appropriate nodes. On the target
(secondary) node in addition to any defined managers you will see an FNDSM
process (the Service Manager), along with the FNDIMON process (Internal Monitor).

Failover Considerations
-----------------------------
In order to have log and output files available to each node during an extended node
failure, each log and out directory needs to be made accessible to all other CP nodes
in the cluster (placed on shared disk).

In order to view log and output files from a failed node during an outage/node
failure, the FNDFS_ entry in tnsnames.ora under the 8.0.6 ORACLE_HOME location
on each node should be configured using an ADDRESS_LIST following the example below,
to provide connect time failover. This entry should be placed in the tnsnames.ora
file on each node that supports Concurrent Processing, with the local node first in
the ADDRESS_LIST entry.

FNDFS_coe-srv5-pc=(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=coe_svr5_pc)(PORT=1231))
(ADDRESS=(PROTOCOL=tcp)(HOST=coe_svr7_pc)(PORT=1232)))
(CONNECT_DATA=(SID=FNDFS))
)

See Bug 3259441 for issues related to the TNS alias length exceeding 255 characters.

Without configuring connect time failover using the 8.0.6 ORACLE_HOME tnsnames.ora
by specifying the ADDRESS_LIST entry the only other alternative is to perform a manual
update of the fnd_concurrent_requests table for each request, in order to reflect the
change in outfile_node_name, and logfile_node_name from the failed to the surviving
node.

Determine the failed node name, and update the out and log entry to the
surviving node:

SQL> select outfile_node_name from fnd_concurrent_requests
2 where request_id=166273;

COE-SVR7-PC

SQL> select logfile_node_name from fnd_concurrent_requests
2* where request_id=166273

COE-SVR7-PC

Update both outfile and logfile_node_name from the failed to the surviving instance:

SQL> update fnd_concurrent_requests set outfile_node_name = 'COE-SVR5-PC'
2* where request_id =166273

SQL> update fnd_concurrent_requests set logfile_node_name = 'COE-SVR5-PC'
2* where request_id =166273

Using the ADDRESS_LIST rather than updating fnd_concurrent_reqests is the recommended
method to estabilsh failover access for Concurrent Manager log and output files.


Configuration Examples:
-----------------------------
Finding the instance name -

column host_name format a20;
select host_name, instance_name from gv$instance;

HOST_NAME INSTANCE_NAME
----------- ----------------
coe-svr7-pc APRA7
coe-svr5-pc APRA5

Modifying the APPSORA.env & APPS_.env file for node coe-svr5-pc -

> cd $APPL_TOP
> cat APPSORA.env
:
# $Header: APPSORA_ux.env 115.4 2003/03/01 01:02:35 wdgreene ship $
# =============================================================================
# NAME
# APPSORA.env
#
# DESCRIPTION
# Execute environment for Oracle and APPL_TOP
#
# NOTES
#
# HISTORY
#
# =============================================================================
#
# ###############################################################
#
# This file is automatically generated by AutoConfig. It will be read and over.
# If you were instructed to edit this file, or if you are not able to use the ss
# created by AutoConfig, refer to Metalink document 165195.1 for assistance.
#
# ###############################################################
#
. /oralocal/apraora/8.0.6/APRA.env
. /oralocal/apraappl/APRA.env
TWO_TASK=APRA5
export TWO_TASK

TNS alias definition in tnsnames.ora on each node -

cd $TNS_ADMIN
pwd
/oralocal/apraora/8.0.6/network/admin/APRA

APRA5 = (DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST= coe-svr5-pc)(PORT=1523))
(CONNECT_DATA=(INSTANCE_NAME=APRA5)(SERVICE_NAME=apradb))
)
APRA7 = (DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST= coe-svr7-pc)(PORT=1523))
(CONNECT_DATA=(INSTANCE_NAME=APRA7)(SERVICE_NAME=apradb))
)

FNDFS entry in listener.ora on each node -

cd $TNS_ADMIN
pwd
/oralocal/apraora/8.0.6/network/admin/APRA

( SID_DESC = ( SID_NAME = FNDFS )( ORACLE_HOME = /oralocal/apraora/8.0.6 )
( PROGRAM = /oralocal/apraappl/fnd/11.5.0/bin/FNDFS )
( envs='EPC_DISABLED=TRUE,NLS_LANG=AMERICAN_AMERICA.WE8ISO8859
1,LD_LIBRARY_PATH=/usr/dt/lib:/usr/openwin/lib:/oralocal/apraora/8.0.6/lib,SHLI
_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/oralocal/apraora/8.0.6/lib,LIBPATH
/usr/dt/lib:/usr/openwin/lib:/oralocal/apraora/8.0.6/lib' )
)
)