You shouldn't need the Remote interface if your classes operate in the same JVM.
Not sure if this will help, but I had the same problem as you (java.lang.ClassCastException: $ProxyXXX) when I was trying to use a Stateless Session Bean from within a second Stateless Session Bean.
Basically, my problem was that I was using the Session Bean's implementation class as the destination for my lookup - what I needed to use was the Local interface.
MySession -> Local interface for the MySession Stateless Session Bean
MySessionBean -> Contains the session bean's implementation code
I was doing:
InitialContext ctx = new InitialContext(); MySessionBean mySess = (MySessionBean)ctx.lookup(MySessionBean.class.getName());
which generated the ClassCastException. I changed this to
InitialContext ctx = new InitialContext(); MySession mySess = (MySession)ctx.lookup(MySession.class.getName());
Its worth checking....
I am using the appropriate class to typecast.