docs: protected Identity createTransientOrRealIdentity(ClassDescriptor cld, Object objOrProxy)
      {
          if(objOrProxy == null) throw new OJBRuntimeException("Can't create Identity for 'null'-object");
          Identity result = null;
          Class topLevelClass = null;
          Class realClass = null;
          Object[] pks = null;
          try
          {
              final IndirectionHandler handler = ProxyHelper.getIndirectionHandler(objOrProxy);
  
              synchronized(objOrProxy)
              {
                  if(handler != null)
                  {
                      result = handler.getIdentity();
                  }
                  else
                  {
                      // now we are sure that the specified object is not a proxy
                      realClass = objOrProxy.getClass();
                      topLevelClass = broker.getTopLevelClass(objOrProxy.getClass());
                      if(cld == null)
                      {
                          cld = broker.getClassDescriptor(objOrProxy.getClass());
                      }
                      BrokerHelper helper = broker.serviceBrokerHelper();
  
                      FieldDescriptor[] fields = cld.getPkFields();
                      pks = new Object[fields.length];
                      FieldDescriptor fld;
                      for(int i = 0; i < fields.length; i++)
                      {
                          fld = fields[i];
                          /*
                          we check all PK fields for 'null'-values
                          */
                          Object value = fld.getPersistentField().get(objOrProxy);
                          if(helper.representsNull(fld, value))
                          {
                              result = (Identity) objectToIdentityMap.get(objOrProxy);
                              if(result == null)
                              {
                                  pks[i] = transientSequenceManager.getUniqueValue(fld);
                                  result = new Identity(realClass, topLevelClass, pks, true);
                                  //if(activeTx) objectToIdentityMap.put(objOrProxy, result);
                                  objectToIdentityMap.put(objOrProxy, result);
                              }
                              break;
                          }
                          else
                          {
                              pks[i] = value;
                          }
                      }
                      if(result == null)
                      {
                          result = new Identity(realClass, topLevelClass, pks, false);
                      }
                  }
              }
          }
          catch(ClassNotPersistenceCapableException e)
          {
              throw e;
          }
          catch(Exception e)
          {
              throw createException(e, "Can not init Identity for given object.", objOrProxy, topLevelClass, realClass, pks);
          }
          return result;
      }