code: @SuppressWarnings("unchecked")
  	public final void readChildren(ObjectInputStream ois) throws IOException, ClassNotFoundException
  	{
  		synchronized (children)
  		{
  			for (int i = 0; i < serializable; i++)
  			{
  				Object child = ois.readObject();
  				BCSChild childBCSC = (BCSChild) ois.readObject();
  				children.put(child, childBCSC);
  
  				childDeserializedHook(child, childBCSC);
  
  				// set child's beanContext property
  				BeanContextChild beanContextChild = getChildBeanContextChild(child);
  				if (beanContextChild != null)
  				{
  					try
  					{
  						beanContextChild.setBeanContext(getBeanContextPeer());
  					}
  					catch (PropertyVetoException e)
  					{
  						throw new IOException(Messages.getString("beans.6B"));
  					}
  					// ensure no duplicate listener
  					beanContextChild.removePropertyChangeListener("beanContext", nonSerPCL);
  					// listen to child's beanContext change
  					beanContextChild.addPropertyChangeListener("beanContext", nonSerPCL);
  				}
  			}
  		}
  	}
docs: Deserializes children from the given object input stream.
  <p>
  The implementation reads pairs of child object and <code>BCSChild</code> object according to <code>serializable</code> property. For each pair, it is
  added to the <code>children</code> map and the <code>childDeserializedHook()</code> is called. If the child implements <code>BeanContextChild</code>, its
  <code>setBeanContext()</code> is also called.
  </p>
  <p>
  This method is called by <code>readObject()</code> if the context works standalone. Or if this support object is a delegate of another
  <code>BeanContext</code> implementation, then this method should be called by the peer. Doing this means that derialization can proceed without any
  circular dependency problems.
  
  @param ois
  the object input stream
  @throws IOException
  if I/O exception occurs
  @throws ClassNotFoundException
  if class of read object is not found