Monday, 17 November 2014

ADF: javax.faces.FacesException: javax.el.PropertyNotFoundException: Target Unreachable

Hi,

Today i have faced two issues,
1)javax.faces.FacesException: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'XXXDefPageBean' resolved to null

2) javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bindings' resolved to null

So i am documenting the possible cause and solution which i did with respect to my case. I will going to update this if i found same issue with different case.

1)javax.faces.FacesException: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'XXXDefPageBean' resolved to null

Reason: In my case i have page fragment and i dropped it as a view activity in bounded task flow. I have defined managed bean to programmatically handle things like, value change listener, launch pop up etc . Initially i have defined  the managed bean scope as 'Request scope' but later i found that as a best practice, it is better if we set all our managed bean to backingBean scope (The backing bean scope is comparable to the request scope, with the difference in that it exists for a specific client component. In general, all managed beans used in reusable components should be configured to backingBean scope. For example, bounded task flows that are designed to be regions on a page should use the backingBean scope if more than one instance of the task flow is expected to be on a single page.)

I have changed the scope from request scope to backingBeanScope in my taskflow but forget to change the scope in el expression of bean reference in my pageFragment

Initially all the reference in my pagefragment to managed bean are some thing as shown below

#{XXXDefPageBean.launchPopup}

In JDeveloper code editor window also, it was clearly stating that reference not found hence i got above error.

Solution: I have changed all the references by adding backingBeanScope (since the managed bean defined with scope 'backingBeanScope') something as shown below

#{backingBeanScope.XXXDefPageBean.launchPopup} it solves my error.



2) javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bindings' resolved to null

Reason: In my case, I have a bounded task flow and added method call but some how its databindings (pageDef which is responsible for dataSourece for this method) got deleted from dataBindings.cpx file while resolving conflicts and also there was no pageDef for this method call activity in the taskflow ,hence i got this error.

Solution: I have opened my task flow and created pageDef for my method call activity by right clicking on method call activity and choosed 'create pageDef ' option and it solves my error.

So, As you observer from both error that, "javax.faces.FacesException: javax.el.PropertyNotFoundException: Target Unreachable'" something is not able to access  in adf life cycle phases. If you carefully observe the exception message and analysed what might have caused the problem it would be easy to resolve error. JDevloper is smart enough to point out our mistake, we need to carefully observe by opening our page fragment or taskflow in source editior.

I will update this, if i faced the above error with different cases.

Saturday, 15 November 2014

LOV in ADF: How to show Non Primary- key attribute in LOV but get hold of primary key attribute when user make selection in LOV

Hi All,

Our Requirement: In a page, we supposed to show a searchable combo box which loads all the names(non primary key attribute from a table) and based on user selection from this LOV, we should show all the corresponding details for that selection from the table in a ADF form. 


But problem is, we need to show only "Name" attribute in Searchable LOV which is non primary key attribute and  if we have primary key attribute it is easy to show all the corresponding details for that selection.

Solution: I have used the concept called Transient View object  and Transient attribute to show searchable combo box instead of drag and droping actual  'Name' attribute from actual VO. And used Actual VO to show all the details for the corresponding user selection as ADF Form on a page.

 - A Transient view object contains only transient attributes,whose values are populated programmatically.

How to Create Transient VO : In the Create View Object wizard provide all the necessary field values like package, name etc and while selecting data source type, choose the option "Rows populated programmatically,not based on query

Step 1:
Step 2: Create two transient attributes. Say in my case i need one for name attribute(non primary key attribute) and one for id attribute (primary key attribute)
 In the next wizard, click on 'New' button to add attribute and define two attributes and make sure you have checked the Always Updatable  option.

Next is the important step, I need LOV for name attribute and data source for this  is actual VO which is based on EO. Please follow below steps

Select the Name attribute in Transient VO and define LOV(Hope you know, how to create LOV for attribute) and in the LOV Wizard, use Actual VO(Which you created based on EO and you will going to drag and drop this VO as a form) for List Data source option. And for List  Attribute select 'Name' (the attribute you want to display in LOV list).

After the above step, you need to create mapping between view attribute and list attribute as shown in below image

Here, first i have created mapping for Name attribute and then for Id attribute from Actual VO and Transient VO.

Under the UI hints tab, choose combo box  with list of values option
that is it from defining transient VO.

Refresh your data control and you should see the new transient VO.

So, Once user selects the 'Name' from LOV, i need get Id attribute. This i what i have done in my page.

In my case, i have page fragment which is dropped as View activity on a bounded task flow.

1) I have drag and dropped 'Name' attribute from Transient VO on to a page as a "inputComboboxListOfValues" and  set immediate  to true

Before launching this page, i need to execute create insert operation from the transient VO to get the value of 'Id' attribute from actual VO into transient VO 'Id'. 

So, i drag and dropped the "createInsert"operation from transient VO on to the bounded task flow and made it as a default activity. So, first create insert operation executes before the view activity(page fragment)

2)I have created attribute binding in my page for 'Id' attribute from Transient VO .

3)I have defined value change listener for my LOV component

and In the Value Change listener method
 i have done this,

Number value = (Number)ADFUtil.evaluateEL("#{bindings.Id.inputValue}");


where  "#{bindings.Id.inputValue}" is value of  Transient 'Id'  attribute and i have create attribute binding for the same on  page.

if i , evaluate the expression "#{bindings.Id.inputValue}", I am able to get corresponding id attribute value when user selects the 'Name' attribute in the LOV.  
I have used this 'Id' attribute to  query data from the actual VO  and able to display in a ADF form on the page.

Note: Suppose , when you select the value from Select One Choice, sometimes it gives index value instead of actual selected value
solution: in your output text change inputValue to attributeValue

Ex: #{bindings.Deptno.attributeValue} instead of #{bindings.Deptno.inputValue}

Hope this helps for you!




Monday, 10 November 2014

Populating who columns-createdBy,creationDate,lastUpdatedBy,lastModifiedBy(attributes) in ADF

Hi All,

I would like to thank "John Stegeman"  for his wonderful information on how to populate who columns -
createdBy,creationDate,lastUpdatedBy,last ModifiedBy declaratively on OTN.

I have exactly copied what ever he suggested for my reference and hope that it may helps for ADF beginners as well.

If you need to keep track of historical information in your entity object, such as when an entity was created or modified and by whom, or the number of times the entity has been modified, you specify an attribute with the History Column option selected (in the Edit Attribute dialog).

If an attribute's data type is Number, String, or Date, and if it is not part of the primary key, then you can enable this property to have your entity automatically maintain the attribute's value for historical auditing. How the framework handles the attribute depends which type of history attribute you indicate:

* Created On: This attribute is populated with the time stamp of when the row was created. The time stamp is obtained from the database.
* Created By: The attribute is populated with the name of the user who created the row. The user name is obtained using the getUserPrincipalName() method on the Session object.
* Modified On: This attribute is populated with the time stamp whenever the row is updated/created.
* Modified By: This attribute is populated with the name of the user who creates or updates the row.
* Version Number: This attribute is populated with a long value that is incremented whenever a row is created or updated.
If you choose Version Number from the History Column drop-down list,Oracle ADF will automatically increment the value of the numeric attribute every time the object is updated.



Screen shot for reference from JDev version 11.1.1.6 and 11.1.2.4















Note : I was getting "oracle.jbo.RowInconsistentException: JBO-25014: Another user has changed the row with primary key oracle.jbo.Key" error whenever i try to update any record 
Please refer below blog to find out exact reason for the issue
Reference blog
http://radio-weblogs.com/0118231/stories/2004/03/24/whyDoIGetOraclejborowinconsistentexception.html

In my case, i have resolved by checking tick mark for Change Indicator attribute for Id attribute(primary key) and it solves the error.


Change Indicator. This property defines specific attribute to be responsible for row data changes tracking, instead of checking every attribute. Only if Change Indicator attribute value will be changed in DB, then current row changes will be prevented and user will be informed about someone else changes in the same row.


Sunday, 9 November 2014

ADFUtil.java useful class for pro-grammatically handling things in ADF

Hi All,

In ADF, when we are handling things pro-grammatically, we will extensively use  ADFUtility class and here  i am documenting same for my reference and hope that  it may help others as well.



  import java.util.Map;

  import javax.el.ELContext;
  import javax.el.ExpressionFactory;
  import javax.el.MethodExpression;
  import javax.el.ValueExpression;

  import javax.faces.context.FacesContext;

  import oracle.adf.model.BindingContext;
  import oracle.adf.model.DataControlFrame;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import java.util.Map;

import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.model.SelectItem;

import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import oracle.adf.model.binding.DCParameter;

import oracle.adf.share.ADFContext;
import oracle.adf.share.logging.ADFLogger;

import oracle.adf.view.rich.component.rich.data.RichTable;
import oracle.adf.view.rich.component.rich.data.RichTreeTable;
import oracle.adf.view.rich.context.AdfFacesContext;

import oracle.adf.view.rich.util.FacesMessageUtils;

import oracle.binding.AttributeBinding;
import oracle.binding.BindingContainer;

import oracle.binding.ControlBinding;

import oracle.binding.OperationBinding;


import oracle.jbo.ApplicationModule;
import oracle.jbo.Key;
import oracle.jbo.Row;
import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;
import oracle.jbo.uicli.binding.JUCtrlValueBinding;

import org.apache.myfaces.trinidad.component.UIXTable;
import org.apache.myfaces.trinidad.model.RowKeySet;
import javax.faces.application.FacesMessage.Severity;

import oracle.adf.view.rich.component.rich.RichPopup;



import oracle.javatools.resourcebundle.BundleFactory;
import oracle.javatools.resourcebundle.NamedMessageFormat;


/**
* Provides various utility methods that are handy to
* have around when working with ADF.
*/
  public class ADFUtil {

  /**
  * When a bounded task flow manages a transaction (marked as requires-transaction,.
  * requires-new-transaction, or requires-existing-transaction), then the
  * task flow must issue any commits or rollbacks that are needed. This is
  * essentially to keep the state of the transaction that the task flow understands
  * in synch with the state of the transaction in the ADFbc layer.
  *
  * Use this method to issue a commit in the middle of a task flow while staying
  * in the task flow.
  */
  public static void saveAndContinue() {
  Map sessionMap =
  FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
  BindingContext context =
  (BindingContext)sessionMap.get(BindingContext.CONTEXT_ID);
  String currentFrameName = context.getCurrentDataControlFrame();
  DataControlFrame dcFrame =
  context.findDataControlFrame(currentFrameName);

  dcFrame.commit();
  dcFrame.beginTransaction(null);
  }

  /**
  * Programmatic evaluation of EL.
  *
  * @param el EL to evaluate
  * @return Result of the evaluation
  */
  public static Object evaluateEL(String el) {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  ELContext elContext = facesContext.getELContext();
  ExpressionFactory expressionFactory =
  facesContext.getApplication().getExpressionFactory();
  ValueExpression exp =
  expressionFactory.createValueExpression(elContext, el,
  Object.class);

  return exp.getValue(elContext);
  }

  /**
  * Programmatic invocation of a method that an EL evaluates to.
  * The method must not take any parameters.
  *
  * @param el EL of the method to invoke
  * @return Object that the method returns
  */
  public static Object invokeEL(String el) {
  return invokeEL(el, new Class[0], new Object[0]);
  }

  /**
  * Programmatic invocation of a method that an EL evaluates to.
  *
  * @param el EL of the method to invoke
  * @param paramTypes Array of Class defining the types of the parameters
  * @param params Array of Object defining the values of the parametrs
 * @return Object that the method returns
  */
  public static Object invokeEL(String el, Class[] paramTypes,
  Object[] params) {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  ELContext elContext = facesContext.getELContext();
  ExpressionFactory expressionFactory =
  facesContext.getApplication().getExpressionFactory();
  MethodExpression exp =
  expressionFactory.createMethodExpression(elContext, el,
  Object.class, paramTypes);

  return exp.invoke(elContext, params);
  }

  /**
  * Sets a value into an EL object. Provides similar functionality to
  * the <af:setActionListener> tag, except the from is
  * not an EL. You can get similar behavior by using the following...

  * setEL(to, evaluateEL(from))
  *
  * @param el EL object to assign a value
  * @param val Value to assign
  */
  public static void setEL(String el, Object val) {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  ELContext elContext = facesContext.getELContext();
  ExpressionFactory expressionFactory =
  facesContext.getApplication().getExpressionFactory();
  ValueExpression exp =
  expressionFactory.createValueExpression(elContext, el,
  Object.class);
  exp.setValue(elContext, val);
  }
 
 
    public static Object executeOperationBinding(String methodAction,
                                                               Map param) {
            OperationBinding ob = ADFUtil.findOperation(methodAction);

            if (param != null) {
                Map paramOps = ob.getParamsMap();
                paramOps.putAll(param);
            }
            Object result = ob.execute();
            return result;
        }
   
    public static Object executeOperationBinding(String pageDefName, String methodAction,
                                                               Map param) {
            OperationBinding ob = ADFUtil.findOperation(pageDefName,methodAction);

            if (param != null) {
                Map paramOps = ob.getParamsMap();
                paramOps.putAll(param);
            }
            Object result = ob.execute();
            return result;
        }
   
    /**
        * Find an operation binding in the current binding container by name.
        *
        * @param name operation binding name
        * @return operation binding
        */
       public static OperationBinding findOperation(String name) {
           OperationBinding op =
               getDCBindingContainer().getOperationBinding(name);
           if (op == null) {
               throw new RuntimeException("Operation '" + name + "' not found");
           }
           return op;
       }
   
    /**
        * Find an operation binding in the current binding container by name.
        *
        * @param name operation binding name
        * @return operation binding
        */
       public static OperationBinding findOperation(String pageDefName, String name) {
           OperationBinding op =
               findBindingContainer(pageDefName).getOperationBinding(name);
           if (op == null) {
               throw new RuntimeException("Operation '" + name + "' not found");
           }
           return op;
       }
   
    /**
        * Return the Binding Container as a DCBindingContainer.
        * @return current binding container as a DCBindingContainer
        */
       public static DCBindingContainer getDCBindingContainer() {
           return (DCBindingContainer)getBindingContainer();
       }
   
    /**
        * Return the current page's binding container.
        * @return the current page's binding container
        */
       public static BindingContainer getBindingContainer() {
           return (BindingContainer)evaluateEL("#{bindings}");
       }

    /**
        * Find the BindingContainer for a page definition by name.
        *
        * Typically used to refer eagerly to page definition parameters. It is
        * not best practice to reference or set bindings in binding containers
        * that are not the one for the current page.
        *
        * @param pageDefName name of the page defintion XML file to use
        * @return BindingContainer ref for the named definition
        */
       private static BindingContainer findBindingContainer(String pageDefName) {
           BindingContext bctx = getDCBindingContainer().getBindingContext();
           BindingContainer foundContainer =
               bctx.findBindingContainer(pageDefName);
           return foundContainer;
       }
   
   
    /**
     * This method would return the pageFlowScope
     **/
   
    public static Map getPageFlowScope(){
      AdfFacesContext facesCtx=  AdfFacesContext.getCurrentInstance();
      return facesCtx.getPageFlowScope();
    }
   
    /**
     * This method would return the requestScope
     **/
   
    public static Map getRequestFlowScope(){
      ADFContext adfContext = ADFContext.getCurrent();
       return adfContext.getRequestScope();
    }
 
    /**
     * This method will be used to refresh UI component
     **/
   
    public static void refreshUI(UIComponent uiComponent){
      AdfFacesContext adfctx = AdfFacesContext.getCurrentInstance();
      adfctx.addPartialTarget(uiComponent);
    }
   
 
    /**This method returns list of return attribute values of selected rows. It applies additional filter on selected Rows
     * @param pUITable Table component.
     * @param pReturnAttributeName Attribute
     * @return List of attribute values of selected rows.
     */
    public static ArrayList getAttributeValuesOfSelectedFilteredRows(UIXTable pUITable,
                                                             String pReturnAttributeName, String pFilterAttributeName, Object pFilterAttributeValue) {
        RowKeySet selectedRowKeys = null;
        selectedRowKeys = pUITable.getSelectedRowKeys();

        ArrayList objectList = new ArrayList();
        Object selectedObject = null;
        Iterator<Object> iter = selectedRowKeys.iterator();
        while (iter.hasNext()) {
            selectedObject = (List)iter.next();
            JUCtrlHierNodeBinding valBinding = null;
            pUITable.setRowKey(selectedObject);
            valBinding = (JUCtrlHierNodeBinding)pUITable.getRowData();
            Row row = valBinding.getRow();
            Object object = row.getAttribute(pFilterAttributeName);
            if(object.equals(pFilterAttributeValue))
                objectList.add(row.getAttribute(pReturnAttributeName));

        }
        pUITable.setRowKey(null);
        return objectList;
    }
   
    /** This method returns value of an attribute of a selected row. Useful if attribute is not a key attribute.
     * @param pUITable Table component
     * @param pAttributeName
     * @return
     */
    public static Object getAttributeValueOfSelectedRow(UIXTable pUITable,
                                                        String pAttributeName) {
        RowKeySet selectedRowKeys = null;
        selectedRowKeys = pUITable.getSelectedRowKeys();

        Object selectedObject = null;
        Iterator<Object> iter = selectedRowKeys.iterator();
        if (iter.hasNext()) {
            selectedObject = (List)iter.next();
            JUCtrlHierNodeBinding valBinding;
            pUITable.setRowKey(selectedObject);
            valBinding = (JUCtrlHierNodeBinding)pUITable.getRowData();
            Row row = valBinding.getRow();
            pUITable.setRowKey(null);
            return row.getAttribute(pAttributeName);

        }
        return null;
    }
   
    /** This method checks if any row is selected in Tree/Table. Useful to throw error while performing
     * an action on rows but user forget to select rows.
     * @param pUIComponent Tree/Table on which we want to check row selection.
     * @return true if row is selected. false if no row selected.
     */
    public static boolean isRowSelected(UIComponent pUIComponent) {
        RowKeySet selectedRowKeys = null;
        if (pUIComponent instanceof RichTreeTable)
            selectedRowKeys =
                    ((RichTreeTable)pUIComponent).getSelectedRowKeys();
        else if (pUIComponent instanceof RichTable)
            selectedRowKeys = ((RichTable)pUIComponent).getSelectedRowKeys();
        if (selectedRowKeys.size() > 0)
            return true;
        else
            return false;
    }
   

    /**This method adds a message in FacesContext and message would appear in UI.
     * @param pResBundle bundle name like "cnc.pay.invoice.XXCCFringeSetupViewBundle"
     * @param pMessageKey array of message keys.
     * @param pSeverity Severity
     * @param pTokenMap Map of tokens.
     */
    public static void showMessage(String pResBundle, String pMessageKey,
                                   Severity pSeverity, Map<String,Object> pTokenMap) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        String formattedMessage =  getFormattedMessage(pResBundle, pMessageKey, pTokenMap);
       
        FacesMessage fcMessage = null;
        if (FacesMessage.SEVERITY_ERROR.equals(pSeverity) || FacesMessage.SEVERITY_WARN.equals(pSeverity) || FacesMessage.SEVERITY_INFO.equals(pSeverity)){
            fcMessage =  new FacesMessage(pSeverity, formattedMessage, null);
        }
        else{
            fcMessage = FacesMessageUtils.getConfirmationMessage(new FacesMessage(formattedMessage));
        }
        ctx.addMessage(null, fcMessage);
       
    }
   
    /**
     * This method returns bundle message.
     *
     * @param pResBundle bundle name like "cnc.pay.fringe.view.XXCCFringeSetupViewBundle"
     * @param pMessageKey message key.
     * @param pTokenMap Map of tokens.
     * @return
     */
    public static String getFormattedMessage(String pResBundle,
                                             String pMessageKey,
                                             Map<String, Object> pTokenMap) {
        String formattedMessage = null;
        try {
            ResourceBundle rsBundle = BundleFactory.getBundle(pResBundle);
            if (pTokenMap == null)
                formattedMessage = rsBundle.getString(pMessageKey);
            else {
                formattedMessage =
                        (new NamedMessageFormat(pMessageKey)).formatMsg(rsBundle.getString(pMessageKey),
                                                                        pTokenMap);
            }
        } catch (Exception ex) {
            formattedMessage = pMessageKey;
           
        }
        return formattedMessage;
    }
   
    /**
     * This method is used to launch a popup.
     *
     * @param popup popup component which you want to launch.
     * @param alignComponent component with which you want to align.
     * @param alignType
     * @param additionalHints
     * @return
     */
    public static void showPopup(RichPopup popup,UIComponent alignComponent,RichPopup.PopupHints.AlignTypes alignType,RichPopup.PopupHints additionalHints ){
      FacesContext context = FacesContext.getCurrentInstance();
      if(additionalHints == null)
            additionalHints = new RichPopup.PopupHints();
      String alignId = null;
      if(alignComponent != null){
          alignId = alignComponent.getClientId(context);
          additionalHints.add(RichPopup.PopupHints.HintTypes.HINT_ALIGN_ID, alignId);
      }
     
        if(alignType != null){
            additionalHints.add(RichPopup.PopupHints.HintTypes.HINT_ALIGN,  alignType);
        }
     
     
      popup.show(additionalHints);
    }

      public static void showErrorMessage(String msg){
          FacesMessage fm = new FacesMessage(msg);
          fm.setSeverity(FacesMessage.SEVERITY_ERROR);
          FacesContext context = FacesContext.getCurrentInstance();
          context.addMessage(null, fm);
      }
     
    public static void showMessage(String msg){
        FacesMessage fm = new FacesMessage(msg);
        fm.setSeverity(FacesMessage.SEVERITY_INFO);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, fm);
    }

  }

Wednesday, 5 November 2014

11G : ADF Error Code (JBO) and Possible solutions

Hi All,

Today i found one interesting blog about many JBO erros and possible solution.
Here i have copied same for my reference.

I would like to thank for this blog writer

Here is the original blog reference

http://jneelmani.blogspot.in/2009/03/11g-adf-error-list-jbo.html


11G : ADF Error Code (JBO) ?
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.