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 - 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
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.
(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"}}]
Was this topic helpful?
Document Information
Modified date:
15 June 2018
UID
swg21199310