Per capire se io ho ragione o torto è necessario che tu faccia due cose:
- controlla la classe UserHome e verifica se estende NamingContext
- controlla cosa esce da ctx.lookup("User");

codice:
NamingContext nc = (NamingContext) ctx.lookup("User");
In questo modo si dovrebbe riuscire a capire se l'oggetto associato a User è davvero un NamingContext oppure no.

Nota che non sono pratico del tuo ambiente di lavoro e mi baso solo sulla ClassCastException.
Tra l'altro non so neppure se la riga 34 sia proprio quella che ti ho indicato prima.