Buggy code:
public abstract class Session implements Serializable { private static final long serialVersionUID = 1L ; public static final String SESSION_ATTRIBUTE_NAME = "session" ; static final String pageMapEntryAttributePrefix = "p:" ; private static final ThreadLocal current = new ThreadLocal ( ) ; private static final ThreadLocal dirtyObjects = new ThreadLocal ( ) ; private static final Log log = LogFactory . getLog ( Session . class ) ; private static final String pageMapAttributePrefix = "m:" ; private transient Application application ; private ClientInfo clientInfo ; private transient IConverter converter ; private transient boolean dirty = false ; private Locale locale ; private transient IPageFactory pageFactory ; private int autoCreatePageMapCounter = 0 ; private LinkedList usedPageMaps = new LinkedList ( ) ; private String style ; private FeedbackMessages feedbackMessages ; private transient Map usedPages ; private String id = null ; private transient ISessionStore sessionStore ; public static interface IPageMapVisitor { public void pageMap ( final PageMap pageMap ) { } } public static Session get ( ) { } public static void set ( final Session session ) { } public static void unset ( ) { } protected Session ( final Application application ) { } public final void clear ( ) { } public final Application getApplication ( ) { } public IAuthorizationStrategy getAuthorizationStrategy ( ) { } public final IClassResolver getClassResolver ( ) { } public ClientInfo getClientInfo ( ) { } public final PageMap getDefaultPageMap ( ) { } public final String getId ( ) { } public Locale getLocale ( ) { } public final synchronized Page getPage ( final String pageMapName , final String path , final int versionNumber ) { if ( Session . log . isDebugEnabled ( ) ) { Session . log . debug ( ( ( ( ( "Getting<seq2seq4repair_space>page<seq2seq4repair_space>[path<seq2seq4repair_space>=<seq2seq4repair_space>" + path ) + ",<seq2seq4repair_space>versionNumber<seq2seq4repair_space>=<seq2seq4repair_space>" ) + versionNumber ) + "]" ) ) ; } PageMap pageMap = pageMapForName ( pageMapName , ( pageMapName == ( PageMap . DEFAULT_NAME ) ) ) ; if ( pageMap != null ) { final String id = Strings . firstPathComponent ( path , PATH_SEPARATOR ) ; Thread t = ( ( Thread ) ( usedPages . get ( id ) ) ) ; while ( ( t != null ) && ( t != ( Thread . currentThread ( ) ) ) ) { try { <START_BUG> wait ( ) ; <END_BUG> } catch ( InterruptedException ex ) { throw new WicketRuntimeException ( ex ) ; } t = ( ( Thread ) ( usedPages . get ( id ) ) ) ; } usedPages . put ( id , Thread . currentThread ( ) ) ; return pageMap . get ( Integer . parseInt ( id ) , versionNumber ) ; } return null ; } public final IPageFactory getPageFactory ( ) { } public final IPageFactory getPageFactory ( final Page page ) { } public final PageMap pageMapForName ( String pageMapName , final boolean autoCreate ) { } public final synchronized PageMap createAutoPageMap ( ) { } public final synchronized String createAutoPageMapName ( ) { } public final List getPageMaps ( ) { } public final long getSizeInBytes ( ) { } public final String getStyle ( ) { } public final void init ( ) { } public void invalidate ( ) { } public final PageMap newPageMap ( final String name ) { } public final RequestCycle newRequestCycle ( final Request request , final Response response ) { } public final void removePageMap ( final PageMap pageMap ) { } public final void setApplication ( final Application application ) { } public final void setClientInfo ( ClientInfo clientInfo ) { } public final void setLocale ( final Locale locale ) { } public final Session setStyle ( final String style ) { } public final void touch ( Page page ) { } public final void visitPageMaps ( final Session . IPageMapVisitor visitor ) { } public final void info ( final String message ) { } public final void warn ( final String message ) { } public final void error ( final String message ) { } public final FeedbackMessages getFeedbackMessages ( ) { } public final IConverter getConverter ( ) { } private void addFeedbackMessage ( String message , int level ) { } protected void detach ( ) { } protected final void dirty ( ) { } protected final Object getAttribute ( final String name ) { } protected final List getAttributeNames ( ) { } protected abstract IRequestCycleFactory getRequestCycleFactory ( ) { } protected final ISessionStore getSessionStore ( ) { } protected final void removeAttribute ( String name ) { } protected final void setAttribute ( String name , Object value ) { } protected void update ( ) { } final void cleanupFeedbackMessages ( ) { } void dirtyPage ( final Page page ) { } final synchronized void pageDetached ( Page page ) { } void dirtyPageMap ( final PageMap map ) { } private final String attributeForPageMapName ( final String pageMapName ) { } List getDirtyObjectsList ( ) { } }

Fix:
wait ( 1000 ) ;