code: public void ejbPostInvoke()
                      throws RemoteException
      {
          // Validate the state
          if (ivMethod == null)
          {
              throw new IllegalStateException("WSEJBEndpointManager.ejbPreInvoke must be called first.");
          }
          if (ivMethodContext == null)
          {
              if (ivMethodIndex != Integer.MIN_VALUE)
              {
                  throw new IllegalStateException("WSEJBEndpointManager.ejbPostInvoke already called.");
              }
              // ejbPreInvoke called but failed; allow ejbPostInvoke
              return;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "ejbPostInvoke : " + ivMethod.getName());
  
          // Perform normal EJB Container postInvoke processing
          try
          {
              container.postInvoke(this, ivMethodIndex, ivMethodContext);
          } finally
          {
              ivMethodContext = null;
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(tc, "ejbPostInvoke : " + ivMethod.getName());
          }
      }
docs: Performs all EJB Container processing required to remove the EJB contexts
  established by ejbPreInvoke. <p>
  
  This method is intended to be called after calling ejbPreInvoke and
  after the EJB method has completed. This method MUST be called anytime
  ejbPreInvoke has been called, even if ejbPreInvoke fails with an
  exception. <p>
  
  If an exception occurs during ejbPostInvoke, or setException was called
  with a non-application exception, then the EJB Container will map the
  exception to an appropriate RemoteException as required by the EJB
  Specification, and throw the mapped exception. <p>
  
  @throws RemoteException when a system level error has occurred.