Sunday, May 15, 2011

Configure Oracle Parallel Concurrent Processing ( Oracle PCP )

Configure Parallel Concurrent Processing

3.1.1 Check prerequisites for setting up Parallel Concurrent Processing


To set up Parallel Concurrent Processing (PCP), you must have more than one Concurrent Processing node in your environment

3.1.2 Set Up PCP


  1. Edit the applications context file via Oracle Applications Manager, and set the value of the variable APPLDCP to ON.
  2. Execute AutoConfig by running the following command on all concurrent processing nodes:

$ $INST_TOP/admin/scripts/adautocfg.sh

  1. Source the Applications environment.
  2. Check the tnsnames.ora and listener.ora configuration files, located in $INST_TOP/ora/10.1.2/network/admin. Ensure that the required FNDSM and FNDFS entries are present for all other concurrent nodes.
  3. Restart the Applications listener processes on each application tier node.
  4. Log on to Oracle E-Business Suite Release 12 using the SYSADMIN account, and choose the System Administrator Responsibility. Navigate to Install > Nodes screen, and ensure that each node in the cluster is registered.
  5. Verify that the Internal Monitor for each node is defined properly, with correct primary and secondary node specification, and work shift details. For example, Internal Monitor: Host2 must have primary node as host2 and secondary node as host3. Also ensure that the Internal Monitor manager is activated: this can be done from Concurrent > Manager > Administrator.
  6. Set the $APPLCSF environment variable on all the Concurrent Processing nodes to point to a log directory on a shared file system.
  7. Set the $APPLPTMP environment variable on all the CP nodes to the value of the UTL_FILE_DIR entry in init.ora on the database nodes. (This value should be pointing to a directory on a shared file system.)
  8. Set profile option 'Concurrent: PCP Instance Check' to OFF if database instance-sensitive failover is not required. By setting it to 'ON', a concurrent manager will fail over to a secondary Application tier node if the database instance to which it is connected becomes unavailable for some reason.


3.1.3 Set Up Transaction Managers ,Internal Concurrent Manager ,Standard Manager


  1. Shut down the application services (servers) on all nodes
  2. Shut down all the database instances cleanly in the Oracle RAC environment, using the command:

SQL>shutdown immediate;

  1. Edit $ORACLE_HOME/dbs/_ifile.ora. Add the following parameters:

      • _lm_global_posts=TRUE
      • _immediate_commit_propagation=TRUE

  1. Start the instances on all database nodes, one by one.
  2. Start up the application services (servers) on all nodes.
  3. Log on to Oracle E-Business Suite Release 12 using the SYSADMIN account, and choose the System Administrator responsibility. Navigate to Profile > System, change the profile option ‘Concurrent: TM Transport Type' to ‘QUEUE', and verify that the transaction manager works across the Oracle RAC instance.
  4. Navigate to Concurrent > Manager > Define screen, and set up the primary and secondary node names for transaction managers.
  5. Restart the concurrent managers.
  6. If any of the transaction managers are in deactivated status, activate them from Concurrent > Manager > Administrator.
Transaction Manager (Internal use only)

Standard Manager

Internal Concurrent Manager

Internal Monitor for Apps-1


Internal Monitor for Apps-2

CRP Manager


3.1.4 Set Up Load Balancing on Concurrent Processing Nodes


  1. Edit the applications context file through the Oracle Applications Manager interface, and set the value of Concurrent Manager TWO_TASK (s_cp_twotask) to the load balancing alias (OURPROD_balance>).

Note: Windows users must set the value of "Concurrent Manager TWO_TASK" (s_cp_twotask context variable) to the instance alias.

  1. Execute AutoConfig by running $INST_TOP/admin/scripts/adautocfg.sh on all concurrent nodes.

Example:-

Then restart your application tier it will work .


Wednesday, April 20, 2011

How to change the number of OACORE JVMs in R12 with minimal disruption

Goal: To change the number of OACORE JVMs from 1 to 5 in R12 with almost no outage.

Highlights:

- No need to run autoconfig
- Minimal outage required (probaly < 1 min)
- Preserve the changes even if autoconfig is run at a later time.

Steps
1. On the Apache node, cd $ORA_CONFIG_HOME/10.1.3/opmn/conf/opmn.xml
2. Backup the opmn.xml
3. Edit the following section of opmn.xml


< /process-type>
< process-type id="oacore" module-id="OC4J" status="enabled" working-dir="$ORACLE_HOME/j2ee/home">
< module-data>
< category id="start-parameters">
< data id="java-options" value="-server -verbose:gc –Xmx1024M –Xms1024M -XX:MaxPermSize=160M -XX:NewRatio=2 -XX:+PrintGCTimeStamps -XX:+UseTLAB -XX:+UseParallelGC -XX:ParallelGCThreads=2 -Dcom.sun.management.jmxremote -Djava.security.policy=$ORACLE_HOME/j2ee/oacore/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false -Doracle.security.jazn.config=/apps/local/CEPRD/inst/apps/CEPRD_c7-ipnt-53/ora/10.1.3/j2ee/oacore/config/jazn.xml">
< data id="java-bin" value="/apps/local/CEPRD/inst/apps/CEPRD_c7-ipnt-53/admin/scripts/java.sh">
< data id="oc4j-options" value="-out /apps/local/CEPRD/inst/apps/CEPRD_c7-ipnt-53/logs/ora/10.1.3/opmn/oacorestd.out -err /apps/local/CEPRD/inst/apps/CEPRD_c7-ipnt-53/logs/ora/10.1.3/opmn/oacorestd.err">
< /category>
< category id="stop-parameters">
< data id="java-options" value="-server -verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=160M -XX:NewRatio=2 -XX:+PrintGCTimeStamps -XX:+UseTLAB -XX:+UseParallelGC -XX:ParallelGCThreads=2 -Djava.security.policy=$ORACLE_HOME/j2ee/oacore/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false">
< /category>
< category id="security-parameters">
< data id="wallet-file" value="file:/apps/local/CEPRD/inst/apps/CEPRD_c7-ipnt-53/certs/Apache">
< /category>
< /module-data>
< start retry="2" timeout="600">
< stop timeout="120">
< restart retry="2" timeout="720">
< port id="default-web-site" protocol="ajp" range="21585-21589">
< port id="rmi" range="20085-20089">
< port id="jms" range="23085-23089">
< process-set id="default_group" numprocs="1">
< /process-type>


In the above block, change the tag from < process-set id="default_group" numprocs="1">to < process-set id="default_group" numprocs="5">.

4. In the context file, change the following block from < oacore_nprocs oa_var="s_oacore_nprocs">1 to < oacore_nprocs oa_var="s_oacore_nprocs">5

5. Do NOT run autoconfig
6. adopmnctl.sh reload
7. Validate that 5 JVMs have been indeed started by adopmnctl.sh status

Risks and things to watch out for:

1. Make sure the port range for rmi and jms is 5.
2. Make sure those ports are not in use by using netstat command.
3. If the port range is not specifying 5 ports, assign 5 ports as per the port pool value.

For eg, if your port pool is 17, then rmi range will be 20085 - 20089 and jms range will be 23085- 23089.

4. Make similar change in context file so that your changes are not
5. You have a choice of customizing your template rather than directly changing your xml file as well.

R12 - How to enable Apache, OC4J and OPMN logging

Whenever raise SR with Oracle support for R12 application logging related issue, they will ask you to produce the logging details by enabling the Apache, OC4J and OPMN components and its services. Compared to 11i, Oracle Applications R12 introduces new easy way in order to enable logging for any of the components that are being used within it. The details about how to enable logging of these component you can also follow as explained in this post.

Oracle Configuration Home for Apache, OC4J & OPMN is
$ORA_CONFIG_HOME/10.1.3

Apache server is still being used and its configuration path is as following:
$ORA_CONFIG_HOME/10.1.3/Apache/Apache/conf

but OC4J services, by default Oracle Applications R12 creates 3 OC4J instances:
1. OACore: runs OA Framework-based applications
2. Forms: runs Forms-base applications
3. OAFM (Oracle Apps Fusion Middleware): runs web services, mapviewer, ascontrol

Configuration files path for the above 3 OC4J instances is:
$ORA_CONFIG_HOME/10.1.3/j2ee/[oacore, forms, oafm]/config

Configuration file used to adjust log file path for the above 3 OC4J instances is:
$ORA_CONFIG_HOME/10.1.3/j2ee/[oacore, forms, oafm]/application-deployments/[oacore, forms, oafm]/orion-application.xml

Log files types:
Oracle Applications / E-Business Suite R12 can be configured to generate one of two types of logs files as following:

1. Plain text (default):
- No log rotation available
- Log files need to be manually removed
2. Oracle Diagnostics Logging (ODL) XML:
- Logs rotation based on filesize, directory size
3. R12 logs by default are configured to generate plain text

Log files locations:
All log files are written in one home ( $LOG_HOME ) which is by default the (logs) directory under ($INST_TOP ).

Please note that after enbaling the logging for any of the following services you have to bounce the services in order the changes to take effect.

Steps to enable Apache logging:
Apache Logging ( Plain Text )

1) Edit the file $ORA_CONFIG_HOME/10.1.3/Apache/Apache/conf/httpd.conf and set
LogLevel warn (s_apache_loglevel in context file)
2) Bounce the apache
3) Try to access the home URL or reproduce the issue.
4) Collect the following logfiles from $LOG_HOME/ora/10.1.3/Apache
access_log.
error_log.

Values that can be set to LogLevel variable in httpd.conf file
LogLevel = emerg,alert,crit,error,warn,notice,info,debug.

Apache Logging (ODL Logging)
1) Set the following parameters in file $ORA_CONFIG_HOME/10.1.3/Apache/Apache/conf/httpd.conf
OraLogMode [oracle|odl|apache]
OraLogSeverity [message type]:[message level]

Message type: INTERNAL_ERROR, ERROR, WARNING, NOTIFICATION & TRACE
Message level: 1-32 (1 most severe, 32 least)
2) Bounce the apache
3) Try to access the home URL or reproduce the issue.
4) Collect the logfiles from $LOG_HOME/ora/10.1.3/Apache/oracle

Steps to enable OC4J logging:

Log file path is specified in the file
$ORA_CONFIG_HOME/10.1.3/j2ee/[oacore, forms, oafm]/application-deployments/[oacore, forms, oafm]/orion-application.xml

1. Open the file to set the following log level $ORA_CONFIG_HOME/10.1.3/j2ee/[oacore, forms, oafm]/config/j2ee-logging.xml
2. Come to the location located as
logger name=’oracle’ level=’NOTIFICATION:1‘ …..
3. Set the desired logging using following values
message type:message level
Message type: INTERNAL_ERROR, ERROR, WARNING, NOTIFICATION & TRACE
Message level: 1-32 (1 most severe, 32 least)
4. Locate the log file path from the file
$ORA_CONFIG_HOME/10.1.3/j2ee/[oacore, forms, oafm]/application-deployments/[oacore,forms,oafm]/orion-application.xml
(Will be identified with tag : log file path=… /log)
5. Bounce the OC4J instance and reproduce the issue
6. Collect the log files from the following locations .

Plain text
$LOG_HOME/ora/10.1.3/j2ee/[oacore, forms, oafm]/[oacore,forms,oafm]_[default_group_1]/application.log

ODL Log
$LOG_HOME/ora/10.1.3/j2ee/[oacore, forms, oafm]/[oacore,forms,oafm]_[default_group_1]/log.xml

Steps to enable OPMN logging:
There are 3 log files generated:
- (opmn.log): contains commands, exit status
- (opmn.dbg): contains debug log messages
- (opmn.out): contains stdout & stderr messages

1) Open the file $ORA_CONFIG_HOME/10.1.3/opmn/conf/opmn.xml to set the logging parameter
2) Logging is enabled per component (internal, ons or pm)
3) Levels that can be set are (component codes) as following:
none, fatal, error, warn, notify (written to .log)
debug1, debug2, debug3, debug4 (written to .dbg)
Ex :
opmnctl set target=log comp=warn
opmnctl set target=debug comp=debug1
4) Bounce opmn services and reproduce the issue
5) Collect the opmn log files generated in $LOG_HOME/ora/10.1.3/opmn
opmn.log , opmn.dbg and opmn.out

NOTE : Logfiles can be enabled for rotation using parameter s_opmn_log_rotation_size, s_opmn_log_rotation_time in opmn.xml

Components (Services) Status & Logs:
1. You can check the status of the services/components by passing 'status' parameter to any AD script in $ADMIN_SCRIPTS_HOME.

adapcctl.sh status

2. The various logs written while starting and stopping the services are created in ($LOG_HOME/appl/admin/log/), the logs files are:

TNS Listener Start/Stop log - adalnctl.txt
Fulfillment Server Start/Stop log - jtffmctl.txt
Oracle HTTP Server start/stop log - adapcctl.txt
Concurrent Managers and ICM start/stop log - adcmctl.txt
Forms OC4J start/stop log - adformsctl.txt
OACore OC4J start/stop log - adoacorectl.txtq
OAFM OC4J start/stop log - adoafmctl.txt
OPMN start/stop log - adopmnctl.txt

(adstpall.log) and (adstrtal.log) will record the messages while starting or stopping all services.

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.