The intention of LMAppletserver is to enable effective code reuse between the client and the server, and not have to repackage the classes for the client. Also a way of calling server methods - that is to give the feeling of coding "directly on the server". You would e.g. write this code in your applet to call an EJB3 session bean method: HelloWorldRemote helloObj = (HelloWorldRemote)AppletServiceClientProxy.newInstance(HelloWorldRemote.class); add(new JLabel(helloObj.helloWorld())); And on the server, a Stateless EJB3 session bean: @Stateless public class HelloWorldBean implements HelloWorldRemote { public String helloWorld() { return "Hello world from EJB3 session bean"; } } LMAppletserver provides automatic sending to the browser of the HelloWorldRemote interfaces, and all other classes that the clients references. Read more here: This example is just using a .war and could also be run in tomcat. This is from the applet code: HelloWorldBeanIF helloObj = (HelloWorldBeanIF)AppletServiceClientProxy.newInstance(HelloWorldBeanIF.class); add(new JLabel(helloObj.sayHello())); And on the server - just a simple bean which implements an interface that is passed to the client: public class HelloWorldBean implements HelloWorldBeanIF { public String sayHello() { return "Hello world!"; } } Read everything here: