IBM Support

EJB container exception nesting

Troubleshooting


Problem

A nesting exception occurs under the following three scenarios

Cause

The EJBContainer has been coded to comply with the EJB 2.0 Specification. The tables in section 18.3 of the spec. dictate what must be returned by the EJBContainer.

Resolving The Problem

  • Problem:
    When a runtime exception is thrown by the container, it is wrapped by
    com.ibm.ejs.container.UnknownLocalException.

    com.ibm.ejs.container.UnknownLocalException:  ; nested exception is: java.lang.NullPointerException


  • at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapException


    (LocalExceptionMappingStrategy.java:198)

    at com.ibm.ejs.container.LocalExceptionMappingStrategy.setUncheckedException


    (LocalExceptionMappingStrategy.java:266)
    at
    com.ibm.ejs.container.EJSDeployedSupport.setUncheckedLocalException

    (EJSDeployedSupport.java:316)


    Explanation:
    In the Local case, all exceptions thrown from within the Container processing are not mapped to UnknownLocalException.

    For example, CSIExceptions may be mapped to one of several EJBException subclasses
    (AccessLocalException, InvalidActivityLocalException, etc.).
    Vanilla EJBExceptions are not re-mapped. RemoteExceptions are mapped to EJBException. All other exceptions are mapped to UnknownLocalException
    (which is a subclass of EJBException) containing the root exception. This is done in compliance with the EJB specification that says that we must throw an EJBException. The EJBContainer subclasses in order to provide more meaningful exceptions when possible.


  • Problem:
    When an EJBException (which is a Runtime exception) or a checked exception is thrown from the container, the exception does not get wrapped. Why is this different?

    CNTR0019E: Non-application exception occurred while processing method "findByPrimaryKey". Exception data: javax.ejb.EJBException: class com.ibm.db2.jcc.b.ClientRerouteException


    Explanation:
    The EJBContainer does attempt to wrap the "root" exception in the EJBException whenever possible.


  • Problem:
    As per J2EE Spec, container has to throw an EJBException in case of any unchecked exception thrown by container. However, in WAS it is not the case, why?

    Bean method threw unchecked exception
    org.omg.CORBA.portable.UnknownException:   minor code: 0 completed: Maybe
    at com.ibm.ejs.csi.OrbUtilsImpl.mapException

  • (OrbUtilsImpl.java:88)
    at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapEJBException

    (RemoteExceptionMappingStrategy.java:390)
    at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapException

    (RemoteExceptionMappingStrategy.java:111)
    at com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException

    (RemoteExceptionMappingStrategy.java:201)
    at com.ibm.ejs.container.EJSDeployedSupport.setUncheckedException

    (EJSDeployedSupport.java:294)


    Explanation:
    The EJBContainer does throw an EJBException (or subclass of EJBException)
    in the "unchecked exception" case.

For more information about EBJException, here is a link to the EJB 2.1 Specification.

[{"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"EJB Container","Platform":[{"code":"PF002","label":"AIX"}],"Version":"9.0;8.5.5;8.0;7.0","Edition":"Base;Express;Network Deployment","Line of Business":{"code":"LOB45","label":"Automation"}},{"Product":{"code":"SSNVBF","label":"Runtimes for Java Technology"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"Java SDK","Platform":[{"code":"","label":""}],"Version":"","Edition":"","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

Document Information

Modified date:
15 June 2018

UID

swg21199310