Hi Tsang,
that's a nice question. As far as I know, applicationclient jar is useful to provide your java client application with all appserver-specific client jars to "connect" to services (EJBs, JMS and so on) exposed by target appserver, as well as remote interfaces - for example - of ejbs you develop and deploy. I think that building an update version of application client part of a Java EE application is a process that somehow keep track of updates applied to the whole application server runtime (via service packs, for example).
So said: if you export EJB client jar, appserver runtime jars and so on and let them available to your client's classpath, the whole thing works. In my experience - mainly based upon WebSphere usage - the main problem is that such client runtime is quite big: you have to deploy ejbclient runtime, orb runtime (for RMI) and a lot of other jars. This may be a bit annoying, mainly because if you upgrade runtime server, you have to upgrade the distributed client components as well on all your clients.
As a note: where I work, we develop a rich client which execute remote service call to WAS appserver. I preferred NOT to use RMI, instead we wrap client- server communication with Request / Response objects which maps input and output parameters, and do
exchange them via http. Doing so we need not to keep client and server runtimes update together; client runtime is simply a standard JRE installation.
Regards,
Claude